From 3427d30236dcbf1a50eb9e6572dad2f2c1171c51 Mon Sep 17 00:00:00 2001 From: Michele Date: Sat, 2 Oct 2021 12:05:45 +0200 Subject: [PATCH 1/9] remove parsley.js --- assets/scripts/public/core/conditional.js | 21 +- assets/scripts/public/core/nav.js | 4 +- assets/scripts/public/core/submit.js | 11 +- assets/scripts/public/core/validate.js | 199 ++++++++++-------- assets/scripts/public/core/validate2.js | 205 ------------------- assets/styles/public/components/_fields.scss | 16 +- 6 files changed, 134 insertions(+), 322 deletions(-) delete mode 100644 assets/scripts/public/core/validate2.js diff --git a/assets/scripts/public/core/conditional.js b/assets/scripts/public/core/conditional.js index 5165958..e03faaa 100644 --- a/assets/scripts/public/core/conditional.js +++ b/assets/scripts/public/core/conditional.js @@ -1,5 +1,4 @@ import { el, uid } from './helpers' -import 'parsleyjs' export default { init() { @@ -43,7 +42,7 @@ export default { valid = true; } else if (index == 0 && (typeof rule[1] !== 'undefined') && rule[1].operator == "&&" ) { valid = false; - break; + break; } else if((rule[index].operator=="&&") && (rule[index]._key > 1)) { valid = false; break; @@ -85,18 +84,8 @@ export default { }, validation($field, disable=true) { //reset validation if required - const $required = $field.find("[required]") - if($required) { - const navlink = ' li[data-name="' + $required.attr("id") + '"]' - if(disable) { - $required.attr("data-parsley-excluded", "true") - $(el("nav_list", true, navlink)).addClass("disabled") - } else { - $required.attr("data-parsley-excluded", "false") - $(el("nav_list", true, navlink)).removeClass("disabled") - } - uid($field) - $(el("form", "uid")).parsley().refresh() - } + const $input = $field.find("[required]") + $field.attr("data-excluded", disable ? "true" : "false") + $(el("nav_list", true, ' li[data-name="' + $input.attr("id") + '"]')).toggleClass("disabled", disable) }, -} \ No newline at end of file +} diff --git a/assets/scripts/public/core/nav.js b/assets/scripts/public/core/nav.js index dac37c6..ae21480 100644 --- a/assets/scripts/public/core/nav.js +++ b/assets/scripts/public/core/nav.js @@ -63,7 +63,6 @@ export default { $(el("button", "uid", "--prev")).toggle(false) $(el("button", "uid", "--next")).toggle(false) } - validate.form() } }) }, @@ -87,7 +86,8 @@ export default { }) function gotoStep(index) { const currentstep = current(); - if(validate.checkstep(currentstep, index)) { + const form = document.querySelector(el("form", "uid")) + if(validate.validateStep(form, currentstep, index)) { const $steps = $(el("section", "uid")) const $nav = $(el("nav_section", "uid")) const atTheEnd = index >= $steps.length - 1 diff --git a/assets/scripts/public/core/submit.js b/assets/scripts/public/core/submit.js index c0922f9..f72b457 100644 --- a/assets/scripts/public/core/submit.js +++ b/assets/scripts/public/core/submit.js @@ -1,15 +1,18 @@ import { el, uid } from './helpers' import hooks from './hooks' +import validate from './validate' /* eslint-disable no-unused-vars */ export default { init() { //init form submit - var submit = this - window.Parsley.on('form:init', function() { - $(this.$element).submit(function(e){ - e.preventDefault() + let submit = this + let forms = document.querySelectorAll(el('form')) + forms.forEach(function(form) { + form.addEventListener("submit", function(e) { + e.preventDefault(); + if(!validate.validateForm(form)) { return false; } uid($(this)) submit.token() hooks.event('FormSubmit') diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index 35d9ff5..e974b0a 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -1,101 +1,134 @@ import { el, uid } from './helpers' const { __ } = wp.i18n -import 'parsleyjs' +let fieldOptions = { + text: { + multiple: false, + }, + textarea: { + multiple: false, + }, + email: { + multiple: false, + rules: { + email: __("This value should be a valid email", "formality"), + } + }, + number: { + multiple: false, + rules: { + number: __("This value should be a valid number", "formality"), + min: /* translators: validation */ __("This value should be greater than or equal to %s", "formality"), + max: /* translators: validation */ __("This value should be lower than or equal to %s", "formality"), + } + }, + select: { + multiple: false, + }, + multiple: { + multiple: true, + }, + rating: { + multiple: true, + }, + switch: { + multiple: false, + }, + upload: { + multiple: false, + }, +} export default { init() { //init validation - $(el("form")).each(function() { - uid($(this)) - $(el("section", "uid")).each(function(index, section) { - $(section).find(':input').attr('data-parsley-group', 'step-' + index) + const forms = document.querySelectorAll(el("form")) + forms.forEach(function(form){ + const sections = form.querySelectorAll(el("section")) + sections.forEach(function(section, index){ + const fields = section.querySelectorAll(el("field")) + fields.forEach(function(field){ + field.setAttribute('data-step', index) + }) }) }) - this.field_error() - this.field_success() - this.form_error() - this.i18n() }, - checkstep(index, newindex) { - //validate single step - let valid = false - let options = this.parsley_options() - if(index > newindex) { - valid = true - } else { - $(el("form", "uid")).parsley(options).whenValidate({ - group: 'step-' + index, - }).done(function() { - valid = true - $(el("nav_section", "uid")).eq(index).addClass(el("nav_section", false, "--validated")) - }) + validateStep(form, index, newindex) { + if(index > newindex) { return true } + const valid = this.validateForm(form, index) + if(valid) { + const sections = form.querySelectorAll(el("nav_section", "uid")) + sections[index].classList.add(el("nav_section", false, "--validated")) } return valid }, - form() { - //validate standard form (1 step) - let options = this.parsley_options() - $(el("form", "uid")).parsley(options) - }, - parsley_options() { - //create parsley options array - let options = { - classHandler: function (element) { - return element.$element.closest(el("field")) - }, - errorClass: el("field_error", false), - errorsContainer: function(element) { - return element.$element.closest(el("input")).find(el("input", true, "__status")) - }, - successClass: el("field_success", false), - errorsWrapper: '', + checkRule(input, rule) { + let valid = false; + switch(rule) { + case 'required': + if(NodeList.prototype.isPrototypeOf(input)){ + Array.prototype.forEach.call(input, function(single, i){ if(single.checked) { valid = true; } }) + } else { + valid = input.value !== '' + } + break; + case 'email': + valid = input.value.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/); + break; + case 'checked': + valid = input.checked; + break; + case 'notchecked': + valid = !input.checked; + break; } - return options + return valid; }, - form_error() { - window.Parsley.on('form:error', function() { - - }) - }, - field_error() { - //field error event - window.Parsley.on('field:error', function() { - const id = $(this.$element).attr("id") - uid($(this.$element)) - $(el("nav_legend", 'uid', ' li[data-name="' + id + '"]')).addClass("error") - const index = $(el("nav_section", "uid")).index(el("nav_section", "uid", "--active")) - $(el("nav_section", "uid")).eq(index).removeClass(el("nav_section", false, "--validated")) - }) + validateField(field) { + let validate = this; + const type = field.getAttribute('data-type') + const required = field.classList.contains(el("field", false, "--required")) + let rules = 'rules' in fieldOptions[type] ? Object.keys(fieldOptions[type]['rules']) : [] + const multiple = fieldOptions[type]['multiple'] + if(required) { rules.unshift('required') } + const input = multiple ? field.querySelectorAll('input, select, textarea') : field.querySelector('input, select, textarea') + const name = multiple ? input[0].name : input.name + const status = field.querySelector(el('input_status')) + const legend = document.querySelector(el('nav_legend', true, ' li[data-name="' + name + '"]')) + let valid = true; + let error = ''; + if(!rules.includes('required') && !multiple && !input.value) { + //skip validation + } else { + Array.prototype.forEach.call(rules, function(rule){ + if(valid && !validate.checkRule(input, rule)) { + error = rule == 'required' ? __("This value is required", "formality") : fieldOptions[type]['rules'][rule]; + valid = false; + } + }) + } + field.classList.toggle(el("field", false, "--error"), !valid); + status.innerHTML = !error ? '' : ('
' + error + '
') + if(legend) { legend.classList.toggle("error", !valid) } + if(!valid) { + const section = document.querySelector(el("nav_section", "uid", "--active")) + if(section) { section.classList.remove(el("nav_section", false, "--validated")) } + } + return valid; }, - field_success() { - //field success event - window.Parsley.on('field:success', function() { - const id = $(this.$element).attr("id") - uid($(this.$element)) - $(el("nav_legend", "uid", ' li[data-name="' + id + '"]')).removeClass("error") + validateForm(form, step=null) { + let validate = this + let errors = false + const selector = step == null ? el("field") : el("field", true, '[data-step="'+step+'"]') + let fields = form.querySelectorAll(selector) + let firsterror = false + Array.prototype.forEach.call(fields, function(field, i){ + const error = !validate.validateField(field) + if(!errors && error) { + errors = true + firsterror = field.querySelector('input, select, textarea') + } }) - }, - i18n() { - window.Parsley.addMessages('en', { - defaultMessage: __("This value seems to be invalid", "formality"), - type: { - email: __("This value should be a valid email", "formality"), - url: __("This value should be a valid url", "formality"), - number: __("This value should be a valid number", "formality"), - integer: __("This value should be a valid integer", "formality"), - digits: __("This value should be digits", "formality"), - alphanum: __("This value should be alphanumeric", "formality"), - }, - required: __("This value is required", "formality"), - pattern: __("This value seems to be invalid", "formality"), - min: /* translators: validation */ __("This value should be greater than or equal to %s", "formality"), - max: /* translators: validation */ __("This value should be lower than or equal to %s", "formality"), - range: /* translators: validation */ __("This value should be between %s and %s", "formality"), - minlength: /* translators: validation */ __("This value is too short. It should have %s characters or more", "formality"), - maxlength: /* translators: validation */ __("This value is too long. It should have %s characters or fewer", "formality"), - length: /* translators: validation */ __("This value length is invalid. It should be between %s and %s characters long", "formality"), - check: /* translators: validation */ __("You must select between %s and %s choices", "formality"), - }); - window.Parsley.setLocale('en'); + if(firsterror) { firsterror.focus() } + return !errors } } diff --git a/assets/scripts/public/core/validate2.js b/assets/scripts/public/core/validate2.js deleted file mode 100644 index 97999e5..0000000 --- a/assets/scripts/public/core/validate2.js +++ /dev/null @@ -1,205 +0,0 @@ -import { el, uid } from './helpers' -import 'parsleyjs' -const { __ } = wp.i18n -let fieldOptions = { - text: { - multiple: false, - }, - message: { - multiple: false, - }, - email: { - multiple: false, - rules: { - email: __("This value should be a valid email", "formality"), - } - }, - number: { - multiple: false, - rules: { - number: __("This value should be a valid number", "formality"), - min: /* translators: validation */ __("This value should be greater than or equal to %s", "formality"), - max: /* translators: validation */ __("This value should be lower than or equal to %s", "formality"), - } - }, - select: { - multiple: false, - }, - multiple: { - multiple: true, - }, - rating: { - multiple: true, - }, - switch: { - multiple: false, - }, - upload: { - multiple: false, - }, -} - -export default { - init() { - //init validation - $(el("form")).each(function() { - uid($(this)) - $(el("section", "uid")).each(function(index, section) { - $(section).find(':input').attr('data-parsley-group', 'step-' + index) - }) - }) - this.field_error() - this.field_success() - this.form_error() - this.i18n() - $('body').prepend(''); - let validate = this; - $('#testvalidate').click(function(){ - let form = document.querySelector(el("form")) - validate.validateForm(form) - }) - }, - checkstep(index, newindex) { - //validate single step - let valid = false - let options = this.parsley_options() - if(index > newindex) { - valid = true - } else { - $(el("form", "uid")).parsley(options).whenValidate({ - group: 'step-' + index, - }).done(function() { - valid = true - $(el("nav_section", "uid")).eq(index).addClass(el("nav_section", false, "--validated")) - }) - } - return valid - }, - form() { - //validate standard form (1 step) - let options = this.parsley_options() - $(el("form", "uid")).parsley(options) - }, - parsley_options() { - //create parsley options array - let options = { - classHandler: function (element) { - return element.$element.closest(el("field")) - }, - errorClass: el("field_error", false), - errorsContainer: function(element) { - return element.$element.closest(el("input")).find(el("input", true, "__status")) - }, - successClass: el("field_success", false), - errorsWrapper: '', - } - return options - }, - form_error() { - window.Parsley.on('form:error', function() { - - }) - }, - field_error() { - //field error event - window.Parsley.on('field:error', function() { - const id = $(this.$element).attr("id") - uid($(this.$element)) - $(el("nav_legend", 'uid', ' li[data-name="' + id + '"]')).addClass("error") - const index = $(el("nav_section", "uid")).index(el("nav_section", "uid", "--active")) - $(el("nav_section", "uid")).eq(index).removeClass(el("nav_section", false, "--validated")) - }) - }, - field_success() { - //field success event - window.Parsley.on('field:success', function() { - const id = $(this.$element).attr("id") - uid($(this.$element)) - $(el("nav_legend", "uid", ' li[data-name="' + id + '"]')).removeClass("error") - }) - }, - i18n() { - window.Parsley.addMessages('en', { - defaultMessage: __("This value seems to be invalid", "formality"), - type: { - email: __("This value should be a valid email", "formality"), - url: __("This value should be a valid url", "formality"), - number: __("This value should be a valid number", "formality"), - integer: __("This value should be a valid integer", "formality"), - digits: __("This value should be digits", "formality"), - alphanum: __("This value should be alphanumeric", "formality"), - }, - required: __("This value is required", "formality"), - pattern: __("This value seems to be invalid", "formality"), - min: /* translators: validation */ __("This value should be greater than or equal to %s", "formality"), - max: /* translators: validation */ __("This value should be lower than or equal to %s", "formality"), - range: /* translators: validation */ __("This value should be between %s and %s", "formality"), - minlength: /* translators: validation */ __("This value is too short. It should have %s characters or more", "formality"), - maxlength: /* translators: validation */ __("This value is too long. It should have %s characters or fewer", "formality"), - length: /* translators: validation */ __("This value length is invalid. It should be between %s and %s characters long", "formality"), - check: /* translators: validation */ __("You must select between %s and %s choices", "formality"), - }); - window.Parsley.setLocale('en'); - }, - checkRule(input, rule) { - let valid = false; - switch(rule) { - case 'required': - if(NodeList.prototype.isPrototypeOf(input)){ - Array.prototype.forEach.call(input, function(single, i){ if(single.checked) { valid = true; } }) - } else { - valid = input.value !== '' - } - break; - case 'email': - valid = input.value.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/); - break; - case 'checked': - valid = input.checked; - break; - case 'notchecked': - valid = !input.checked; - break; - } - return valid; - }, - validateField(field) { - let validate = this; - const type = field.getAttribute('data-type') - const required = field.classList.contains(el("field", false, "--required")) - let rules = 'rules' in fieldOptions[type] ? Object.keys(fieldOptions[type]['rules']) : [] - const multiple = fieldOptions[type]['multiple'] - if(required) { rules.unshift('required') } - const input = multiple ? field.querySelectorAll('input, select, textarea') : field.querySelector('input, select, textarea') - const status = field.querySelector(el("input_status")) - let valid = true; - let error = ''; - if(!rules.includes('required') && !multiple && !input.value) { - //skip validation - } else { - Array.prototype.forEach.call(rules, function(rule){ - if(valid && !validate.checkRule(input, rule)) { - error = rule == 'required' ? __("This value is required", "formality") : fieldOptions[type]['rules'][rule]; - valid = false; - } - }) - } - field.classList.toggle(el("field", false, "--error"), !valid); - status.innerHTML = !error ? '' : ('
' + error + '
') - return valid; - }, - validateForm(form) { - let validate = this; - let errors = false; - let fields = document.querySelectorAll(el("field")) - let firsterror = false; - Array.prototype.forEach.call(fields, function(field, i){ - const error = !validate.validateField(field) - if(!errors && error) { - firsterror = field.querySelector('input, select, textarea') - } - }) - if(firsterror) { firsterror.focus() } - return !errors - } -} diff --git a/assets/styles/public/components/_fields.scss b/assets/styles/public/components/_fields.scss index 224927b..51261ec 100755 --- a/assets/styles/public/components/_fields.scss +++ b/assets/styles/public/components/_fields.scss @@ -64,18 +64,10 @@ opacity: 0; z-index: 2; margin: 0; - li { - display: none; - line-height: 1em; - color: var(--formality_col2); - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - width: 100%; - &:first-child { - display: block; - } - } + color: var(--formality_col2); + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; &:empty { display: none; } From f564f3907f1467e872267940c114cfe8383afa6e Mon Sep 17 00:00:00 2001 From: Michele Date: Sat, 2 Oct 2021 20:46:40 +0200 Subject: [PATCH 2/9] conditional validation --- assets/scripts/public/core/conditional.js | 8 ++++++-- assets/scripts/public/core/validate.js | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/assets/scripts/public/core/conditional.js b/assets/scripts/public/core/conditional.js index e03faaa..2d77022 100644 --- a/assets/scripts/public/core/conditional.js +++ b/assets/scripts/public/core/conditional.js @@ -85,7 +85,11 @@ export default { validation($field, disable=true) { //reset validation if required const $input = $field.find("[required]") - $field.attr("data-excluded", disable ? "true" : "false") - $(el("nav_list", true, ' li[data-name="' + $input.attr("id") + '"]')).toggleClass("disabled", disable) + if(disable) { + $field[0].setAttribute('data-excluded','') + } else { + $field[0].removeAttribute('data-excluded') + } + $(el("nav_list", true, ' li[data-name="' + $input.attr("name") + '"]')).toggleClass("disabled", disable) }, } diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index e974b0a..f58881c 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -84,6 +84,7 @@ export default { return valid; }, validateField(field) { + if(field.hasAttribute('data-excluded')) { return true } let validate = this; const type = field.getAttribute('data-type') const required = field.classList.contains(el("field", false, "--required")) From 3938a450c1426c5b0c8acaf25d711d516497dd8b Mon Sep 17 00:00:00 2001 From: Michele Giorgi Date: Sat, 9 Oct 2021 09:53:46 +0200 Subject: [PATCH 3/9] live validation --- assets/scripts/public/core/uiux.js | 6 +++++- assets/scripts/public/core/validate.js | 17 +++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/assets/scripts/public/core/uiux.js b/assets/scripts/public/core/uiux.js index 122c1cd..80e9f44 100644 --- a/assets/scripts/public/core/uiux.js +++ b/assets/scripts/public/core/uiux.js @@ -1,4 +1,5 @@ import { el, isMobile, focusFirst } from './helpers' +import validate from './validate' import hints from './hints' import hooks from './hooks' import dbg from './dbg' @@ -48,6 +49,7 @@ export default { $(el("field", true, " :input")).on("change", function() { const $field = $(this) const $parentEl = $field.closest(el("field")) + validate.validateField($parentEl[0]) const val = $field.is(":checkbox") ? $parentEl.find(":checked").length : $field.val() const name = $field.attr("name") $parentEl.toggleClass(el("field_filled", false), Boolean(val)) @@ -127,7 +129,9 @@ export default { if($(el("button", "uid", "--next")).is(":visible")) { $(el("button", "uid", "--next")).click() } else { - $(el("form", "uid")).submit() + let form = document.querySelector(el("form", "uid")) + let event = new Event('submit', { 'bubbles': true, 'cancelable': true }); + form.dispatchEvent(event); } } else { // diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index f58881c..f6585ab 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -41,14 +41,18 @@ let fieldOptions = { export default { init() { //init validation + let validate = this; const forms = document.querySelectorAll(el("form")) forms.forEach(function(form){ - const sections = form.querySelectorAll(el("section")) - sections.forEach(function(section, index){ - const fields = section.querySelectorAll(el("field")) - fields.forEach(function(field){ - field.setAttribute('data-step', index) - }) + validate.addSteps(form) + }) + }, + addSteps(form) { + const sections = form.querySelectorAll(el("section")) + sections.forEach(function(section, index){ + const fields = section.querySelectorAll(el("field")) + fields.forEach(function(field){ + field.setAttribute('data-step', index) }) }) }, @@ -88,6 +92,7 @@ export default { let validate = this; const type = field.getAttribute('data-type') const required = field.classList.contains(el("field", false, "--required")) + console.log(type) let rules = 'rules' in fieldOptions[type] ? Object.keys(fieldOptions[type]['rules']) : [] const multiple = fieldOptions[type]['multiple'] if(required) { rules.unshift('required') } From 0481b75aaf07b8be159c21102f6172d496e25524 Mon Sep 17 00:00:00 2001 From: Michele Date: Sat, 9 Oct 2021 11:37:49 +0200 Subject: [PATCH 4/9] number validation --- assets/scripts/public/core/uiux.js | 2 - assets/scripts/public/core/validate.js | 54 ++++++++++++++++++++------ 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/assets/scripts/public/core/uiux.js b/assets/scripts/public/core/uiux.js index 80e9f44..bab30fa 100644 --- a/assets/scripts/public/core/uiux.js +++ b/assets/scripts/public/core/uiux.js @@ -1,5 +1,4 @@ import { el, isMobile, focusFirst } from './helpers' -import validate from './validate' import hints from './hints' import hooks from './hooks' import dbg from './dbg' @@ -49,7 +48,6 @@ export default { $(el("field", true, " :input")).on("change", function() { const $field = $(this) const $parentEl = $field.closest(el("field")) - validate.validateField($parentEl[0]) const val = $field.is(":checkbox") ? $parentEl.find(":checked").length : $field.val() const name = $field.attr("name") $parentEl.toggleClass(el("field_filled", false), Boolean(val)) diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index f6585ab..e6b751e 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -44,10 +44,14 @@ export default { let validate = this; const forms = document.querySelectorAll(el("form")) forms.forEach(function(form){ - validate.addSteps(form) + validate.addStepIndexes(form) + const inputs = form.querySelectorAll('input, select, textarea') + inputs.forEach(function(input){ + validate.liveUpdate(input) + }) }) }, - addSteps(form) { + addStepIndexes(form) { const sections = form.querySelectorAll(el("section")) sections.forEach(function(section, index){ const fields = section.querySelectorAll(el("field")) @@ -56,6 +60,13 @@ export default { }) }) }, + liveUpdate(input) { + let validate = this; + input.addEventListener('input', function(){ + let field = input.closest(el("field")) + validate.validateField(field, true) + }) + }, validateStep(form, index, newindex) { if(index > newindex) { return true } const valid = this.validateForm(form, index) @@ -84,22 +95,45 @@ export default { case 'notchecked': valid = !input.checked; break; + case 'number': + valid = !isNaN(input.value) + console.log(valid, input.value) + break; + case 'min': + valid = input.value >= input.min + console.log(valid, input.value, input.min) + break; + case 'max': + valid = input.value <= input.max + console.log(valid, input.value, input.max) + break } return valid; }, - validateField(field) { + changeFieldStatus(field, name, valid=true, error='') { + const form = field.closest(el('form')) + const status = field.querySelector(el('input_status')) + const legend = form.querySelector(el('nav_legend', true, ' li[data-name="' + name + '"]')) + field.classList.toggle(el("field", false, "--error"), !valid); + status.innerHTML = !error ? '' : ('
' + error + '
') + if(legend) { legend.classList.toggle("error", !valid) } + if(!valid) { + const section = form.querySelector(el("nav_section", "uid", "--active")) + if(section) { section.classList.remove(el("nav_section", false, "--validated")) } + } + field.classList.add(el("field", false, "--validated")); + }, + validateField(field, soft=false) { if(field.hasAttribute('data-excluded')) { return true } let validate = this; const type = field.getAttribute('data-type') const required = field.classList.contains(el("field", false, "--required")) - console.log(type) + const validated = field.classList.contains(el("field", false, "--validated")) let rules = 'rules' in fieldOptions[type] ? Object.keys(fieldOptions[type]['rules']) : [] const multiple = fieldOptions[type]['multiple'] if(required) { rules.unshift('required') } const input = multiple ? field.querySelectorAll('input, select, textarea') : field.querySelector('input, select, textarea') const name = multiple ? input[0].name : input.name - const status = field.querySelector(el('input_status')) - const legend = document.querySelector(el('nav_legend', true, ' li[data-name="' + name + '"]')) let valid = true; let error = ''; if(!rules.includes('required') && !multiple && !input.value) { @@ -112,12 +146,8 @@ export default { } }) } - field.classList.toggle(el("field", false, "--error"), !valid); - status.innerHTML = !error ? '' : ('
' + error + '
') - if(legend) { legend.classList.toggle("error", !valid) } - if(!valid) { - const section = document.querySelector(el("nav_section", "uid", "--active")) - if(section) { section.classList.remove(el("nav_section", false, "--validated")) } + if(!soft || (soft && validated)) { + validate.changeFieldStatus(field, name, valid, error) } return valid; }, From 706818ce5bb9a91cffa7a1cc18db2936cc48aa48 Mon Sep 17 00:00:00 2001 From: Michele Date: Sun, 10 Oct 2021 12:35:17 +0200 Subject: [PATCH 5/9] number validation #2 --- assets/scripts/public/core/validate.js | 55 ++++++++++++++------------ assets/scripts/public/fields/upload.js | 3 -- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index e6b751e..62c186a 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -1,5 +1,5 @@ import { el, uid } from './helpers' -const { __ } = wp.i18n +const { __, sprintf } = wp.i18n let fieldOptions = { text: { multiple: false, @@ -77,38 +77,40 @@ export default { return valid }, checkRule(input, rule) { - let valid = false; + let result = { + valid: false, + placeholder: '', + } switch(rule) { case 'required': if(NodeList.prototype.isPrototypeOf(input)){ - Array.prototype.forEach.call(input, function(single, i){ if(single.checked) { valid = true; } }) + Array.prototype.forEach.call(input, function(single, i){ if(single.checked) { result.valid = true; } }) } else { - valid = input.value !== '' + result.valid = input.value !== '' } - break; + break case 'email': - valid = input.value.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/); - break; + result.valid = input.value.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/) + break case 'checked': - valid = input.checked; - break; + result.valid = input.checked + break case 'notchecked': - valid = !input.checked; - break; + result.valid = !input.checked + break case 'number': - valid = !isNaN(input.value) - console.log(valid, input.value) - break; + result.valid = !isNaN(input.value) + break case 'min': - valid = input.value >= input.min - console.log(valid, input.value, input.min) - break; + result.placeholder = input.min + result.valid = parseFloat(input.value) >= result.placeholder + break case 'max': - valid = input.value <= input.max - console.log(valid, input.value, input.max) + result.placeholder = input.max + result.valid = parseFloat(input.value) <= result.placeholder break } - return valid; + return result; }, changeFieldStatus(field, name, valid=true, error='') { const form = field.closest(el('form')) @@ -139,10 +141,13 @@ export default { if(!rules.includes('required') && !multiple && !input.value) { //skip validation } else { - Array.prototype.forEach.call(rules, function(rule){ - if(valid && !validate.checkRule(input, rule)) { - error = rule == 'required' ? __("This value is required", "formality") : fieldOptions[type]['rules'][rule]; - valid = false; + rules.forEach(function(rule){ + if(valid) { + const check = validate.checkRule(input, rule) + if(!check.valid) { + error = rule == 'required' ? __("This value is required", "formality") : sprintf(fieldOptions[type]['rules'][rule], check.placeholder); + valid = false; + } } }) } @@ -157,7 +162,7 @@ export default { const selector = step == null ? el("field") : el("field", true, '[data-step="'+step+'"]') let fields = form.querySelectorAll(selector) let firsterror = false - Array.prototype.forEach.call(fields, function(field, i){ + fields.forEach(function(field, i){ const error = !validate.validateField(field) if(!errors && error) { errors = true diff --git a/assets/scripts/public/fields/upload.js b/assets/scripts/public/fields/upload.js index 302fb2a..457e19a 100644 --- a/assets/scripts/public/fields/upload.js +++ b/assets/scripts/public/fields/upload.js @@ -45,9 +45,6 @@ export default { reader.readAsDataURL(file); } } else { - //errors.push('empty') - } - if(errors.length) { $input.val(''); $wrap.removeClass(el("field_filled", false)).addClass(el("field_error", false)); $wrap.find('.formality__input__status').html(`
  • ${errors[0]}
`) From ce9288333a1cff1876d34e442c1838f2bdd59127 Mon Sep 17 00:00:00 2001 From: Michele Date: Sun, 10 Oct 2021 20:24:10 +0200 Subject: [PATCH 6/9] validation fixes --- assets/scripts/public/core/validate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index 62c186a..e202131 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -84,7 +84,7 @@ export default { switch(rule) { case 'required': if(NodeList.prototype.isPrototypeOf(input)){ - Array.prototype.forEach.call(input, function(single, i){ if(single.checked) { result.valid = true; } }) + input.forEach(function(single, i){ if(single.checked) { result.valid = true; } }) } else { result.valid = input.value !== '' } From 691561e9033ec310a1479324ee4c7838d57db98f Mon Sep 17 00:00:00 2001 From: Michele Date: Sat, 16 Oct 2021 16:30:36 +0200 Subject: [PATCH 7/9] add client upload validation fix server conditional validation --- assets/scripts/public/core/validate.js | 30 ++++++++++++++--- assets/scripts/public/fields/upload.js | 46 +++++++++++--------------- public/class-formality-submit.php | 6 ++-- 3 files changed, 48 insertions(+), 34 deletions(-) diff --git a/assets/scripts/public/core/validate.js b/assets/scripts/public/core/validate.js index e202131..9ce9360 100644 --- a/assets/scripts/public/core/validate.js +++ b/assets/scripts/public/core/validate.js @@ -17,8 +17,8 @@ let fieldOptions = { multiple: false, rules: { number: __("This value should be a valid number", "formality"), - min: /* translators: validation */ __("This value should be greater than or equal to %s", "formality"), - max: /* translators: validation */ __("This value should be lower than or equal to %s", "formality"), + number_min: /* translators: validation */ __("This value should be greater than or equal to %s", "formality"), + number_max: /* translators: validation */ __("This value should be lower than or equal to %s", "formality"), } }, select: { @@ -35,6 +35,11 @@ let fieldOptions = { }, upload: { multiple: false, + rules: { + file: __("This is not a valid file", "formality"), + file_ext: /* translators: validation */ __('%s file extension is not allowed', 'formality'), + file_size: __('Your file exceeds the size limit', 'formality'), + } }, } @@ -101,14 +106,31 @@ export default { case 'number': result.valid = !isNaN(input.value) break - case 'min': + case 'number_min': result.placeholder = input.min result.valid = parseFloat(input.value) >= result.placeholder break - case 'max': + case 'number_max': result.placeholder = input.max result.valid = parseFloat(input.value) <= result.placeholder break + case 'file': + result.valid = input.files.length ? true : false + break + case 'file_ext': + result.file = input.files.length ? input.files[0] : false + if(result.file && result.file.type !== '') { + result.formats = input.getAttribute('accept').split(", ") + result.placeholder = ('.' + result.file.name.split('.').pop()).toLowerCase() + result.valid = result.formats.indexOf(result.placeholder) !== -1 + } + break + case 'file_size': + result.file = input.files.length ? input.files[0] : false + if(result.file && result.file.size > 0) { + result.valid = result.file.size <= parseInt(input.getAttribute('data-max-size')) + } + break } return result; }, diff --git a/assets/scripts/public/fields/upload.js b/assets/scripts/public/fields/upload.js index 457e19a..8dae142 100644 --- a/assets/scripts/public/fields/upload.js +++ b/assets/scripts/public/fields/upload.js @@ -1,5 +1,6 @@ import { el } from '../core/helpers' import submit from '../core/submit' +import validate from '../core/validate' const { __ } = wp.i18n export default { @@ -16,39 +17,30 @@ export default { $(el("field", true, "--upload :input")).change(function () { let errors = []; const $input = $(this) - const file = this.files.length ? this.files[0] : false; + const $wrap = $input.closest(el("field")) $wrap.removeClass(el("field", false, "--uploaded")); - if(file && file.type !== '' && file.size > 0) { - const name = file.name - const size = file.size - const formats = $input.attr('accept').split(", "); - const extension = '.' + name.split('.').pop(); - const max = parseInt($input.attr('data-max-size')); - - if(formats.indexOf(extension.toLowerCase()) == -1) { errors.push( __('File extension is not allowed', 'formality')) } - if(size > max) { errors.push( __('Your file exceeds the size limit', 'formality')) } - if(!errors.length) { - let $fileinfo = $wrap.find('.formality__upload__info') - $fileinfo.html(`${ __('Checking file', 'formality') }${ __('Please wait', 'formality') }`) - var reader = new FileReader() - const previewFormats = ["jpeg", "jpg", "png", "gif", "svg"] - const maxSize = parseInt($input.attr('data-max-size')) - reader.fileName = name - reader.fileSize = size - reader.fileFormat = name.split('.').pop().toLowerCase(); - reader.onload = function(e) { - $fileinfo.html(`${e.target.fileName}${formatBytes(e.target.fileSize)}`) - submit.token(upload, $input) - } - reader.readAsDataURL(file); + if(validate.validateField($wrap[0])) { + const file = this.files.length ? this.files[0] : false; + let $fileinfo = $wrap.find('.formality__upload__info') + $fileinfo.html(`${ __('Checking file', 'formality') }${ __('Please wait', 'formality') }`) + var reader = new FileReader() + const previewFormats = ["jpeg", "jpg", "png", "gif", "svg"] + const maxSize = parseInt($input.attr('data-max-size')) + reader.fileName = file.name + reader.fileSize = file.size + reader.fileFormat = file.name.split('.').pop().toLowerCase(); + reader.onload = function(e) { + $fileinfo.html(`${e.target.fileName}${formatBytes(e.target.fileSize)}`) + submit.token(upload, $input) } + reader.readAsDataURL(file); } else { $input.val(''); - $wrap.removeClass(el("field_filled", false)).addClass(el("field_error", false)); - $wrap.find('.formality__input__status').html(`
  • ${errors[0]}
`) + $wrap.removeClass(el("field_filled", false)); } + $(el("form")).removeClass(el("form", false, "--dragging")) $(el("field", true, "--dragging")).removeClass(el("field", false, "--dragging")) $input.focus() @@ -134,7 +126,7 @@ export default { } else { $input.val(''); $wrap.removeClass(el("field_filled", false)).addClass(el("field_error", false)); - $wrap.find('.formality__input__status').html(`
  • ${ data.error }
`) + $wrap.find('.formality__input__status').html(`
${ data.error }`) } }, } diff --git a/public/class-formality-submit.php b/public/class-formality-submit.php index cde9749..94a2020 100755 --- a/public/class-formality-submit.php +++ b/public/class-formality-submit.php @@ -114,7 +114,7 @@ public function send() { } else { //validation errors $response["status"] = 400; - $response["errors"] = $postdata['errors']; + $response["errors"] = $data['errors']; } } else { //bad token @@ -157,8 +157,8 @@ public function validate() { $type = str_replace("formality/","",$block['blockName']); $options = $block["attrs"]; $isField = isset($options['uid']) && (!isset($options['exclude'])); + $hasRules = isset($options['rules'][0]['field']); $isRequired = isset($options['required']) && $options['required']; - $hasRules = isset($options['rules']) && $options['rules']; $test++; if($isField) { $fieldname = "field_" . $options["uid"]; @@ -195,7 +195,7 @@ public function validate() { } $data['fields'][$fieldname]['value'] = $sanitized; $data['fields'][$fieldname]['type'] = $type; - } else if($isRequired) { + } else if($isRequired && !$hasRules) { $data['errors'][] = "required field " . $fieldname; } } From b6305860fbba64506cb8cbd2739bf50238200739 Mon Sep 17 00:00:00 2001 From: Michele Giorgi Date: Sat, 27 Nov 2021 10:34:07 +0100 Subject: [PATCH 8/9] release 1.4.2 --- assets/styles/admin/sidebar.scss | 5 +++++ formality.php | 5 ++--- includes/class-formality.php | 2 +- package.json | 2 +- webpack.mix.js | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/assets/styles/admin/sidebar.scss b/assets/styles/admin/sidebar.scss index c4d59ef..dc03728 100644 --- a/assets/styles/admin/sidebar.scss +++ b/assets/styles/admin/sidebar.scss @@ -83,6 +83,11 @@ } .components-circular-option-picker__option-wrapper { display: block; + width: 30px; + height: 30px; + border-radius: 50%; + margin-bottom: 4px; + margin-right: 8px; } &:only-child { width: 100%; diff --git a/formality.php b/formality.php index 2676999..58d4c96 100755 --- a/formality.php +++ b/formality.php @@ -12,7 +12,7 @@ * Plugin Name: Formality * Plugin URI: https://formality.dev * Description: Forms made simple (and cute). Designless, multistep, conversational, secure, all-in-one WordPress forms plugin. - * Version: 1.4.1 + * Version: 1.4.2 * Author: Michele Giorgi * Author URI: https://giorgi.io * License: GPLv3 @@ -35,7 +35,6 @@ * * This program incorporates work covered by the following copyright: * - * Parsley.js - MIT | Copyright (c) 2013-2020 Guillaume Potier, Marc-André Lafortune and contributors | https://github.com/guillaumepotier/Parsley.js * React Sortable HOC - MIT | Copyright (c) 2016, Claudéric Demers | https://github.com/clauderic/react-sortable-hoc * clone-deep - MIT | Copyright © 2018, Jon Schlinkert | https://github.com/jonschlinkert/clone-deep * Hanken Grotesk - SIL | Copyright 2020 The Hanken Grotesk Project Authors, with Font Name "Hanken Grotesk". | https://github.com/marcologous/hanken-grotesk @@ -50,7 +49,7 @@ /** * Currently plugin version. */ -define( 'FORMALITY_VERSION', '1.4.1' ); +define( 'FORMALITY_VERSION', '1.4.2' ); define( 'FORMALITY_PATH', plugin_dir_path( __FILE__ )); /** diff --git a/includes/class-formality.php b/includes/class-formality.php index 9f67e52..4a0f6fc 100755 --- a/includes/class-formality.php +++ b/includes/class-formality.php @@ -57,7 +57,7 @@ class Formality { */ public function __construct() { - $this->version = defined( 'FORMALITY_VERSION' ) ? FORMALITY_VERSION : '1.4.1'; + $this->version = defined( 'FORMALITY_VERSION' ) ? FORMALITY_VERSION : '1.4.2'; $this->formality = 'formality'; $this->fse = class_exists('WP_Block_Editor_Context'); diff --git a/package.json b/package.json index dff62d2..abb7a1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Formality", - "version": "1.4.1", + "version": "1.4.2", "author": "Michele Giorgi ", "homepage": "https://giorgi.io", "private": true, diff --git a/webpack.mix.js b/webpack.mix.js index 3bc423e..51e6820 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -16,7 +16,7 @@ mix .js('assets/scripts/public.js', 'scripts/formality-public.js') .js('assets/scripts/editor.js', 'scripts/formality-editor.js') .js('assets/scripts/admin.js', 'scripts/formality-admin.js') - .banner({ banner: 'Formality v1.4.1' }); + .banner({ banner: 'Formality v1.4.2' }); mix .copyWatched('assets/images/admin/**', 'dist/images/admin') From 245589512eff7f18235f22a9df1c056609f3bdd0 Mon Sep 17 00:00:00 2001 From: Michele Giorgi Date: Sat, 27 Nov 2021 15:56:24 +0100 Subject: [PATCH 9/9] update language files add 1.4.2 release info --- ...t_IT-3c4b2d232f97e5d4401ae142f2499760.json | 2 +- ...t_IT-49bf50bb4358b4d339cf99cb13a07d80.json | 2 +- ...t_IT-e3bf5dcd89db453858f995b164624024.json | 2 +- languages/formality-it_IT.mo | Bin 27270 -> 26246 bytes languages/formality-it_IT.po | 101 ++++++------------ languages/formality.pot | 95 +++++----------- readme.txt | 9 +- 7 files changed, 68 insertions(+), 143 deletions(-) diff --git a/languages/formality-it_IT-3c4b2d232f97e5d4401ae142f2499760.json b/languages/formality-it_IT-3c4b2d232f97e5d4401ae142f2499760.json index 00e85bb..71a260f 100644 --- a/languages/formality-it_IT-3c4b2d232f97e5d4401ae142f2499760.json +++ b/languages/formality-it_IT-3c4b2d232f97e5d4401ae142f2499760.json @@ -1 +1 @@ -{"translation-revision-date":"2021-09-27 06:56+0000","generator":"Loco https:\/\/localise.biz\/","source":"dist\/scripts\/formality-editor.js","domain":"formality","locale_data":{"formality":{"":{"domain":"formality","lang":"it_IT","plural-forms":"nplurals=2; plural=n != 1;"},"- Field -":["- Campo -"],"Add a button link to your form. Your form will be opened in an onscreen sidebar.":["Aggiungi un link al tuo form. Il form verr\u00e0 aperto in una sidebar laterale."],"Add an information message":["Aggiungi un messaggio informativo"],"Add option":["Aggiungi opzione"],"Add rule":["Aggiungi regola"],"Advanced":["Avanzate"],"Align this value to your theme's fontsize":["Allinea questo valore alla dimensione font del tuo tema"],"Allow only single selection":["Permetti la selezione di una sola opzione"],"Allowed types":["Tipi file validi"],"Appearance":["Aspetto"],"Ask your users for a rating. Score from one to ten.":["Chiedi un voto ai tuoi utenti. Valori da 1 a 10."],"Assign different values and labels for each option":["Assegna valori e etichette differenti per ogni opzione"],"Background image":["Immagine di sfondo"],"Background layout":["Layout sfondo"],"Background overlay":["Livello coprente sfondo"],"Backgrounds, Input suggestions, etc.":["Sfondi, Suggerimenti campi, ecc..."],"Based on font-size setting:":["Basato sulla dimensione font selezionata"],"Boxed":["Boxed"],"Boxed border input field":["Campi input con bordo continuo"],"But you can also embed it, into your post or pages with Formality block or with this specific shortcode:":["Ma puoi comunque incorporarlo nei tuoi contenuti con il blocco Formality o con questo shortcode specifico;"],"Button":["Pulsante"],"Button label":["Etichetta pulsante"],"Buttons":["Pulsanti"],"Call to action":["Call to action"],"Change background image\/color on input focus":["Cambia l'immagine\/colore di sfondo quando il campo viene selezionato"],"Checkbox":["Checkbox"],"Checkbox grid with all available options that users can select.":["Griglia con tutte le opzioni che l'utente pu\u00f2 selezionare."],"Checkbox input, good for true\/false answer or acceptance field.":["Checkbox, ottimo per risposte vero\/falso o campi di accettazione."],"Choose file or drag here":["Seleziona o trascina il file qui"],"Click to confirm":["Clicca per confermare"],"Conditional logic":["Condizioni logiche"],"Conversational":["Conversational"],"Create the first one.":["Crea il primo."],"Credits\/copy text":["Testo copy\/crediti"],"Currently you can't use this block, because you have no published Formality form.":["Al momento non puoi utilizzare questo blocco, perch\u00e8 non hai form Formality pubblicati."],"Custom message\/information for your users.":["Messaggio informativo per i tuoi utenti."],"Description":["Descrizione"],"Disable button":["Disabilita pulsante"],"Disable SSL verification for unsplash.com domain until the download process finishes.":["Disabilita la verifica SSL per il dominio unsplash.com fino al termine del download."],"Display inline options.":["Mostra opzioni in linea."],"Distribute options in %s columns.":["Distribuisci opzioni su %s colonne."],"Download templates photos":["Scarica le foto dei templates"],"Dropdown list with all available options that users can select.":["Men\u00f9 a tendina con tutte le opzioni che l'utente pu\u00f2 selezionare."],"Dynamic background":["Sfondi dinamici"],"E-mail":["E-mail"],"E-mail address":["Indirizzo email"],"Edit or update background image":["Aggiorna l'immagine di sfondo"],"Edit or update logo":["Modifica o aggiorna logo"],"Edit or update media file":["Modifica o aggiorna file media"],"Edit or update the image":["Modifica o aggiorna l'immagine"],"Edit this form":["Modifica questo form"],"Embed":["Embed"],"Embed & Share":["Incorpora & Condividi"],"Embed Formality forms in your posts or pages.":["Includi un form Formality nei tuoi post o pagine."],"Embedded version":["Versione embedded"],"Enable Formality credits":["Attiva i crediti di Formality"],"Enable\/disable file formats":["Abilita\/disabilita formati file"],"Enter your text here!":["Inserisci testo qui!"],"Error":["Errore"],"Error color":["Colore errori"],"Error message":["Messaggio di errore"],"Field":["Campo"],"Field ID\/Name":["ID\/nome campo"],"Field name":["Nome campo"],"Field options":["Opzioni campo"],"Font size":["Dimensione font"],"Form":["Form"],"Form footer":["Form footer"],"Form type":["Tipo form"],"Formality automatically saves all the results in the WordPress database, but if you want you can also activate e-mail notifications, by entering your address.":["Formality salva automaticamente tutti i risultati sul database di WordPress, ma se vuoi puoi attivare anche le notifiche, inserendo il tuo indirizzo email."],"Formality form":["Form Formality"],"Full screen background":["Sfondo a schermo pieno"],"Full width":["Piena (100%)"],"Group your fields into multiple sections, with custom heading.":["Raggruppa i tuoi campi in sezioni con una intestazione custom."],"Half width":["Met\u00e0 (50%)"],"Hearts":["Cuori"],"Hero image, how-to video or any type of visual content for your users.":["Immagine hero, video how-to o qualsiasi altro media per i tuoi utenti."],"Hide form title":["Nascondi titolo form"],"Icons":["Icone"],"Include this form in your post content.":["Inserisci questo form nel post."],"Initial value":["Valore iniziale"],"Input style":["Stile campi"],"Interval":["Intervallo"],"Invert form colors for this button":["Inverti i colori del form per questo pulsante"],"It seems your template library is incomplete. To fix this issue, you can retry the download process.":["Sembra che la tua libreria template sia incompleta. Per sistemare questo problema puoi provare a ripetere il download."],"Label":["Etichetta"],"Label \/ Question":["Etichetta \/ domanda"],"Label and border color of the wrong inputs.":["Colore di etichette e bordi dei campi sbagliati."],"Let your users upload files to your form":["Permetti ai tuoi utenti di caricare file"],"License":["Licenza"],"Line":["Line"],"Loading your form...":["Caricamento form..."],"Loading your forms...":["Caricamento form..."],"Logo":["Logo"],"Logo height multiplier":["Moltiplicatore altezza logo"],"Made with Formality":["Made with Formality"],"Manually set \"%s\" as url link (href) in your text content":["Imposta \"%s\" come indirizzo (href) dei tuoi link"],"Manually set this hashtag as url link (href) in your text content":["Imposta manualmente questo hashtag come indirizzo (href) dei tuoi link"],"Max length":["Lunghezza massima"],"Max upload file size":["Peso file massimo"],"Max value":["Valore massimo"],"Media":["Media"],"Media file":["File media"],"Media options":["Opzioni media"],"Message":["Messaggio"],"Min value":["Valore minimo"],"Multi-line area, good for texts or long answers.":["Area di testo multi-linea, ottima per lunghe risposte."],"Multiple choice":["Scelta multipla"],"None":["Nessuno"],"Notifications":["Notifiche"],"Number":["Numero"],"Number field, accept integer or float number value":["Campo numerico, accetta solo numeri interi"],"Options":["Opzioni"],"Options grid":["Griglia opzioni"],"Photo by %s on Unsplash":["Foto di %s su Unsplash"],"Place this block before the first field you want to group. This step section will be closed automatically before the next step block (or at the end of the form).":["Posiziona questo blocco prima del primo campo da raggruppare. Questa sezione verr\u00e0 chiusa automaticamente prima del prossimo campo step (o alla fine del form)."],"Placeholder":["Testo segnaposto"],"Please select a form to embed, from the right sidebar":["Seleziona un form da includere, dalla sidebar laterale"],"Please select an image or video, from the right sidebar.":["Seleziona una immagine o un video dalla sidebar laterale."],"Primary color":["Colore primario"],"Radio\/checkbox (default)":["Radio\/checkbox (default)"],"Rating":["Voto"],"Remove background":["Rimuovi sfondo"],"Remove background image":["Rimuovi immagine di sfondo"],"Remove button and open this form with a simple text link":["Rimuovi pulsante e apri questo form con un semplice link testuale"],"Remove color":["Rimuovi colore"],"Remove custom logo":["Rimuovi logo custom"],"Remove image":["Rimuovi immagine"],"Remove media":["Rimuovi media"],"Rhombus":["Rombi"],"Rows":["Righe"],"Secondary color":["Colore secondario"],"Select":["Men\u00f9 a tendina"],"Select a form to embed":["Seleziona un form da includere"],"Select an image or video":["Seleziona una immagine o un video"],"Select one of our templates made with a selection of the best Unsplash photos.":["Seleziona uno dei nostri templates, realizzati con una selezione delle migliori foto Unsplash."],"Select or upload background image":["Seleziona o carica l'immagine di sfondo"],"Select or upload media":["Seleziona o carica media"],"Select your choice":["Seleziona la tua scelta"],"Send":["Invia"],"Send button label":["Etichetta pulsante invio"],"Set a background image":["Seleziona immagine di sfondo"],"Set background overlay opacity (%)":["Imposta opacit\u00e0 del livello coprente (%)"],"Settings":["Impostazioni"],"Show this field only if:":["Mostra questo campo solo se:"],"Side background":["Sfondo su un lato"],"Single line border input field":["Campi input con linea"],"Size limit":["Limite peso file"],"Something went wrong and we couldn't save your data. Please retry later or contact us by e-mail or phone.":["Qualcosa \u00e8 andato storto e i tuoi dati non sono stati salvati. Riprova pi\u00f9 tardi o contattaci via e-mail o telefono."],"Something went wrong during the download process. You can retry or check your server logs for more informations about the error.":["Qualcosa \u00e8 andato storto durante il processo di download. Puoi riprovare il download o controllare l'errore nel log del tuo server."],"SSL verification failed during the download process. These errors most commonly happen on localhost development environments, and\/or on servers that do not fully support SSL. If possible, ask your web host to fix this issue ASAP. In the meantime, if you want to complete the download process now, you can temporary disable SSL verification.":["Durante il processo di download la verifica SSL \u00e8 fallita. Questi errori sono comuni su ambienti di sviluppo locali, e\/o su server che non supportano completamente SSL. Se possibile, chiedi al tuo web host di sistemare il problema al pi\u00f9 presto. Nel frattempo, se vuoi completare il download ora, puoi temporaneamente disabilitare la verifica SSL."],"Standalone version":["Versione standalone"],"Standard":["Standard"],"Standard text field, good for short answers and 1 line information.":["Campo standard, ottimo per risposte rapide di una riga di testo."],"Stars":["Stelle"],"Step":["Step"],"Step name":["Nome step"],"Step title":["Titolo step"],"Submit status":["Esito invio"],"Support us (and the photographer of the chosen template) with a single text line at the end of this form.":["Supporta Formality (e il fotografo del template selezionato) con una singola linea di testo alla fine del tuo form."],"Switch":["Interruttore"],"Switch (default)":["Interruttore (default)"],"Templates":["Templates"],"Terms and conditions":["Termini e condizioni"],"Text":["Testo"],"Text field that accepts only valid email address.":["Campo di testo che accetta solo indirizzi email validi."],"Textarea":["Area di testo"],"Texts, Labels, Borders, etc.":["Testi, Etichette, Bordi, ecc..."],"Thank you":["Grazie"],"Thank you message":["Messaggio di ringraziamento"],"This is a required field":["Questo \u00e8 un campo obbligatorio"],"This is an independent form, that are not tied to your posts or pages, and you can visit at this web address:":["Ogni form \u00e8 indipendente dalle tue pagine o post, e pu\u00f2 essere raggiunto al seguente indirizzo:"],"To start using them, you first have to download these photos from Unsplash servers.":["Per iniziare ad utilizzarli, devi prima scaricare queste immagini dai server di Unsplash."],"Type your answer here":["Scrivi la tua risposta qui"],"Upload":["Upload"],"Upload logo image":["Carica immagine logo"],"Value":["Valore"],"We have prepared %s templates made with a selection of the best Unsplash photos.":["Abbiamo preparato %s templates, realizzati con una selezione delle migliori foto Unsplash."],"Width":["Larghezza"],"You can also set an initial variable value by using field ID as a query var.":["Puoi applicare un valore iniziale utilizzando l'ID campo come query var. "],"Your data has been successfully submitted. You are very important to us, all information received will always remain confidential. We will contact you as soon as possible.":["I tuoi dati sono stati salvati con successo. Sei molto importante per noi, tutte le informazioni ricevute rimarranno confidenziali, e verrai ricontattato al pi\u00f9 presto. "]}}} \ No newline at end of file +{"translation-revision-date":"2021-11-27 14:40+0000","generator":"Loco https:\/\/localise.biz\/","source":"dist\/scripts\/formality-editor.js","domain":"formality","locale_data":{"formality":{"":{"domain":"formality","lang":"it_IT","plural-forms":"nplurals=2; plural=n != 1;"},"- Field -":["- Campo -"],"Add a button link to your form. Your form will be opened in an onscreen sidebar.":["Aggiungi un link al tuo form. Il form verr\u00e0 aperto in una sidebar laterale."],"Add an information message":["Aggiungi un messaggio informativo"],"Add option":["Aggiungi opzione"],"Add rule":["Aggiungi regola"],"Advanced":["Avanzate"],"Align this value to your theme's fontsize":["Allinea questo valore alla dimensione font del tuo tema"],"Allow only single selection":["Permetti la selezione di una sola opzione"],"Allowed types":["Tipi file validi"],"Appearance":["Aspetto"],"Ask your users for a rating. Score from one to ten.":["Chiedi un voto ai tuoi utenti. Valori da 1 a 10."],"Assign different values and labels for each option":["Assegna valori e etichette differenti per ogni opzione"],"Background image":["Immagine di sfondo"],"Background layout":["Layout sfondo"],"Background overlay":["Livello coprente sfondo"],"Backgrounds, Input suggestions, etc.":["Sfondi, Suggerimenti campi, ecc..."],"Based on font-size setting:":["Basato sulla dimensione font selezionata"],"Boxed":["Boxed"],"Boxed border input field":["Campi input con bordo continuo"],"But you can also embed it, into your post or pages with Formality block or with this specific shortcode:":["Ma puoi comunque incorporarlo nei tuoi contenuti con il blocco Formality o con questo shortcode specifico;"],"Button":["Pulsante"],"Button label":["Etichetta pulsante"],"Buttons":["Pulsanti"],"Call to action":["Call to action"],"Change background image\/color on input focus":["Cambia l'immagine\/colore di sfondo quando il campo viene selezionato"],"Checkbox":["Checkbox"],"Checkbox grid with all available options that users can select.":["Griglia con tutte le opzioni che l'utente pu\u00f2 selezionare."],"Checkbox input, good for true\/false answer or acceptance field.":["Checkbox, ottimo per risposte vero\/falso o campi di accettazione."],"Choose file or drag here":["Seleziona o trascina il file qui"],"Click to confirm":["Clicca per confermare"],"Conditional logic":["Condizioni logiche"],"Conversational":["Conversational"],"Create the first one.":["Crea il primo."],"Credits\/copy text":["Testo copy\/crediti"],"Currently you can't use this block, because you have no published Formality form.":["Al momento non puoi utilizzare questo blocco, perch\u00e8 non hai form Formality pubblicati."],"Custom message\/information for your users.":["Messaggio informativo per i tuoi utenti."],"Description":["Descrizione"],"Disable button":["Disabilita pulsante"],"Disable SSL verification for unsplash.com domain until the download process finishes.":["Disabilita la verifica SSL per il dominio unsplash.com fino al termine del download."],"Display inline options.":["Mostra opzioni in linea."],"Distribute options in %s columns.":["Distribuisci opzioni su %s colonne."],"Download templates photos":["Scarica le foto dei templates"],"Dropdown list with all available options that users can select.":["Men\u00f9 a tendina con tutte le opzioni che l'utente pu\u00f2 selezionare."],"Dynamic background":["Sfondi dinamici"],"E-mail":["E-mail"],"E-mail address":["Indirizzo email"],"Edit or update background image":["Aggiorna l'immagine di sfondo"],"Edit or update logo":["Modifica o aggiorna logo"],"Edit or update media file":["Modifica o aggiorna file media"],"Edit or update the image":["Modifica o aggiorna l'immagine"],"Edit this form":["Modifica questo form"],"Embed":["Embed"],"Embed & Share":["Incorpora & Condividi"],"Embed Formality forms in your posts or pages.":["Includi un form Formality nei tuoi post o pagine."],"Embedded version":["Versione embedded"],"Enable Formality credits":["Attiva i crediti di Formality"],"Enable\/disable file formats":["Abilita\/disabilita formati file"],"Enter your text here!":["Inserisci testo qui!"],"Error":["Errore"],"Error color":["Colore errori"],"Error message":["Messaggio di errore"],"Field":["Campo"],"Field ID\/Name":["ID\/nome campo"],"Field name":["Nome campo"],"Field options":["Opzioni campo"],"Font size":["Dimensione font"],"Form":["Form"],"Form footer":["Form footer"],"Form type":["Tipo form"],"Formality automatically saves all the results in the WordPress database, but if you want you can also activate e-mail notifications, by entering your address.":["Formality salva automaticamente tutti i risultati sul database di WordPress, ma se vuoi puoi attivare anche le notifiche, inserendo il tuo indirizzo email."],"Formality form":["Form Formality"],"Full screen background":["Sfondo a schermo pieno"],"Full width":["Piena (100%)"],"Group your fields into multiple sections, with custom heading.":["Raggruppa i tuoi campi in sezioni con una intestazione custom."],"Half width":["Met\u00e0 (50%)"],"Hearts":["Cuori"],"Hero image, how-to video or any type of visual content for your users.":["Immagine hero, video how-to o qualsiasi altro media per i tuoi utenti."],"Hide form title":["Nascondi titolo form"],"Icons":["Icone"],"Include this form in your post content.":["Inserisci questo form nel post."],"Initial value":["Valore iniziale"],"Input style":["Stile campi"],"Interval":["Intervallo"],"Invert form colors for this button":["Inverti i colori del form per questo pulsante"],"It seems your template library is incomplete. To fix this issue, you can retry the download process.":["Sembra che la tua libreria template sia incompleta. Per sistemare questo problema puoi provare a ripetere il download."],"Label":["Etichetta"],"Label \/ Question":["Etichetta \/ domanda"],"Label and border color of the wrong inputs.":["Colore di etichette e bordi dei campi sbagliati."],"Let your users upload files to your form":["Permetti ai tuoi utenti di caricare file"],"License":["Licenza"],"Line":["Line"],"Loading your form...":["Caricamento form..."],"Loading your forms...":["Caricamento form..."],"Logo":["Logo"],"Logo height multiplier":["Moltiplicatore altezza logo"],"Made with Formality":["Made with Formality"],"Manually set \"%s\" as url link (href) in your text content":["Imposta \"%s\" come indirizzo (href) dei tuoi link"],"Manually set this hashtag as url link (href) in your text content":["Imposta manualmente questo hashtag come indirizzo (href) dei tuoi link"],"Max length":["Lunghezza massima"],"Max upload file size":["Peso file massimo"],"Max value":["Valore massimo"],"Media":["Media"],"Media file":["File media"],"Media options":["Opzioni media"],"Message":["Messaggio"],"Min value":["Valore minimo"],"Multi-line area, good for texts or long answers.":["Area di testo multi-linea, ottima per lunghe risposte."],"Multiple choice":["Scelta multipla"],"None":["Nessuno"],"Notifications":["Notifiche"],"Number":["Numero"],"Number field, accept integer or float number value":["Campo numerico, accetta solo numeri interi"],"Options":["Opzioni"],"Options grid":["Griglia opzioni"],"Photo by %s on Unsplash":["Foto di %s su Unsplash"],"Place this block before the first field you want to group. This step section will be closed automatically before the next step block (or at the end of the form).":["Posiziona questo blocco prima del primo campo da raggruppare. Questa sezione verr\u00e0 chiusa automaticamente prima del prossimo campo step (o alla fine del form)."],"Placeholder":["Testo segnaposto"],"Please select a form to embed, from the right sidebar":["Seleziona un form da includere, dalla sidebar laterale"],"Please select an image or video, from the right sidebar.":["Seleziona una immagine o un video dalla sidebar laterale."],"Primary color":["Colore primario"],"Radio\/checkbox (default)":["Radio\/checkbox (default)"],"Rating":["Voto"],"Remove background":["Rimuovi sfondo"],"Remove background image":["Rimuovi immagine di sfondo"],"Remove button and open this form with a simple text link":["Rimuovi pulsante e apri questo form con un semplice link testuale"],"Remove color":["Rimuovi colore"],"Remove custom logo":["Rimuovi logo custom"],"Remove image":["Rimuovi immagine"],"Remove media":["Rimuovi media"],"Rhombus":["Rombi"],"Rows":["Righe"],"Secondary color":["Colore secondario"],"Select":["Men\u00f9 a tendina"],"Select a form to embed":["Seleziona un form da includere"],"Select an image or video":["Seleziona una immagine o un video"],"Select one of our templates made with a selection of the best Unsplash photos.":["Seleziona uno dei nostri templates, realizzati con una selezione delle migliori foto Unsplash."],"Select or upload background image":["Seleziona o carica l'immagine di sfondo"],"Select or upload media":["Seleziona o carica media"],"Select your choice":["Seleziona la tua scelta"],"Send":["Invia"],"Send button label":["Etichetta pulsante invio"],"Set a background image":["Seleziona immagine di sfondo"],"Set background overlay opacity (%)":["Imposta opacit\u00e0 del livello coprente (%)"],"Settings":["Impostazioni"],"Show this field only if:":["Mostra questo campo solo se:"],"Side background":["Sfondo su un lato"],"Single line border input field":["Campi input con linea"],"Size limit":["Limite peso file"],"Something went wrong and we couldn't save your data. Please retry later or contact us by e-mail or phone.":["Qualcosa \u00e8 andato storto e i tuoi dati non sono stati salvati. Riprova pi\u00f9 tardi o contattaci via e-mail o telefono."],"Something went wrong during the download process. You can retry or check your server logs for more informations about the error.":["Qualcosa \u00e8 andato storto durante il processo di download. Puoi riprovare il download o controllare l'errore nel log del tuo server."],"SSL verification failed during the download process. These errors most commonly happen on localhost development environments, and\/or on servers that do not fully support SSL. If possible, ask your web host to fix this issue ASAP. In the meantime, if you want to complete the download process now, you can temporary disable SSL verification.":["Durante il processo di download la verifica SSL \u00e8 fallita. Questi errori sono comuni su ambienti di sviluppo locali, e\/o su server che non supportano completamente SSL. Se possibile, chiedi al tuo web host di sistemare il problema al pi\u00f9 presto. Nel frattempo, se vuoi completare il download ora, puoi temporaneamente disabilitare la verifica SSL."],"Standalone version":["Versione standalone"],"Standard":["Standard"],"Standard text field, good for short answers and 1 line information.":["Campo standard, ottimo per risposte rapide di una riga di testo."],"Stars":["Stelle"],"Step":["Step"],"Step name":["Nome step"],"Step title":["Titolo step"],"Submit status":["Esito invio"],"Support us (and the photographer of the chosen template) with a single text line at the end of this form.":["Supporta Formality (e il fotografo del template selezionato) con una singola linea di testo alla fine del tuo form."],"Switch":["Interruttore"],"Switch (default)":["Interruttore (default)"],"Templates":["Templates"],"Terms and conditions":["Termini e condizioni"],"Text":["Testo"],"Text field that accepts only valid email address.":["Campo di testo che accetta solo indirizzi email validi."],"Textarea":["Area di testo"],"Texts, Labels, Borders, etc.":["Testi, Etichette, Bordi, ecc..."],"Thank you":["Grazie"],"Thank you message":["Messaggio di ringraziamento"],"This is a required field":["Questo \u00e8 un campo obbligatorio"],"This is an independent form, that are not tied to your posts or pages, and you can visit at this web address:":["Ogni form \u00e8 indipendente dalle tue pagine o post, e pu\u00f2 essere raggiunto al seguente indirizzo:"],"To start using them, you first have to download these photos from Unsplash servers.":["Per iniziare ad utilizzarli, devi prima scaricare queste immagini dai server di Unsplash."],"Type your answer here":["Scrivi la tua risposta qui"],"Upload":["Upload"],"Upload logo image":["Carica immagine logo"],"Value":["Valore"],"We have prepared %s templates made with a selection of the best Unsplash photos.":["Abbiamo preparato %s templates, realizzati con una selezione delle migliori foto Unsplash."],"Width":["Larghezza"],"You can also set an initial variable value by using field ID as a query var.":["Puoi applicare un valore iniziale utilizzando l'ID campo come query var. "],"Your data has been successfully submitted. You are very important to us, all information received will always remain confidential. We will contact you as soon as possible.":["I tuoi dati sono stati salvati con successo. Sei molto importante per noi, tutte le informazioni ricevute rimarranno confidenziali, e verrai ricontattato al pi\u00f9 presto. "]}}} \ No newline at end of file diff --git a/languages/formality-it_IT-49bf50bb4358b4d339cf99cb13a07d80.json b/languages/formality-it_IT-49bf50bb4358b4d339cf99cb13a07d80.json index b2cdfa1..729e591 100644 --- a/languages/formality-it_IT-49bf50bb4358b4d339cf99cb13a07d80.json +++ b/languages/formality-it_IT-49bf50bb4358b4d339cf99cb13a07d80.json @@ -1 +1 @@ -{"translation-revision-date":"2021-09-27 06:56+0000","generator":"Loco https:\/\/localise.biz\/","source":"dist\/scripts\/formality-admin.js","domain":"formality","locale_data":{"formality":{"":{"domain":"formality","lang":"it_IT","plural-forms":"nplurals=2; plural=n != 1;"},"Download now":["Scarica ora"],"Please insert a valid email address":["Inserisci un indirizzo email valido"],"Something went wrong":["Qualcosa \u00e8 andato storto"],"Something went wrong. Please retry later.":["Qualcosa \u00e8 andato storto. Riprova pi\u00f9 tardi."],"To continue you have to accept our privacy policy":["Per continuare devi accettare la nostra privacy policy"]}}} \ No newline at end of file +{"translation-revision-date":"2021-11-27 14:40+0000","generator":"Loco https:\/\/localise.biz\/","source":"dist\/scripts\/formality-admin.js","domain":"formality","locale_data":{"formality":{"":{"domain":"formality","lang":"it_IT","plural-forms":"nplurals=2; plural=n != 1;"},"Download now":["Scarica ora"],"Please insert a valid email address":["Inserisci un indirizzo email valido"],"Something went wrong":["Qualcosa \u00e8 andato storto"],"Something went wrong. Please retry later.":["Qualcosa \u00e8 andato storto. Riprova pi\u00f9 tardi."],"To continue you have to accept our privacy policy":["Per continuare devi accettare la nostra privacy policy"]}}} \ No newline at end of file diff --git a/languages/formality-it_IT-e3bf5dcd89db453858f995b164624024.json b/languages/formality-it_IT-e3bf5dcd89db453858f995b164624024.json index 8efb4bd..bcd35dd 100644 --- a/languages/formality-it_IT-e3bf5dcd89db453858f995b164624024.json +++ b/languages/formality-it_IT-e3bf5dcd89db453858f995b164624024.json @@ -1 +1 @@ -{"translation-revision-date":"2021-09-27 06:56+0000","generator":"Loco https:\/\/localise.biz\/","source":"dist\/scripts\/formality-public.js","domain":"formality","locale_data":{"formality":{"":{"domain":"formality","lang":"it_IT","plural-forms":"nplurals=2; plural=n != 1;"},"Checking file":["Controllo file"],"File extension is not allowed":["L'estensione del file non \u00e8 permessa"],"Please wait":["Attendi qualche secondo "],"Press backspace to reset this field and return to previous field":["Premi backspace per resettare il campo e tornare al campo precedente"],"Press enter or tab to proceed to next field":["Premi invio o tab per procedere al campo successivo"],"Press enter to confirm your option and proceed to next field":["Premi invio per confermare l'opzione e procedere al campo successivo "],"Press left or right arrows to choose your option":["Usa le frecce sinistra e destra per fare la tua scelta"],"Press space to confirm your option":["Premi spazio per confermare la tua opzione"],"Press space to select your file":["Premi spazio per selezionare il tuo file"],"Press tab to proceed to next field":["Premi tab per procedere al campo successivo"],"Press up and down arrows to increment or decrement your value":["Usa le frecce s\u00f9 e gi\u00f9 per aumentare o diminuire il numero"],"Press up or down arrows to choose your option":["Usa le frecce s\u00f9 e gi\u00f9 per fare la tua scelta"],"Show less hints":["Mostra meno suggerimenti"],"Show more hints":["Mostra pi\u00f9 suggerimenti"],"This value is required":["Questo campo \u00e8 obbligatorio"],"This value is too long. It should have %s characters or fewer":["Questo valore \u00e8 troppo lungo. Dovrebbe avere non pi\u00f9 di %s caratteri"],"This value is too short. It should have %s characters or more":["Questo valore \u00e8 troppo corto. Dovrebbe avere almeno %s caratteri"],"This value length is invalid. It should be between %s and %s characters long":["La tua risposta dovrebbe avere una lunghezza compresa tra %s e %s caratteri"],"This value seems to be invalid":["Questo campo non \u00e8 valido"],"This value should be a valid email":["Questo campo deve contenere una email valida"],"This value should be a valid integer":["Questo campo deve contenere un numero intero"],"This value should be a valid number":["Questo campo deve contenere un numero valido"],"This value should be a valid url":["Questo campo deve contenere un url valido"],"This value should be alphanumeric":["Questo campo deve contenere solo lettere"],"This value should be between %s and %s":["Questo valore dovrebbe essere compreso tra %s e %s"],"This value should be digits":["Questo campo deve contenere solo numeri"],"This value should be greater than or equal to %s":["Questo valore dovrebbe essere maggiore o uguale di %s"],"This value should be lower than or equal to %s":["Questo valore dovrebbe essere minore o uguale di %s"],"You must select between %s and %s choices":["Dovresti scegliere tra le scelte %s e %s"],"Your file exceeds the size limit":["Il tuo file \u00e8 troppo pesante"]}}} \ No newline at end of file +{"translation-revision-date":"2021-11-27 14:40+0000","generator":"Loco https:\/\/localise.biz\/","source":"dist\/scripts\/formality-public.js","domain":"formality","locale_data":{"formality":{"":{"domain":"formality","lang":"it_IT","plural-forms":"nplurals=2; plural=n != 1;"},"%s file extension is not allowed":["L'estensione del file %s non \u00e8 permessa"],"Checking file":["Controllo file"],"Please wait":["Attendi qualche secondo "],"Press backspace to reset this field and return to previous field":["Premi backspace per resettare il campo e tornare al campo precedente"],"Press enter or tab to proceed to next field":["Premi invio o tab per procedere al campo successivo"],"Press enter to confirm your option and proceed to next field":["Premi invio per confermare l'opzione e procedere al campo successivo "],"Press left or right arrows to choose your option":["Usa le frecce sinistra e destra per fare la tua scelta"],"Press space to confirm your option":["Premi spazio per confermare la tua opzione"],"Press space to select your file":["Premi spazio per selezionare il tuo file"],"Press tab to proceed to next field":["Premi tab per procedere al campo successivo"],"Press up and down arrows to increment or decrement your value":["Usa le frecce s\u00f9 e gi\u00f9 per aumentare o diminuire il numero"],"Press up or down arrows to choose your option":["Usa le frecce s\u00f9 e gi\u00f9 per fare la tua scelta"],"Show less hints":["Mostra meno suggerimenti"],"Show more hints":["Mostra pi\u00f9 suggerimenti"],"This is not a valid file":["Il file selezionato non \u00e8 valido"],"This value is required":["Questo campo \u00e8 obbligatorio"],"This value should be a valid email":["Questo campo deve contenere una email valida"],"This value should be a valid number":["Questo campo deve contenere un numero valido"],"This value should be greater than or equal to %s":["Questo valore dovrebbe essere maggiore o uguale di %s"],"This value should be lower than or equal to %s":["Questo valore dovrebbe essere minore o uguale di %s"],"Your file exceeds the size limit":["Il tuo file \u00e8 troppo pesante"]}}} \ No newline at end of file diff --git a/languages/formality-it_IT.mo b/languages/formality-it_IT.mo index 2321d1d8cffea447c644c726b985e3d8d6cf5c19..a3bf888b4df5191c8cfa43df3d7f8006be2ab1ec 100644 GIT binary patch delta 5561 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 MTjSkYSToG)e+<5Xf&c&j delta 6328 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 NSoN!QLe0!}{{iD?a6$k8 diff --git a/languages/formality-it_IT.po b/languages/formality-it_IT.po index d36bb75..a283148 100644 --- a/languages/formality-it_IT.po +++ b/languages/formality-it_IT.po @@ -8,13 +8,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2020-08-29T13:29:43+00:00\n" -"PO-Revision-Date: 2021-09-27 06:56+0000\n" +"PO-Revision-Date: 2021-11-27 14:40+0000\n" "Language: it_IT\n" "X-Generator: Loco https://localise.biz/\n" "X-Domain: formality\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Loco-Version: 2.4.3; wp-5.6-alpha-48905" +#. translators: validation +#: dist/scripts/formality-public.js:1334 +#| msgid "File extension is not allowed" +msgid "%s file extension is not allowed" +msgstr "L'estensione del file %s non è permessa" + #: dist/scripts/formality-editor.js:3405 msgid "- Field -" msgstr "- Campo -" @@ -208,7 +214,7 @@ msgstr "Griglia con tutte le opzioni che l'utente può selezionare." msgid "Checkbox input, good for true/false answer or acceptance field." msgstr "Checkbox, ottimo per risposte vero/falso o campi di accettazione." -#: dist/scripts/formality-public.js:1804 +#: dist/scripts/formality-public.js:1933 msgid "Checking file" msgstr "Controllo file" @@ -441,10 +447,6 @@ msgstr "Opzioni campo" msgid "File" msgstr "File" -#: dist/scripts/formality-public.js:1795 -msgid "File extension is not allowed" -msgstr "L'estensione del file non è permessa" - #: admin/class-formality-results.php:521 msgid "Filters" msgstr "Filtri" @@ -927,7 +929,7 @@ msgstr "Seleziona un form da includere, dalla sidebar laterale" msgid "Please select an image or video, from the right sidebar." msgstr "Seleziona una immagine o un video dalla sidebar laterale." -#: dist/scripts/formality-public.js:1804 +#: dist/scripts/formality-public.js:1933 msgid "Please wait" msgstr "Attendi qualche secondo " @@ -951,39 +953,39 @@ msgctxt "post type singular name" msgid "Result" msgstr "Risultato" -#: dist/scripts/formality-public.js:625 +#: dist/scripts/formality-public.js:615 msgid "Press backspace to reset this field and return to previous field" msgstr "Premi backspace per resettare il campo e tornare al campo precedente" -#: dist/scripts/formality-public.js:617 +#: dist/scripts/formality-public.js:607 msgid "Press enter or tab to proceed to next field" msgstr "Premi invio o tab per procedere al campo successivo" -#: dist/scripts/formality-public.js:641 +#: dist/scripts/formality-public.js:631 msgid "Press enter to confirm your option and proceed to next field" msgstr "Premi invio per confermare l'opzione e procedere al campo successivo " -#: dist/scripts/formality-public.js:633 +#: dist/scripts/formality-public.js:623 msgid "Press left or right arrows to choose your option" msgstr "Usa le frecce sinistra e destra per fare la tua scelta" -#: dist/scripts/formality-public.js:645 +#: dist/scripts/formality-public.js:635 msgid "Press space to confirm your option" msgstr "Premi spazio per confermare la tua opzione" -#: dist/scripts/formality-public.js:649 +#: dist/scripts/formality-public.js:639 msgid "Press space to select your file" msgstr "Premi spazio per selezionare il tuo file" -#: dist/scripts/formality-public.js:621 +#: dist/scripts/formality-public.js:611 msgid "Press tab to proceed to next field" msgstr "Premi tab per procedere al campo successivo" -#: dist/scripts/formality-public.js:637 +#: dist/scripts/formality-public.js:627 msgid "Press up and down arrows to increment or decrement your value" msgstr "Usa le frecce sù e giù per aumentare o diminuire il numero" -#: dist/scripts/formality-public.js:629 +#: dist/scripts/formality-public.js:619 msgid "Press up or down arrows to choose your option" msgstr "Usa le frecce sù e giù per fare la tua scelta" @@ -1159,11 +1161,11 @@ msgstr "Imposta opacità del livello coprente (%)" msgid "Settings" msgstr "Impostazioni" -#: dist/scripts/formality-public.js:589 +#: dist/scripts/formality-public.js:579 msgid "Show less hints" msgstr "Mostra meno suggerimenti" -#: dist/scripts/formality-public.js:589 +#: dist/scripts/formality-public.js:579 msgid "Show more hints" msgstr "Mostra più suggerimenti" @@ -1353,67 +1355,29 @@ msgstr "" "Ogni form è indipendente dalle tue pagine o post, e può essere raggiunto al " "seguente indirizzo:" -#: dist/scripts/formality-public.js:1374 +#: dist/scripts/formality-public.js:1331 +msgid "This is not a valid file" +msgstr "Il file selezionato non è valido" + +#: dist/scripts/formality-public.js:1508 msgid "This value is required" msgstr "Questo campo è obbligatorio" -#. translators: validation -#: dist/scripts/formality-public.js:1390 -msgid "This value is too long. It should have %s characters or fewer" -msgstr "Questo valore è troppo lungo. Dovrebbe avere non più di %s caratteri" - -#. translators: validation -#: dist/scripts/formality-public.js:1387 -msgid "This value is too short. It should have %s characters or more" -msgstr "Questo valore è troppo corto. Dovrebbe avere almeno %s caratteri" - -#. translators: validation -#: dist/scripts/formality-public.js:1393 -msgid "" -"This value length is invalid. It should be between %s and %s characters long" -msgstr "" -"La tua risposta dovrebbe avere una lunghezza compresa tra %s e %s caratteri" - -#: dist/scripts/formality-public.js:1365 dist/scripts/formality-public.js:1375 -msgid "This value seems to be invalid" -msgstr "Questo campo non è valido" - -#: dist/scripts/formality-public.js:1367 +#: dist/scripts/formality-public.js:1301 msgid "This value should be a valid email" msgstr "Questo campo deve contenere una email valida" -#: dist/scripts/formality-public.js:1370 -msgid "This value should be a valid integer" -msgstr "Questo campo deve contenere un numero intero" - -#: dist/scripts/formality-public.js:1369 +#: dist/scripts/formality-public.js:1307 msgid "This value should be a valid number" msgstr "Questo campo deve contenere un numero valido" -#: dist/scripts/formality-public.js:1368 -msgid "This value should be a valid url" -msgstr "Questo campo deve contenere un url valido" - -#: dist/scripts/formality-public.js:1372 -msgid "This value should be alphanumeric" -msgstr "Questo campo deve contenere solo lettere" - #. translators: validation -#: dist/scripts/formality-public.js:1384 -msgid "This value should be between %s and %s" -msgstr "Questo valore dovrebbe essere compreso tra %s e %s" - -#: dist/scripts/formality-public.js:1371 -msgid "This value should be digits" -msgstr "Questo campo deve contenere solo numeri" - -#. translators: validation -#: dist/scripts/formality-public.js:1378 +#: dist/scripts/formality-public.js:1310 msgid "This value should be greater than or equal to %s" msgstr "Questo valore dovrebbe essere maggiore o uguale di %s" #. translators: validation -#: dist/scripts/formality-public.js:1381 +#: dist/scripts/formality-public.js:1313 msgid "This value should be lower than or equal to %s" msgstr "Questo valore dovrebbe essere minore o uguale di %s" @@ -1523,11 +1487,6 @@ msgstr "Non hai il permesso di modificare questo risultato" msgid "You don't have permission to export these results" msgstr "Non hai i permessi necessari per esportare questi risultati" -#. translators: validation -#: dist/scripts/formality-public.js:1396 -msgid "You must select between %s and %s choices" -msgstr "Dovresti scegliere tra le scelte %s e %s" - #: public/class-formality-form.php:64 dist/scripts/formality-editor.js:3174 msgid "" "Your data has been successfully submitted. You are very important to us, all " @@ -1542,7 +1501,7 @@ msgstr "" msgid "Your email address" msgstr "Il tuo indirizzo email" -#: dist/scripts/formality-public.js:1799 +#: dist/scripts/formality-public.js:1335 msgid "Your file exceeds the size limit" msgstr "Il tuo file è troppo pesante" diff --git a/languages/formality.pot b/languages/formality.pot index 10efce8..d3444ba 100644 --- a/languages/formality.pot +++ b/languages/formality.pot @@ -2,14 +2,14 @@ # This file is distributed under the same license as the Formality plugin. msgid "" msgstr "" -"Project-Id-Version: Formality 1.4.1\n" +"Project-Id-Version: Formality 1.4.2\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/formality\n" "Last-Translator: Formality \n" "Language-Team: Formality >\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2021-09-27T06:52:23+00:00\n" +"POT-Creation-Date: 2021-11-27T14:37:01+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.4.0\n" "X-Domain: formality\n" @@ -1357,130 +1357,89 @@ msgstr "" msgid "Templates" msgstr "" -#: dist/scripts/formality-public.js:589 +#: dist/scripts/formality-public.js:579 msgid "Show more hints" msgstr "" -#: dist/scripts/formality-public.js:589 +#: dist/scripts/formality-public.js:579 msgid "Show less hints" msgstr "" -#: dist/scripts/formality-public.js:617 +#: dist/scripts/formality-public.js:607 msgid "Press enter or tab to proceed to next field" msgstr "" -#: dist/scripts/formality-public.js:621 +#: dist/scripts/formality-public.js:611 msgid "Press tab to proceed to next field" msgstr "" -#: dist/scripts/formality-public.js:625 +#: dist/scripts/formality-public.js:615 msgid "Press backspace to reset this field and return to previous field" msgstr "" -#: dist/scripts/formality-public.js:629 +#: dist/scripts/formality-public.js:619 msgid "Press up or down arrows to choose your option" msgstr "" -#: dist/scripts/formality-public.js:633 +#: dist/scripts/formality-public.js:623 msgid "Press left or right arrows to choose your option" msgstr "" -#: dist/scripts/formality-public.js:637 +#: dist/scripts/formality-public.js:627 msgid "Press up and down arrows to increment or decrement your value" msgstr "" -#: dist/scripts/formality-public.js:641 +#: dist/scripts/formality-public.js:631 msgid "Press enter to confirm your option and proceed to next field" msgstr "" -#: dist/scripts/formality-public.js:645 +#: dist/scripts/formality-public.js:635 msgid "Press space to confirm your option" msgstr "" -#: dist/scripts/formality-public.js:649 +#: dist/scripts/formality-public.js:639 msgid "Press space to select your file" msgstr "" -#: dist/scripts/formality-public.js:1365 -#: dist/scripts/formality-public.js:1375 -msgid "This value seems to be invalid" -msgstr "" - -#: dist/scripts/formality-public.js:1367 +#: dist/scripts/formality-public.js:1301 msgid "This value should be a valid email" msgstr "" -#: dist/scripts/formality-public.js:1368 -msgid "This value should be a valid url" -msgstr "" - -#: dist/scripts/formality-public.js:1369 +#: dist/scripts/formality-public.js:1307 msgid "This value should be a valid number" msgstr "" -#: dist/scripts/formality-public.js:1370 -msgid "This value should be a valid integer" -msgstr "" - -#: dist/scripts/formality-public.js:1371 -msgid "This value should be digits" -msgstr "" - -#: dist/scripts/formality-public.js:1372 -msgid "This value should be alphanumeric" -msgstr "" - -#: dist/scripts/formality-public.js:1374 -msgid "This value is required" -msgstr "" - #. translators: validation -#: dist/scripts/formality-public.js:1378 +#: dist/scripts/formality-public.js:1310 msgid "This value should be greater than or equal to %s" msgstr "" #. translators: validation -#: dist/scripts/formality-public.js:1381 +#: dist/scripts/formality-public.js:1313 msgid "This value should be lower than or equal to %s" msgstr "" -#. translators: validation -#: dist/scripts/formality-public.js:1384 -msgid "This value should be between %s and %s" -msgstr "" - -#. translators: validation -#: dist/scripts/formality-public.js:1387 -msgid "This value is too short. It should have %s characters or more" -msgstr "" - -#. translators: validation -#: dist/scripts/formality-public.js:1390 -msgid "This value is too long. It should have %s characters or fewer" +#: dist/scripts/formality-public.js:1331 +msgid "This is not a valid file" msgstr "" #. translators: validation -#: dist/scripts/formality-public.js:1393 -msgid "This value length is invalid. It should be between %s and %s characters long" +#: dist/scripts/formality-public.js:1334 +msgid "%s file extension is not allowed" msgstr "" -#. translators: validation -#: dist/scripts/formality-public.js:1396 -msgid "You must select between %s and %s choices" -msgstr "" - -#: dist/scripts/formality-public.js:1795 -msgid "File extension is not allowed" +#: dist/scripts/formality-public.js:1335 +msgid "Your file exceeds the size limit" msgstr "" -#: dist/scripts/formality-public.js:1799 -msgid "Your file exceeds the size limit" +#: dist/scripts/formality-public.js:1508 +msgid "This value is required" msgstr "" -#: dist/scripts/formality-public.js:1804 +#: dist/scripts/formality-public.js:1933 msgid "Checking file" msgstr "" -#: dist/scripts/formality-public.js:1804 +#: dist/scripts/formality-public.js:1933 msgid "Please wait" msgstr "" diff --git a/readme.txt b/readme.txt index 1e56dff..7881a4c 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Donate link: https://www.paypal.me/michelegiorgi/ Tags: form, conversational, multistep, design form, gutenberg, block editor Requires at least: 5.7 Tested up to: 5.8 -Stable tag: 1.4.1 +Stable tag: 1.4.2 Requires PHP: 7.0 License: GPLv3 License URI: https://www.gnu.org/licenses/gpl-3.0.txt @@ -61,6 +61,13 @@ You will find **Formality** menu in your WordPress admin screen. == Changelog == += 1.4.2 = +Release Date: Nov 27th, 2021 + +* Add new custom form validation +* Remove parsley.js dependency from frontend script +* Gutenberg 12 compatibility + = 1.4.1 = Release Date: Sep 27th, 2021