From a017168ecb68c5e625ff6b077b208fa29c3c6199 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Sat, 16 Feb 2019 23:20:10 +0100 Subject: [PATCH] move form widget julius to static --- src/Foundation.hs | 2 + .../form.lucius => static/css/utils/form.scss | 0 static/js/utils/asyncTable.js | 11 +- static/js/utils/form.js | 125 ++++++++++++++++++ static/js/utils/setup.js | 2 +- templates/formPageI18n.julius | 19 +-- templates/widgets/form.julius | 122 +---------------- 7 files changed, 146 insertions(+), 135 deletions(-) rename templates/widgets/form.lucius => static/css/utils/form.scss (100%) create mode 100644 static/js/utils/form.js diff --git a/src/Foundation.hs b/src/Foundation.hs index ee315c9a9..7e34e3f8f 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -1003,12 +1003,14 @@ siteLayout' headingOverride widget = do addScript $ StaticR js_utils_alerts_js addScript $ StaticR js_utils_asidenav_js addScript $ StaticR js_utils_asyncTable_js + addScript $ StaticR js_utils_form_js addScript $ StaticR js_utils_inputs_js addScript $ StaticR js_utils_setup_js addScript $ StaticR js_utils_showHide_js addScript $ StaticR js_utils_tabber_js addStylesheet $ StaticR css_utils_alerts_scss addStylesheet $ StaticR css_utils_asidenav_scss + addStylesheet $ StaticR css_utils_form_scss addStylesheet $ StaticR css_utils_inputs_scss addStylesheet $ StaticR css_utils_showHide_scss addStylesheet $ StaticR css_utils_tabber_scss diff --git a/templates/widgets/form.lucius b/static/css/utils/form.scss similarity index 100% rename from templates/widgets/form.lucius rename to static/css/utils/form.scss diff --git a/static/js/utils/asyncTable.js b/static/js/utils/asyncTable.js index 5067b74aa..fe164d3b2 100644 --- a/static/js/utils/asyncTable.js +++ b/static/js/utils/asyncTable.js @@ -167,6 +167,7 @@ // setup the wrapper and its components to behave async again window.utils.teardown('asyncTable'); + window.utils.teardown('form'); // merge global options and table specific options var resetOptions = {}; Object.keys(options) @@ -191,13 +192,9 @@ window.utils.setup('asyncTable', wrapper, combinedOptions); - // make sure to hide any new submit buttons - document.dispatchEvent(new CustomEvent('setup', { - detail: { - scope: wrapper, - module: 'autoSubmit' - } - })); + Array.from(wrapper.querySelectorAll('form')).forEach(function(form) { + window.utils.setup('form', form); + }); } init(); diff --git a/static/js/utils/form.js b/static/js/utils/form.js new file mode 100644 index 000000000..30ba76c96 --- /dev/null +++ b/static/js/utils/form.js @@ -0,0 +1,125 @@ +(function() { + 'use strict'; + + window.utils = window.utils || {}; + + var JS_INITIALIZED = 'js-initialized'; + var SUBMIT_BUTTON_SELECTOR = '[type="submit"]:not([formnovalidate])'; + var AUTOSUBMIT_BUTTON_SELECTOR = '[type="submit"][data-autosubmit]'; + + 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; + } + form.classList.add(JS_INITIALIZED); + + // reactive buttons + var submitBtn = form.querySelector(SUBMIT_BUTTON_SELECTOR); + if (submitBtn) { + window.utils.setup('reactiveButton', form, { button: submitBtn }); + } + + // conditonal fieldsets + var fieldSets = Array.from(form.querySelectorAll('fieldset[data-conditional-id][data-conditional-value]')); + window.utils.setup('interactiveFieldset', form, { fieldSets }); + + // hide autoSubmit submit button + window.utils.setup('autoSubmit', form, options); + }; + + // registers input-listener for each element in (array) and + // enables