(function() { 'use strict'; window.utils = window.utils || {}; var JS_INITIALIZED = 'js-form-initialized'; var SUBMIT_BUTTON_SELECTOR = '[type="submit"]:not([formnovalidate])'; var AUTOSUBMIT_BUTTON_SELECTOR = '[type="submit"][data-autosubmit]'; var AJAX_SUBMIT_FLAG = 'ajaxSubmit'; function formValidator(inputs) { var done = true; inputs.forEach(function(inp) { var len = inp.value.trim().length; if (done && len === 0) { done = false; } }); return done; } window.utils.form = function(form, options) { if (form.classList.contains(JS_INITIALIZED)) { return false; } var utilInstances = []; // reactive buttons utilInstances.push(window.utils.setup('reactiveButton', form)); // conditonal fieldsets var fieldSets = Array.from(form.querySelectorAll('fieldset[data-conditional-id][data-conditional-value]')); utilInstances.push(window.utils.setup('interactiveFieldset', form, { fieldSets })); // hide autoSubmit submit button utilInstances.push(window.utils.setup('autoSubmit', form, options)); // async form if (AJAX_SUBMIT_FLAG in form.dataset) { utilInstances.push(window.utils.setup('asyncForm', form, options)); } // inputs utilInstances.push(window.utils.setup('inputs', form, options)); form.classList.add(JS_INITIALIZED); function destroyUtils() { utilInstances.filter(function(utilInstance) { return !!utilInstance; }).forEach(function(utilInstance) { utilInstance.destroy(); }); } return { scope: form, destroy: destroyUtils, }; }; // registers input-listener for each element in (array) and // enables