diff --git a/.eslintrc.js b/.eslintrc.js index a82afbceab..1efb33893c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -43,12 +43,6 @@ module.exports = { 'no-console': 'off', 'no-continue': 'off', 'no-lonely-if': 'off', - 'no-multi-spaces': ['error', { - exceptions: { - Property: true, - VariableDeclarator: true, - }, - }], 'no-nested-ternary': 'off', 'no-param-reassign': 'off', 'no-plusplus': 'off', @@ -93,17 +87,14 @@ module.exports = { 'no-restricted-globals': 'off', 'no-restricted-properties': 'off', 'no-var': 'off', // https://github.com/fomantic/Fomantic-UI/pull/2584 - 'one-var': 'off', 'prefer-const': 'off', 'prefer-exponentiation-operator': 'off', 'prefer-rest-params': 'off', 'prefer-spread': 'off', - 'semi-style': 'off', 'unicorn/no-array-for-each': 'off', 'unicorn/no-for-loop': 'off', // autofixes to "for of" 'unicorn/prefer-code-point': 'off', 'unicorn/prefer-includes': 'off', - 'unicorn/prefer-node-protocol': 'off', // needs Node 14+ 'unicorn/prefer-number-properties': 'off', 'unicorn/prefer-optional-catch-binding': 'off', 'unicorn/prefer-prototype-methods': 'off', diff --git a/changelog-setup.js b/changelog-setup.js index e53c407780..6734c8983b 100644 --- a/changelog-setup.js +++ b/changelog-setup.js @@ -1,9 +1,8 @@ const semver = require('semver'); // eslint-disable-line import/no-extraneous-dependencies -let changelogDeps = {}, - loopVersion = '', - uniqueCommits = [] -; +let changelogDeps = {}; +let loopVersion = ''; +let uniqueCommits = []; const issueLinks = function (item) { if (typeof loopVersion !== 'string') { return item; @@ -113,79 +112,74 @@ module.exports = function (Handlebars) { loopVersion = options.data.root.releases[options.data.index].tag; changelogDeps = {}; - const - depsRegex = /(?:build\(deps[A-Za-z-]*\):|\[Snyk]) (?:\[?[Ss]ecurity]? )?(?:bump|upgrade) ([\w./@-]+) from (\d+\.\d+\.\d+) to (\d+\.\d+\.\d+)/, - detectVersionRange = function (item) { - let subjectDetails = item.subject.match(depsRegex); - if (!subjectDetails) { - return true; - } - - let depPackage = subjectDetails[1], - depVersionFrom = subjectDetails[2], - depVersionTo = subjectDetails[3] - ; - if (!changelogDeps[depPackage]) { - changelogDeps[depPackage] = { - from: '999.999.999', - to: '0.0.0', - }; - } - if (semver.lt(depVersionFrom, changelogDeps[depPackage].from)) { - changelogDeps[depPackage].from = depVersionFrom; - } - if (semver.gte(depVersionTo, changelogDeps[depPackage].to)) { - changelogDeps[depPackage].to = depVersionTo; - - return true; - } + const depsRegex = /(?:build\(deps[A-Za-z-]*\):|\[Snyk]) (?:\[?[Ss]ecurity]? )?(?:bump|upgrade) ([\w./@-]+) from (\d+\.\d+\.\d+) to (\d+\.\d+\.\d+)/; + const detectVersionRange = function (item) { + let subjectDetails = item.subject.match(depsRegex); + if (!subjectDetails) { + return true; + } + + let depPackage = subjectDetails[1]; + let depVersionFrom = subjectDetails[2]; + let depVersionTo = subjectDetails[3]; + if (!changelogDeps[depPackage]) { + changelogDeps[depPackage] = { + from: '999.999.999', + to: '0.0.0', + }; + } + if (semver.lt(depVersionFrom, changelogDeps[depPackage].from)) { + changelogDeps[depPackage].from = depVersionFrom; + } + if (semver.gte(depVersionTo, changelogDeps[depPackage].to)) { + changelogDeps[depPackage].to = depVersionTo; - return false; - }, - list = context - .filter((item) => { - const commit = item.commit || item; - if (exclude) { - const pattern = new RegExp(exclude, 'm'); - if (pattern.test(commit.message)) { - return false; - } - } - if (message) { - const pattern = new RegExp(message, 'm'); + return true; + } - return pattern.test(commit.message); + return false; + }; + const list = context + .filter((item) => { + const commit = item.commit || item; + if (exclude) { + const pattern = new RegExp(exclude, 'm'); + if (pattern.test(commit.message)) { + return false; } - if (subject) { - const pattern = new RegExp(subject); + } + if (message) { + const pattern = new RegExp(message, 'm'); - return pattern.test(commit.subject); - } + return pattern.test(commit.message); + } + if (subject) { + const pattern = new RegExp(subject); - return true; - }) - .filter(detectVersionRange) - // second round as the previous list came unordered from git - .filter(detectVersionRange) - // adjust from version to create the whole range in one line (linked to the latest commit) - .map((item) => { - let subjectDetails = item.subject.match(depsRegex); - if (!subjectDetails) { - return item; - } - let - depPackage = subjectDetails[1], - depVersionFrom = subjectDetails[2] - ; - item.subject = item.subject.replace(depVersionFrom, changelogDeps[depPackage].from); + return pattern.test(commit.subject); + } + return true; + }) + .filter(detectVersionRange) + // second round as the previous list came unordered from git + .filter(detectVersionRange) + // adjust from version to create the whole range in one line (linked to the latest commit) + .map((item) => { + let subjectDetails = item.subject.match(depsRegex); + if (!subjectDetails) { return item; - }) - .map(issueLinks) - .map((item) => options.fn(item)) - .sort() - .join('') - ; + } + let depPackage = subjectDetails[1]; + let depVersionFrom = subjectDetails[2]; + item.subject = item.subject.replace(depVersionFrom, changelogDeps[depPackage].from); + + return item; + }) + .map(issueLinks) + .map((item) => options.fn(item)) + .sort() + .join(''); if (!list) { return ''; } diff --git a/examples/assets/show-examples.js b/examples/assets/show-examples.js index 2b9b9cca6d..e9b106e890 100644 --- a/examples/assets/show-examples.js +++ b/examples/assets/show-examples.js @@ -8,8 +8,6 @@ $(document) variation: 'small inverted', exclusive: true, content: $(this).attr('class'), - }) - ; + }); }); - }) -; + }); diff --git a/gulpfile.js b/gulpfile.js index 372b1ffc42..87516604ee 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,15 +2,13 @@ * Set-up *******************************/ -const - gulp = require('gulp'), +const gulp = require('gulp'); - // read user config to know what task to load - config = require('./tasks/config/user'), +// read user config to know what task to load +const config = require('./tasks/config/user'); - admin = require('./tasks/collections/admin'), - rtl = require('./tasks/collections/rtl') -; +const admin = require('./tasks/collections/admin'); +const rtl = require('./tasks/collections/rtl'); /******************************* * Tasks diff --git a/scripts/nightly-version.js b/scripts/nightly-version.js index 433122ab57..799a10589e 100644 --- a/scripts/nightly-version.js +++ b/scripts/nightly-version.js @@ -1,9 +1,9 @@ // node -const fs = require('fs'); -const path = require('path'); -const childProcess = require('child_process'); +const fs = require('node:fs'); +const path = require('node:path'); +const childProcess = require('node:child_process'); -const process = require('process'); +const process = require('node:process'); // npm const fetch = require('node-fetch'); // eslint-disable-line import/no-extraneous-dependencies @@ -20,16 +20,14 @@ const currentRev = childProcess // get the current rev from the repo .execSync('git rev-parse HEAD') .toString() .trim() - .slice(0, 7) -; + .slice(0, 7); const getNextVersion = async function () { const versions = await fetch(`${ghBase}/repos/${repoUrlPath}/milestones`) .then((r) => r.json()) .then((milestones) => milestones.filter((m) => m.title.indexOf('x') === -1)) // remove all versions with `x` in it .then((versions) => versions.map((m) => m.title)) // create array of versions - .then((versions) => semver.sort(versions)) - ; + .then((versions) => semver.sort(versions)); // Return first entry aka the smallest version in milestones which would therefore // be the next version @@ -95,5 +93,4 @@ getNightlyVersion() JSON.stringify(pkg, null, 2) ); }) - .then(() => console.log(`Done (${pkg.version})`)) -; + .then(() => console.log(`Done (${pkg.version})`)); diff --git a/src/definitions/behaviors/api.js b/src/definitions/behaviors/api.js index 3e029e0525..11daef549d 100644 --- a/src/definitions/behaviors/api.js +++ b/src/definitions/behaviors/api.js @@ -24,72 +24,68 @@ : globalThis; $.fn.api = function (parameters) { - var - // use window context if none specified - $allModules = isFunction(this) - ? $(window) - : $(this), - time = Date.now(), - performance = [], - - query = arguments[0], - methodInvoked = typeof query === 'string', - queryArguments = [].slice.call(arguments, 1), - contextCheck = function (context, win) { - var $context; - if ([window, document].indexOf(context) >= 0) { - $context = $(context); - } else { - $context = $(win.document).find(context); - if ($context.length === 0) { - $context = win.frameElement ? contextCheck(context, win.parent) : window; - } + // use window context if none specified + var $allModules = isFunction(this) + ? $(window) + : $(this); + var time = Date.now(); + var performance = []; + + var query = arguments[0]; + var methodInvoked = typeof query === 'string'; + var queryArguments = [].slice.call(arguments, 1); + var contextCheck = function (context, win) { + var $context; + if ([window, document].indexOf(context) >= 0) { + $context = $(context); + } else { + $context = $(win.document).find(context); + if ($context.length === 0) { + $context = win.frameElement ? contextCheck(context, win.parent) : window; } + } - return $context; - }, - returnedValue - ; + return $context; + }; + var returnedValue; $allModules.each(function () { - var - settings = $.isPlainObject(parameters) - ? $.extend(true, {}, $.fn.api.settings, parameters) - : $.extend({}, $.fn.api.settings), - - // internal aliases - regExp = settings.regExp, - namespace = settings.namespace, - metadata = settings.metadata, - selector = settings.selector, - error = settings.error, - className = settings.className, - - // define namespaces for modules - eventNamespace = '.' + namespace, - moduleNamespace = 'module-' + namespace, - - // element that creates request - $module = $(this), - $form = $module.closest(selector.form), - - // context used for state - $context = settings.stateContext ? contextCheck(settings.stateContext, window) : $module, - - // request details - ajaxSettings, - requestSettings, - url, - data, - requestStartTime, - originalData, - - // standard module - element = this, - context = $context[0], - instance = $module.data(moduleNamespace), - module - ; + var settings = $.isPlainObject(parameters) + ? $.extend(true, {}, $.fn.api.settings, parameters) + : $.extend({}, $.fn.api.settings); + + // internal aliases + var regExp = settings.regExp; + var namespace = settings.namespace; + var metadata = settings.metadata; + var selector = settings.selector; + var error = settings.error; + var className = settings.className; + + // define namespaces for modules + var eventNamespace = '.' + namespace; + var moduleNamespace = 'module-' + namespace; + + // element that creates request + var $module = $(this); + var $form = $module.closest(selector.form); + + // context used for state + var $context = settings.stateContext ? contextCheck(settings.stateContext, window) : $module; + + // request details + var ajaxSettings; + var requestSettings; + var url; + var data; + var requestStartTime; + var originalData; + + // standard module + var element = this; + var context = $context[0]; + var instance = $module.data(moduleNamespace); + var module; module = { @@ -105,28 +101,23 @@ module.verbose('Storing instance of module', module); instance = module; $module - .data(moduleNamespace, instance) - ; + .data(moduleNamespace, instance); }, destroy: function () { module.verbose('Destroying previous module for', element); $module .removeData(moduleNamespace) - .off(eventNamespace) - ; + .off(eventNamespace); }, bind: { events: function () { - var - triggerEvent = module.get.event() - ; + var triggerEvent = module.get.event(); if (triggerEvent) { module.verbose('Attaching API events to element', triggerEvent); $module - .on(triggerEvent + eventNamespace, module.event.trigger) - ; + .on(triggerEvent + eventNamespace, module.event.trigger); } else if (settings.on === 'now') { module.debug('Querying API endpoint immediately'); module.query(); @@ -150,9 +141,7 @@ read: { cachedResponse: function (url) { - var - response - ; + var response; if (window.Storage === undefined) { module.error(error.noStorage); @@ -356,10 +345,8 @@ add: { urlData: function (url, urlData) { - var - requiredVariables, - optionalVariables - ; + var requiredVariables; + var optionalVariables; if (url) { requiredVariables = url.match(regExp.required); optionalVariables = url.match(regExp.optional); @@ -367,19 +354,17 @@ if (requiredVariables) { module.debug('Looking for required URL variables', requiredVariables); $.each(requiredVariables, function (index, templatedString) { - var - // allow legacy {$var} style - variable = templatedString.indexOf('$') !== -1 - ? templatedString.slice(2, -1) - : templatedString.slice(1, -1), - value = $.isPlainObject(urlData) && urlData[variable] !== undefined - ? urlData[variable] - : ($module.data(variable) !== undefined - ? $module.data(variable) - : ($context.data(variable) !== undefined // eslint-disable-line unicorn/no-nested-ternary - ? $context.data(variable) - : urlData[variable])) - ; + // allow legacy {$var} style + var variable = templatedString.indexOf('$') !== -1 + ? templatedString.slice(2, -1) + : templatedString.slice(1, -1); + var value = $.isPlainObject(urlData) && urlData[variable] !== undefined + ? urlData[variable] + : ($module.data(variable) !== undefined + ? $module.data(variable) + : ($context.data(variable) !== undefined // eslint-disable-line unicorn/no-nested-ternary + ? $context.data(variable) + : urlData[variable])); // remove value if (value === undefined) { module.error(error.requiredParameter, variable, url); @@ -398,19 +383,17 @@ if (optionalVariables) { module.debug('Looking for optional URL variables', requiredVariables); $.each(optionalVariables, function (index, templatedString) { - var - // allow legacy {/$var} style - variable = templatedString.indexOf('$') !== -1 - ? templatedString.slice(3, -1) - : templatedString.slice(2, -1), - value = $.isPlainObject(urlData) && urlData[variable] !== undefined - ? urlData[variable] - : ($module.data(variable) !== undefined - ? $module.data(variable) - : ($context.data(variable) !== undefined // eslint-disable-line unicorn/no-nested-ternary - ? $context.data(variable) - : urlData[variable])) - ; + // allow legacy {/$var} style + var variable = templatedString.indexOf('$') !== -1 + ? templatedString.slice(3, -1) + : templatedString.slice(2, -1); + var value = $.isPlainObject(urlData) && urlData[variable] !== undefined + ? urlData[variable] + : ($module.data(variable) !== undefined + ? $module.data(variable) + : ($context.data(variable) !== undefined // eslint-disable-line unicorn/no-nested-ternary + ? $context.data(variable) + : urlData[variable])); // optional replacement if (value !== undefined) { module.verbose('Optional variable Found', variable, value); @@ -429,11 +412,9 @@ return url; }, formData: function (data) { - var - formData = {}, - hasOtherData, - useFormDataApi = settings.serializeForm === 'formdata' - ; + var formData = {}; + var hasOtherData; + var useFormDataApi = settings.serializeForm === 'formdata'; data = data || originalData || settings.data; hasOtherData = $.isPlainObject(data); @@ -442,16 +423,14 @@ settings.processData = settings.processData !== undefined ? settings.processData : false; settings.contentType = settings.contentType !== undefined ? settings.contentType : false; } else { - var - formArray = $form.serializeArray(), - pushes = {}, - pushValues = {}, - build = function (base, key, value) { - base[key] = value; - - return base; - } - ; + var formArray = $form.serializeArray(); + var pushes = {}; + var pushValues = {}; + var build = function (base, key, value) { + base[key] = value; + + return base; + }; // add files $.each($('input[type="file"]', $form), function (i, tag) { $.each($(tag)[0].files, function (j, file) { @@ -462,17 +441,15 @@ if (!regExp.validate.test(el.name)) { return; } - var - isCheckbox = $('[name="' + el.name + '"]', $form).attr('type') === 'checkbox', - floatValue = parseFloat(el.value), - value = (isCheckbox && el.value === 'on') + var isCheckbox = $('[name="' + el.name + '"]', $form).attr('type') === 'checkbox'; + var floatValue = parseFloat(el.value); + var value = (isCheckbox && el.value === 'on') || el.value === 'true' || (String(floatValue) === el.value ? floatValue - : (el.value === 'false' ? false : el.value)), - nameKeys = el.name.match(regExp.key) || [], - pushKey = el.name.replace(/\[]$/, '') - ; + : (el.value === 'false' ? false : el.value)); + var nameKeys = el.name.match(regExp.key) || []; + var pushKey = el.name.replace(/\[]$/, ''); if (!(pushKey in pushes)) { pushes[pushKey] = 0; pushValues[pushKey] = value; @@ -544,16 +521,14 @@ // nothing special }, done: function (response, textStatus, xhr) { - var - context = this, - elapsedTime = Date.now() - requestStartTime, - timeLeft = settings.loadingDuration - elapsedTime, - translatedResponse = isFunction(settings.onResponse) - ? (module.is.expectingJSON() && !settings.rawResponse - ? settings.onResponse.call(context, $.extend(true, {}, response)) - : settings.onResponse.call(context, response)) - : false - ; + var context = this; + var elapsedTime = Date.now() - requestStartTime; + var timeLeft = settings.loadingDuration - elapsedTime; + var translatedResponse = isFunction(settings.onResponse) + ? (module.is.expectingJSON() && !settings.rawResponse + ? settings.onResponse.call(context, $.extend(true, {}, response)) + : settings.onResponse.call(context, response)) + : false; timeLeft = timeLeft > 0 ? timeLeft : 0; @@ -573,11 +548,9 @@ }, timeLeft); }, fail: function (xhr, status, httpMessage) { - var - context = this, - elapsedTime = Date.now() - requestStartTime, - timeLeft = settings.loadingDuration - elapsedTime - ; + var context = this; + var elapsedTime = Date.now() - requestStartTime; + var timeLeft = settings.loadingDuration - elapsedTime; timeLeft = timeLeft > 0 ? timeLeft : 0; @@ -603,10 +576,8 @@ settings.onSuccess.call(context, response, $module, xhr); }, complete: function (firstParameter, secondParameter) { - var - xhr, - response - ; + var xhr; + var response; // have to guess callback parameters based on request success if (module.was.successful()) { response = firstParameter; @@ -619,11 +590,9 @@ settings.onComplete.call(context, response, $module, xhr); }, fail: function (xhr, status, httpMessage) { - var - // pull response from xhr if available - response = module.get.responseFromXHR(xhr), - errorMessage = module.get.errorFromRequest(response, status, httpMessage) - ; + // pull response from xhr if available + var response = module.get.responseFromXHR(xhr); + var errorMessage = module.get.errorFromRequest(response, status, httpMessage); if (status === 'aborted') { module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage); settings.onAbort.call(context, status, $module, xhr); @@ -665,28 +634,24 @@ return $.Deferred() .always(module.event.request.complete) .done(module.event.request.done) - .fail(module.event.request.fail) - ; + .fail(module.event.request.fail); }, mockedXHR: function () { - var - // xhr does not simulate these properties of xhr but must return them - textStatus = false, - status = false, - httpMessage = false, - responder = settings.mockResponse || settings.response, - asyncResponder = settings.mockResponseAsync || settings.responseAsync, - asyncCallback, - response, - mockedXHR - ; + // xhr does not simulate these properties of xhr but must return them + var textStatus = false; + var status = false; + var httpMessage = false; + var responder = settings.mockResponse || settings.response; + var asyncResponder = settings.mockResponseAsync || settings.responseAsync; + var asyncCallback; + var response; + var mockedXHR; mockedXHR = $.Deferred() .always(module.event.xhr.complete) .done(module.event.xhr.done) - .fail(module.event.xhr.fail) - ; + .fail(module.event.xhr.fail); if (responder) { if (isFunction(responder)) { @@ -716,15 +681,12 @@ }, xhr: function () { - var - xhr - ; + var xhr; // ajax request promise xhr = $.ajax(ajaxSettings) .always(module.event.xhr.always) .done(module.event.xhr.done) - .fail(module.event.xhr.fail) - ; + .fail(module.event.xhr.fail); module.verbose('Created server request', xhr, ajaxSettings); return xhr; @@ -779,9 +741,7 @@ return module.xhr || false; }, settings: function () { - var - runSettings - ; + var runSettings; runSettings = settings.beforeSend.call($module, settings); if (runSettings) { if (runSettings.success !== undefined) { @@ -812,11 +772,9 @@ : $.extend(true, {}, settings); }, urlEncodedValue: function (value) { - var - decodedValue = window.decodeURIComponent(value), - encodedValue = window.encodeURIComponent(value), - alreadyEncoded = decodedValue !== value - ; + var decodedValue = window.decodeURIComponent(value); + var encodedValue = window.encodeURIComponent(value); + var alreadyEncoded = decodedValue !== value; if (alreadyEncoded) { module.debug('URL value is already encoded, avoiding double encoding', value); @@ -827,9 +785,7 @@ return encodedValue; }, defaultData: function () { - var - data = {} - ; + var data = {}; if (!isWindow(element)) { if (module.is.input()) { data.value = $module.val(); @@ -889,9 +845,7 @@ }, abort: function () { - var - xhr = module.get.xhr() - ; + var xhr = module.get.xhr(); if (xhr && xhr.state() !== 'resolved') { module.debug('Cancelling API request'); xhr.abort(); @@ -955,11 +909,9 @@ }, performance: { log: function (message) { - var - currentTime, - executionTime, - previousTime - ; + var currentTime; + var executionTime; + var previousTime; if (settings.performance) { currentTime = Date.now(); previousTime = time || currentTime; @@ -978,10 +930,8 @@ }, 500); }, display: function () { - var - title = settings.name + ':', - totalTime = 0 - ; + var title = settings.name + ':'; + var totalTime = 0; time = false; clearTimeout(module.performance.timer); $.each(performance, function (index, data) { @@ -1003,12 +953,10 @@ }, }, invoke: function (query, passedArguments, context) { - var - object = instance, - maxDepth, - found, - response - ; + var object = instance; + var maxDepth; + var found; + var response; passedArguments = passedArguments || queryArguments; context = context || element; if (typeof query === 'string' && object !== undefined) { @@ -1017,8 +965,7 @@ $.each(query, function (depth, value) { var camelCaseValue = depth !== maxDepth ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1) - : query - ; + : query; if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) { object = object[camelCaseValue]; } else if (object[camelCaseValue] !== undefined) { diff --git a/src/definitions/behaviors/form.js b/src/definitions/behaviors/form.js index 38461126f0..436294820e 100644 --- a/src/definitions/behaviors/form.js +++ b/src/definitions/behaviors/form.js @@ -20,58 +20,54 @@ : globalThis; $.fn.form = function (parameters) { - var - $allModules = $(this), - $window = $(window), - - time = Date.now(), - performance = [], - - query = arguments[0], - methodInvoked = typeof query === 'string', - queryArguments = [].slice.call(arguments, 1), - returnedValue - ; + var $allModules = $(this); + var $window = $(window); + + var time = Date.now(); + var performance = []; + + var query = arguments[0]; + var methodInvoked = typeof query === 'string'; + var queryArguments = [].slice.call(arguments, 1); + var returnedValue; $allModules.each(function () { - var - $module = $(this), - element = this, - - formErrors = [], - formErrorsTracker = {}, - keyHeldDown = false, - - // set at run-time - $field, - $group, - $message, - $prompt, - $submit, - $clear, - $reset, - - settings, - validation, - - metadata, - selector, - className, - regExp, - error, - - namespace, - moduleNamespace, - eventNamespace, - attachEventsSelector, - attachEventsAction, - - submitting = false, - dirty = false, - history = ['clean', 'clean'], - - instance, - module - ; + var $module = $(this); + var element = this; + + var formErrors = []; + var formErrorsTracker = {}; + var keyHeldDown = false; + + // set at run-time + var $field; + var $group; + var $message; + var $prompt; + var $submit; + var $clear; + var $reset; + + var settings; + var validation; + + var metadata; + var selector; + var className; + var regExp; + var error; + + var namespace; + var moduleNamespace; + var eventNamespace; + var attachEventsSelector; + var attachEventsAction; + + var submitting = false; + var dirty = false; + var history = ['clean', 'clean']; + + var instance; + var module; module = { @@ -103,16 +99,14 @@ module.verbose('Storing instance of module', module); instance = module; $module - .data(moduleNamespace, module) - ; + .data(moduleNamespace, module); }, destroy: function () { module.verbose('Destroying previous module', instance); module.removeEvents(); $module - .removeData(moduleNamespace) - ; + .removeData(moduleNamespace); }, refresh: function () { @@ -162,18 +156,15 @@ .on('blur' + eventNamespace, selector.field, module.event.field.blur) .on('click' + eventNamespace, selector.submit, module.submit) .on('click' + eventNamespace, selector.reset, module.reset) - .on('click' + eventNamespace, selector.clear, module.clear) - ; + .on('click' + eventNamespace, selector.clear, module.clear); $field.on('invalid' + eventNamespace, module.event.field.invalid); if (settings.keyboardShortcuts) { $module.on('keydown' + eventNamespace, selector.field, module.event.field.keydown); } $field.each(function (index, el) { - var - $input = $(el), - type = $input.prop('type'), - inputEvent = module.get.changeEvent(type, $input) - ; + var $input = $(el); + var type = $input.prop('type'); + var inputEvent = module.get.changeEvent(type, $input); $input.on(inputEvent + eventNamespace, module.event.field.change); }); @@ -204,18 +195,16 @@ clear: function () { $field.each(function (index, el) { - var - $field = $(el), - $element = $field.parent(), - $fieldGroup = $field.closest($group), - $prompt = $fieldGroup.find(selector.prompt), - $calendar = $field.closest(selector.uiCalendar), - defaultValue = $field.data(metadata.defaultValue) || '', - isCheckbox = $field.is(selector.checkbox), - isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'), - isCalendar = $calendar.length > 0 && module.can.useElement('calendar'), - isErrored = $fieldGroup.hasClass(className.error) - ; + var $field = $(el); + var $element = $field.parent(); + var $fieldGroup = $field.closest($group); + var $prompt = $fieldGroup.find(selector.prompt); + var $calendar = $field.closest(selector.uiCalendar); + var defaultValue = $field.data(metadata.defaultValue) || ''; + var isCheckbox = $field.is(selector.checkbox); + var isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'); + var isCalendar = $calendar.length > 0 && module.can.useElement('calendar'); + var isErrored = $fieldGroup.hasClass(className.error); if (isErrored) { module.verbose('Resetting error on field', $fieldGroup); $fieldGroup.removeClass(className.error); @@ -238,19 +227,17 @@ reset: function () { $field.each(function (index, el) { - var - $field = $(el), - $element = $field.parent(), - $fieldGroup = $field.closest($group), - $calendar = $field.closest(selector.uiCalendar), - $prompt = $fieldGroup.find(selector.prompt), - defaultValue = $field.data(metadata.defaultValue), - isCheckbox = $field.is(selector.checkbox), - isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'), - isCalendar = $calendar.length > 0 && module.can.useElement('calendar'), - isFile = $field.is(selector.file), - isErrored = $fieldGroup.hasClass(className.error) - ; + var $field = $(el); + var $element = $field.parent(); + var $fieldGroup = $field.closest($group); + var $calendar = $field.closest(selector.uiCalendar); + var $prompt = $fieldGroup.find(selector.prompt); + var defaultValue = $field.data(metadata.defaultValue); + var isCheckbox = $field.is(selector.checkbox); + var isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'); + var isCalendar = $calendar.length > 0 && module.can.useElement('calendar'); + var isFile = $field.is(selector.file); + var isErrored = $fieldGroup.hasClass(className.error); if (defaultValue === undefined) { return; } @@ -277,14 +264,11 @@ determine: { isValid: function () { - var - allValid = true - ; + var allValid = true; $field.each(function (index, el) { - var $el = $(el), - validation = module.get.validation($el) || {}, - identifier = module.get.identifier(validation, $el) - ; + var $el = $(el); + var validation = module.get.validation($el) || {}; + var identifier = module.get.identifier(validation, $el); if (!module.validate.field(validation, identifier, true)) { allValid = false; } @@ -296,11 +280,9 @@ var formIsDirty = false; $field.each(function (index, el) { - var - $el = $(el), - isCheckbox = $el.filter(selector.checkbox).length > 0, - isDirty - ; + var $el = $(el); + var isCheckbox = $el.filter(selector.checkbox).length > 0; + var isDirty; isDirty = isCheckbox ? module.is.checkboxDirty($el) @@ -341,9 +323,7 @@ return String($field.val()).trim() === ''; }, valid: function (field, showErrors) { - var - allValid = true - ; + var allValid = true; if (field) { module.verbose('Checking if field is valid', field); @@ -421,22 +401,19 @@ event: { field: { keydown: function (event) { - var - $field = $(this), - key = event.which, - isInput = $field.is(selector.input), - isCheckbox = $field.is(selector.checkbox), - isInDropdown = $field.closest(selector.uiDropdown).length > 0, - keyCode = { - enter: 13, - escape: 27, - } - ; + var $field = $(this); + var key = event.which; + var isInput = $field.is(selector.input); + var isCheckbox = $field.is(selector.checkbox); + var isInDropdown = $field.closest(selector.uiDropdown).length > 0; + var keyCode = { + enter: 13, + escape: 27, + }; if (key === keyCode.escape) { module.verbose('Escape key pressed blurring field'); $field[0] - .blur() - ; + .blur(); } if (!event.ctrlKey && key === keyCode.enter && isInput && !isInDropdown && !isCheckbox) { if (!keyHeldDown) { @@ -454,11 +431,9 @@ event.preventDefault(); }, blur: function (event) { - var - $field = $(this), - validationRules = module.get.validation($field) || {}, - identifier = module.get.identifier(validationRules, $field) - ; + var $field = $(this); + var validationRules = module.get.validation($field) || {}; + var identifier = module.get.identifier(validationRules, $field); if (settings.on === 'blur' || (!$module.hasClass(className.initial) && settings.revalidate)) { module.debug('Revalidating field', $field, validationRules); module.validate.field(validationRules, identifier); @@ -468,11 +443,9 @@ } }, change: function (event) { - var - $field = $(this), - validationRules = module.get.validation($field) || {}, - identifier = module.get.identifier(validationRules, $field) - ; + var $field = $(this); + var validationRules = module.get.validation($field) || {}; + var identifier = module.get.identifier(validationRules, $field); if (settings.on === 'change' || (!$module.hasClass(className.initial) && settings.revalidate)) { clearTimeout(module.timer); module.timer = setTimeout(function () { @@ -522,9 +495,7 @@ return ['file', 'checkbox', 'radio', 'hidden'].indexOf(type) >= 0 || $input.is('select') ? 'change' : 'input'; }, fieldsFromShorthand: function (fields) { - var - fullFields = {} - ; + var fullFields = {}; $.each(fields, function (name, rules) { if (!Array.isArray(rules) && typeof rules === 'object') { fullFields[name] = rules; @@ -554,20 +525,18 @@ return validation.identifier || $el.attr('id') || $el.attr('name') || $el.data(metadata.validate); }, prompt: function (rule, field) { - var - ruleName = module.get.ruleName(rule), - ancillary = module.get.ancillaryValue(rule), - $field = module.get.field(field.identifier), - value = $field.val(), - promptCheck = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule, - prompt = String(isFunction(promptCheck) - ? promptCheck.call($field[0], value) - : promptCheck), - requiresValue = prompt.search('{value}') !== -1, - requiresName = prompt.search('{name}') !== -1, - parts, - suffixPrompt - ; + var ruleName = module.get.ruleName(rule); + var ancillary = module.get.ancillaryValue(rule); + var $field = module.get.field(field.identifier); + var value = $field.val(); + var promptCheck = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule; + var prompt = String(isFunction(promptCheck) + ? promptCheck.call($field[0], value) + : promptCheck); + var requiresValue = prompt.search('{value}') !== -1; + var requiresName = prompt.search('{name}') !== -1; + var parts; + var suffixPrompt; if (ancillary && ['integer', 'decimal', 'number', 'size'].indexOf(ruleName) >= 0 && ancillary.indexOf('..') >= 0) { parts = ancillary.split('..', 2); if (!rule.prompt && ruleName !== 'size') { @@ -655,9 +624,7 @@ return strict ? $() : $(''); }, fields: function (fields, strict) { - var - $fields = $() - ; + var $fields = $(); $.each(fields, function (index, name) { $fields = $fields.add(module.get.field(name, strict)); }); @@ -666,20 +633,17 @@ }, fieldLabel: function (identifier, useIdAsFallback) { var $field = typeof identifier === 'string' - ? module.get.field(identifier) - : identifier, - $label = $field.closest(selector.group).find('label:not(:empty)').eq(0) - ; + ? module.get.field(identifier) + : identifier; + var $label = $field.closest(selector.group).find('label:not(:empty)').eq(0); return $label.length === 1 ? $label.text() : $field.prop('placeholder') || (useIdAsFallback ? identifier : settings.text.unspecifiedField); }, validation: function ($field) { - var - fieldValidation, - identifier - ; + var fieldValidation; + var identifier; if (!validation) { return false; } @@ -698,11 +662,9 @@ return fieldValidation || false; }, value: function (field, strict) { - var - fields = [], - results, - resultKeys - ; + var fields = []; + var results; + var resultKeys; fields.push(field); results = module.get.values.call(element, fields, strict); resultKeys = Object.keys(results); @@ -710,26 +672,22 @@ return resultKeys.length > 0 ? results[resultKeys[0]] : undefined; }, values: function (fields, strict) { - var - $fields = Array.isArray(fields) && fields.length > 0 - ? module.get.fields(fields, strict) - : $field, - values = {} - ; + var $fields = Array.isArray(fields) && fields.length > 0 + ? module.get.fields(fields, strict) + : $field; + var values = {}; $fields.each(function (index, field) { - var - $field = $(field), - $calendar = $field.closest(selector.uiCalendar), - name = $field.prop('name') || $field.prop('id'), - value = $field.val(), - isCheckbox = $field.is(selector.checkbox), - isRadio = $field.is(selector.radio), - isMultiple = name.indexOf('[]') !== -1, - isCalendar = $calendar.length > 0 && module.can.useElement('calendar'), - isChecked = isCheckbox - ? $field.is(':checked') - : false - ; + var $field = $(field); + var $calendar = $field.closest(selector.uiCalendar); + var name = $field.prop('name') || $field.prop('id'); + var value = $field.val(); + var isCheckbox = $field.is(selector.checkbox); + var isRadio = $field.is(selector.radio); + var isMultiple = name.indexOf('[]') !== -1; + var isCalendar = $calendar.length > 0 && module.can.useElement('calendar'); + var isChecked = isCheckbox + ? $field.is(':checked') + : false; if (name) { if (isMultiple) { name = name.replace('[]', ''); @@ -883,11 +841,9 @@ rules: [], }; } - var - newValidation = { - rules: [], - } - ; + var newValidation = { + rules: [], + }; if (module.is.shorthandRules(rules)) { rules = Array.isArray(rules) ? rules @@ -918,18 +874,15 @@ if (errors === false) { return; } - var - $field = module.get.field(identifier), - $fieldGroup = $field.closest($group), - $prompt = $fieldGroup.children(selector.prompt), - promptExists = $prompt.length > 0, - canTransition = settings.transition && module.can.useElement('transition') - ; + var $field = module.get.field(identifier); + var $fieldGroup = $field.closest($group); + var $prompt = $fieldGroup.children(selector.prompt); + var promptExists = $prompt.length > 0; + var canTransition = settings.transition && module.can.useElement('transition'); module.verbose('Adding field error state', identifier); if (!internal) { $fieldGroup - .addClass(className.error) - ; + .addClass(className.error); } if (settings.inline) { if (promptExists) { @@ -949,12 +902,10 @@ $prompt.css('display', 'none'); } $prompt - .appendTo($fieldGroup.filter('.' + className.error)) - ; + .appendTo($fieldGroup.filter('.' + className.error)); } $prompt - .html(settings.templates.prompt(errors)) - ; + .html(settings.templates.prompt(errors)); if (!promptExists) { if (canTransition) { module.verbose('Displaying error with css transition', settings.transition); @@ -962,8 +913,7 @@ } else { module.verbose('Displaying error with fallback javascript animation'); $prompt - .fadeIn(settings.duration) - ; + .fadeIn(settings.duration); } } } else { @@ -977,9 +927,8 @@ } module.debug('Adding form error messages', errors); module.set.error(); - var customErrors = [], - tempErrors - ; + var customErrors = []; + var tempErrors; if ($.isPlainObject(errors)) { $.each(Object.keys(errors), function (i, id) { if (module.checkErrors(errors[id], true) !== false) { @@ -1002,8 +951,7 @@ } if (customErrors.length > 0) { $message - .html(settings.templates.error(customErrors)) - ; + .html(settings.templates.error(customErrors)); } }, }, @@ -1021,11 +969,9 @@ module.determine.isDirty(); }, rule: function (field, rule) { - var - rules = Array.isArray(rule) - ? rule - : [rule] - ; + var rules = Array.isArray(rule) + ? rule + : [rule]; if (validation[field] === undefined || !Array.isArray(validation[field].rules)) { return; } @@ -1047,11 +993,9 @@ }); }, field: function (field) { - var - fields = Array.isArray(field) - ? field - : [field] - ; + var fields = Array.isArray(field) + ? field + : [field]; $.each(fields, function (index, field) { module.remove.rule(field); }); @@ -1071,14 +1015,11 @@ module.remove.field(fields); }, prompt: function (identifier) { - var - $field = module.get.field(identifier), - $fieldGroup = $field.closest($group), - $prompt = $fieldGroup.children(selector.prompt) - ; + var $field = module.get.field(identifier); + var $fieldGroup = $field.closest($group); + var $prompt = $fieldGroup.children(selector.prompt); $fieldGroup - .removeClass(className.error) - ; + .removeClass(className.error); if (settings.inline && $prompt.is(':visible')) { module.verbose('Removing prompt for field', identifier); if (settings.transition && module.can.useElement('transition')) { @@ -1089,8 +1030,7 @@ $prompt .fadeOut(settings.duration, function () { $prompt.remove(); - }) - ; + }); } } }, @@ -1100,22 +1040,19 @@ success: function () { $module .removeClass(className.error) - .addClass(className.success) - ; + .addClass(className.success); }, defaults: function () { $field.each(function (index, el) { - var - $el = $(el), - $parent = $el.parent(), - isCheckbox = $el.filter(selector.checkbox).length > 0, - isDropdown = ($parent.is(selector.uiDropdown) || $el.is(selector.uiDropdown)) && module.can.useElement('dropdown'), - $calendar = $el.closest(selector.uiCalendar), - isCalendar = $calendar.length > 0 && module.can.useElement('calendar'), - value = isCheckbox - ? $el.is(':checked') - : $el.val() - ; + var $el = $(el); + var $parent = $el.parent(); + var isCheckbox = $el.filter(selector.checkbox).length > 0; + var isDropdown = ($parent.is(selector.uiDropdown) || $el.is(selector.uiDropdown)) && module.can.useElement('dropdown'); + var $calendar = $el.closest(selector.uiCalendar); + var isCalendar = $calendar.length > 0 && module.can.useElement('calendar'); + var value = isCheckbox + ? $el.is(':checked') + : $el.val(); if (isDropdown) { if ($parent.is(selector.uiDropdown)) { $parent.dropdown('save defaults'); @@ -1132,13 +1069,10 @@ error: function () { $module .removeClass(className.success) - .addClass(className.error) - ; + .addClass(className.error); }, value: function (field, value) { - var - fields = {} - ; + var fields = {}; fields[field] = value; return module.set.values.call(element, fields); @@ -1148,19 +1082,17 @@ return; } $.each(fields, function (key, value) { - var - $field = module.get.field(key), - $element = $field.parent(), - $calendar = $field.closest(selector.uiCalendar), - isFile = $field.is(selector.file), - isMultiple = Array.isArray(value), - isCheckbox = $element.is(selector.uiCheckbox) && module.can.useElement('checkbox'), - isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'), - isRadio = $field.is(selector.radio) && isCheckbox, - isCalendar = $calendar.length > 0 && module.can.useElement('calendar'), - fieldExists = $field.length > 0, - $multipleField - ; + var $field = module.get.field(key); + var $element = $field.parent(); + var $calendar = $field.closest(selector.uiCalendar); + var isFile = $field.is(selector.file); + var isMultiple = Array.isArray(value); + var isCheckbox = $element.is(selector.uiCheckbox) && module.can.useElement('checkbox'); + var isDropdown = $element.is(selector.uiDropdown) && module.can.useElement('dropdown'); + var isRadio = $field.is(selector.radio) && isCheckbox; + var isCalendar = $calendar.length > 0 && module.can.useElement('calendar'); + var fieldExists = $field.length > 0; + var $multipleField; if (fieldExists) { if (isMultiple && isCheckbox) { module.verbose('Selecting multiple', value, $field); @@ -1176,8 +1108,7 @@ module.verbose('Selecting radio value', value, $field); $field.filter('[value="' + value + '"]') .parent(selector.uiCheckbox) - .checkbox('check') - ; + .checkbox('check'); } else if (isCheckbox) { module.verbose('Setting checkbox value', value, $element); if (value === true || value === 1 || value === 'on') { @@ -1239,20 +1170,18 @@ }); } $field.each(function (_index, el) { - var - $el = $(el), - $elGroup = $el.closest($group), - isCheckbox = $el.filter(selector.checkbox).length > 0, - isRequired = $el.prop('required') || $elGroup.hasClass(className.required) || $elGroup.parent().hasClass(className.required), - isDisabled = $el.is(':disabled') || $elGroup.hasClass(className.disabled) || $elGroup.parent().hasClass(className.disabled), - validation = module.get.validation($el), - hasNotEmptyRule = validation - ? $.grep(validation.rules, function (rule) { - return ['notEmpty', 'checked', 'empty'].indexOf(rule.type) >= 0; - }).length > 0 - : false, - identifier = module.get.identifier(validation, $el) - ; + var $el = $(el); + var $elGroup = $el.closest($group); + var isCheckbox = $el.filter(selector.checkbox).length > 0; + var isRequired = $el.prop('required') || $elGroup.hasClass(className.required) || $elGroup.parent().hasClass(className.required); + var isDisabled = $el.is(':disabled') || $elGroup.hasClass(className.disabled) || $elGroup.parent().hasClass(className.disabled); + var validation = module.get.validation($el); + var hasNotEmptyRule = validation + ? $.grep(validation.rules, function (rule) { + return ['notEmpty', 'checked', 'empty'].indexOf(rule.type) >= 0; + }).length > 0 + : false; + var identifier = module.get.identifier(validation, $el); if (isRequired && !isDisabled && !hasNotEmptyRule && identifier !== undefined) { if (isCheckbox) { module.verbose("Adding 'checked' rule on field", identifier); @@ -1308,10 +1237,8 @@ event.stopImmediatePropagation(); } if (settings.errorFocus && ignoreCallbacks !== true) { - var - $focusElement, - hasTabIndex = true - ; + var $focusElement; + var hasTabIndex = true; if (typeof settings.errorFocus === 'string') { $focusElement = $(document).find(settings.errorFocus); hasTabIndex = $focusElement.is('[tabindex]'); @@ -1349,20 +1276,18 @@ return true; } - var - identifier = field.identifier || fieldName, - $field = module.get.field(identifier), - $fieldGroup = $field.closest($group), - $dependsField = field.depends - ? module.get.field(field.depends) - : false, - fieldValid = true, - fieldErrors = [], - isDisabled = $field.filter(':not(:disabled)').length === 0 || $fieldGroup.hasClass(className.disabled) || $fieldGroup.parent().hasClass(className.disabled), - validationMessage = $field[0].validationMessage, - noNativeValidation = field.noNativeValidation || settings.noNativeValidation || $field.filter('[formnovalidate],[novalidate]').length > 0 || $module.filter('[novalidate]').length > 0, - errorLimit - ; + var identifier = field.identifier || fieldName; + var $field = module.get.field(identifier); + var $fieldGroup = $field.closest($group); + var $dependsField = field.depends + ? module.get.field(field.depends) + : false; + var fieldValid = true; + var fieldErrors = []; + var isDisabled = $field.filter(':not(:disabled)').length === 0 || $fieldGroup.hasClass(className.disabled) || $fieldGroup.parent().hasClass(className.disabled); + var validationMessage = $field[0].validationMessage; + var noNativeValidation = field.noNativeValidation || settings.noNativeValidation || $field.filter('[formnovalidate],[novalidate]').length > 0 || $module.filter('[novalidate]').length > 0; + var errorLimit; if (!field.identifier) { module.debug('Using field name as identifier', identifier); field.identifier = identifier; @@ -1434,25 +1359,23 @@ // takes validation rule and returns whether field passes rule rule: function (field, rule, internal) { - var - $field = module.get.field(field.identifier), - ancillary = module.get.ancillaryValue(rule), - ruleName = module.get.ruleName(rule), - ruleFunction = settings.rules[ruleName], - invalidFields = [], - isCheckbox = $field.is(selector.checkbox), - isValid = function (field) { - var value = isCheckbox ? $(field).filter(':checked').val() : $(field).val(); - // cast to string avoiding encoding special values - value = value === undefined || value === '' || value === null - ? '' - : ((settings.shouldTrim && rule.shouldTrim !== false) || rule.shouldTrim - ? String(value + '').trim() - : String(value + '')); - - return ruleFunction.call(field, value, ancillary, module); - } - ; + var $field = module.get.field(field.identifier); + var ancillary = module.get.ancillaryValue(rule); + var ruleName = module.get.ruleName(rule); + var ruleFunction = settings.rules[ruleName]; + var invalidFields = []; + var isCheckbox = $field.is(selector.checkbox); + var isValid = function (field) { + var value = isCheckbox ? $(field).filter(':checked').val() : $(field).val(); + // cast to string avoiding encoding special values + value = value === undefined || value === '' || value === null + ? '' + : ((settings.shouldTrim && rule.shouldTrim !== false) || rule.shouldTrim + ? String(value + '').trim() + : String(value + '')); + + return ruleFunction.call(field, value, ancillary, module); + }; if (!isFunction(ruleFunction)) { module.error(error.noRule, ruleName); @@ -1526,11 +1449,9 @@ }, performance: { log: function (message) { - var - currentTime, - executionTime, - previousTime - ; + var currentTime; + var executionTime; + var previousTime; if (settings.performance) { currentTime = Date.now(); previousTime = time || currentTime; @@ -1549,10 +1470,8 @@ }, 500); }, display: function () { - var - title = settings.name + ':', - totalTime = 0 - ; + var title = settings.name + ':'; + var totalTime = 0; time = false; clearTimeout(module.performance.timer); $.each(performance, function (index, data) { @@ -1577,12 +1496,10 @@ }, }, invoke: function (query, passedArguments, context) { - var - object = instance, - maxDepth, - found, - response - ; + var object = instance; + var maxDepth; + var found; + var response; passedArguments = passedArguments || queryArguments; context = context || element; if (typeof query === 'string' && object !== undefined) { @@ -1774,9 +1691,7 @@ // template that produces error message error: function (errors) { - var - html = '