Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Digitova/dynaform · GitHub
Skip to content

Repository files navigation

Screenshot

A simple React-Native component capable of building dynamic react-native forms out of a JSON schema. This project is loosely based on React Json Schema From.

Table of Contents

Installation

Install the repo via npm

$ npm install react-native-dynaform --save

Note: this is not live yet. So for now this is not true...

Usage

DynaForm allows you to turn JSON configuration into forms. These forms can be styled, can be validated, and return (via callback) a JSON object in a tree resembling the configuration you passed.

Create the <DynaForm> object and pass it the schema and (optional) a default state.

importReactfrom'react'importDynaFormfrom'react-native-dynaform'exportdefaultclassAppextendsReact.Component{render(){constschema={elementType: "form",elements: {"firstName": {dataType: "string",elementType: "text",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",},"lastName": {dataType: "string",elementType: "text",title: "Last Name",}}}constinitialState={"firstName": "Dyna","lastName": "Form"}return(<DynaFormschema={schema}data={initialState}/>)}}

The schema

The schema defines the form structure, return datatypes, validations, and any styling customizations you wish to make.

Element Types

Each level of the schema requires an elementType property. The elementType property is a required field that describes the type of form input at this level of the schema. It is entirely a presentational attribute used to field user input.

{
elementType: "object | string | password | ..."...}

elementType: "form"

PropertyTypeOptional/Required?
titlestringoptional
propertiesjsonObjectrequired

Example:

{title: "Login Form",elementType: "form",properties: {"formElement1": {
...
},"formElement2": {
...
}}}

elementType: "text"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Example:

"formElement1": {elementType: "text",dataType: "string",placeholder: "Please enter your first name",title: "First Name",subtitle: "What yo name?",helper: "Your first name, kind person!",}

elementType: "password"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Passwords are text fields, so take all the variables of the text elementType. The only difference is the input is masked like a password field.

elementType: "switch"

PropertyTypeOptional/Required?
dataTypestringrequired
titlestringrequired
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

A (typically boolean) native Switch element (like a checkbox).

Example:

"sendMeEmail": {elementType: "switch",dataType: "boolean",title: "Send me email",subtitle: "Do you want to receive marketing emails?",}

elementType: "picker"

PropertyTypeOptional/Required?
dataTypestringrequired
itemsmixedrequired
titlestringoptional
placeholderstringoptional
subtitlestringoptional
helperstringoptional
requiredbooleanoptional

Pickers are multiple select form fields where you can insert the values. To define the field items, define items as either an array (where the elements are the item keys and values) or an object, where object properties are keys, and the property value is its value.

Example:

country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: ['Argentina','Peru','USA'],}// This also works. Users will see the proper names, and when the country is// selected, it passes back the property name. So, for example, when a customer// selects "Argentina", the form passes back "ag" as the selection.
country: {elementType: 'picker',title: 'Country',helper: 'Your country of origin.',items: {ar: 'Argentina',pe: 'Peru',us: 'USA',}}

Form data validation

To specify how you want your form fields validated, DynaForm ships with a handful of built-in, ready to roll validators. Attach your validators to your field properties like so:

{elementType: "form",properties: {"email": {dataType: "string",elementType: "text",title: 'First Name',// Forces this field to be at least 6 characters longvalidation: ['required','minimum:6'],},}}

Validators can take arguments, but may not. For example required doesn't take arguments and is written as:

validators: ['required']

Other validators need an argument to work, such as minimum or maximum lengths:

validation: ['required','minimum:6','maximum:24']

This specifies that the field must be set and be between 6 and 24 characters.

Validator types:

 required
minimum:<number>
maximum:<number>
numeric
range:<from>:<to>
regex:<expression>

Custom validators

If you would rather pass in your own validator to the validation functions, the validation object allows you to pass functions directly to it. The functions must be similar in signature to those in the src/Validation directory.

constmyForm={
...
validation: ['required',garfield,'minimum:4']...}constgarfield=(input)=>{returnnewPromise((resolve,reject)=>{if(input.toLowerCase()=='lasagna'){// It passes!resolve()}else{// It fails :(reject('Garfield must have lasagna')}})}

Custome Styling

styling info here

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages