assets/js/jqBootstrapValidation.js in jekyll-agency-1.1.0 vs assets/js/jqBootstrapValidation.js in jekyll-agency-1.2.0

- old
+ new

@@ -6,12 +6,11 @@ * License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file * * http://ReactiveRaven.github.com/jqBootstrapValidation/ */ -(function($) { - +(function ($) { var createdElements = []; var defaults = { options: { prependExistingHelpBlock: false, @@ -19,44 +18,48 @@ preventSubmit: true, // stop the form submit event from firing if validation fails submitError: false, // function called if there is an error when trying to submit submitSuccess: false, // function called just before a successful submit event is sent to the server semanticallyStrict: false, // set to true to tidy up generated HTML output autoAdd: { - helpBlocks: true + helpBlocks: true, }, - filter: function() { + filter: function () { // return $(this).is(":visible"); // only validate elements you can see return true; // validate everything - } + }, }, methods: { - init: function(options) { - + init: function (options) { var settings = $.extend(true, {}, defaults); settings.options = $.extend(true, settings.options, options); var $siblingElements = this; var uniqueForms = $.unique( - $siblingElements.map(function() { - return $(this).parents("form")[0]; - }).toArray() + $siblingElements + .map(function () { + return $(this).parents("form")[0]; + }) + .toArray() ); - $(uniqueForms).bind("submit", function(e) { + $(uniqueForms).bind("submit", function (e) { var $form = $(this); var warningsFound = 0; - var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter); - $inputs.trigger("submit.validation").trigger("validationLostFocus.validation"); + var $inputs = $form + .find("input,textarea,select") + .not("[type=submit],[type=image]") + .filter(settings.options.filter); + $inputs + .trigger("submit.validation") + .trigger("validationLostFocus.validation"); - $inputs.each(function(i, el) { + $inputs.each(function (i, el) { var $this = $(el), $controlGroup = $this.parents(".form-group").first(); - if ( - $controlGroup.hasClass("warning") - ) { + if ($controlGroup.hasClass("warning")) { $controlGroup.removeClass("warning").addClass("error"); warningsFound++; } }); @@ -66,33 +69,40 @@ if (settings.options.preventSubmit) { e.preventDefault(); } $form.addClass("error"); if ($.isFunction(settings.options.submitError)) { - settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true)); + settings.options.submitError( + $form, + e, + $inputs.jqBootstrapValidation("collectErrors", true) + ); } } else { $form.removeClass("error"); if ($.isFunction(settings.options.submitSuccess)) { settings.options.submitSuccess($form, e); } } }); - return this.each(function() { - + return this.each(function () { // Get references to everything we're interested in var $this = $(this), $controlGroup = $this.parents(".form-group").first(), $helpBlock = $controlGroup.find(".help-block").first(), $form = $this.parents("form").first(), validatorNames = []; // create message container if not exists - if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) { + if ( + !$helpBlock.length && + settings.options.autoAdd && + settings.options.autoAdd.helpBlocks + ) { $helpBlock = $('<div class="help-block" />'); - $controlGroup.find('.controls').append($helpBlock); + $controlGroup.find(".controls").append($helpBlock); createdElements.push($helpBlock[0]); } // ============================================================= // SNIFF HTML FOR VALIDATORS @@ -104,88 +114,129 @@ var message = ""; // --------------------------------------------------------- // PATTERN // --------------------------------------------------------- if ($this.attr("pattern") !== undefined) { - message = "Not in the expected format<!-- data-validation-pattern-message to override -->"; + message = + "Not in the expected format<!-- data-validation-pattern-message to override -->"; if ($this.data("validationPatternMessage")) { message = $this.data("validationPatternMessage"); } $this.data("validationPatternMessage", message); $this.data("validationPatternRegex", $this.attr("pattern")); } // --------------------------------------------------------- // MAX // --------------------------------------------------------- - if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) { - var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax")); - message = "Too high: Maximum of '" + max + "'<!-- data-validation-max-message to override -->"; + if ( + $this.attr("max") !== undefined || + $this.attr("aria-valuemax") !== undefined + ) { + var max = + $this.attr("max") !== undefined + ? $this.attr("max") + : $this.attr("aria-valuemax"); + message = + "Too high: Maximum of '" + + max + + "'<!-- data-validation-max-message to override -->"; if ($this.data("validationMaxMessage")) { message = $this.data("validationMaxMessage"); } $this.data("validationMaxMessage", message); $this.data("validationMaxMax", max); } // --------------------------------------------------------- // MIN // --------------------------------------------------------- - if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) { - var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin")); - message = "Too low: Minimum of '" + min + "'<!-- data-validation-min-message to override -->"; + if ( + $this.attr("min") !== undefined || + $this.attr("aria-valuemin") !== undefined + ) { + var min = + $this.attr("min") !== undefined + ? $this.attr("min") + : $this.attr("aria-valuemin"); + message = + "Too low: Minimum of '" + + min + + "'<!-- data-validation-min-message to override -->"; if ($this.data("validationMinMessage")) { message = $this.data("validationMinMessage"); } $this.data("validationMinMessage", message); $this.data("validationMinMin", min); } // --------------------------------------------------------- // MAXLENGTH // --------------------------------------------------------- if ($this.attr("maxlength") !== undefined) { - message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters<!-- data-validation-maxlength-message to override -->"; + message = + "Too long: Maximum of '" + + $this.attr("maxlength") + + "' characters<!-- data-validation-maxlength-message to override -->"; if ($this.data("validationMaxlengthMessage")) { message = $this.data("validationMaxlengthMessage"); } $this.data("validationMaxlengthMessage", message); - $this.data("validationMaxlengthMaxlength", $this.attr("maxlength")); + $this.data( + "validationMaxlengthMaxlength", + $this.attr("maxlength") + ); } // --------------------------------------------------------- // MINLENGTH // --------------------------------------------------------- if ($this.attr("minlength") !== undefined) { - message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters<!-- data-validation-minlength-message to override -->"; + message = + "Too short: Minimum of '" + + $this.attr("minlength") + + "' characters<!-- data-validation-minlength-message to override -->"; if ($this.data("validationMinlengthMessage")) { message = $this.data("validationMinlengthMessage"); } $this.data("validationMinlengthMessage", message); - $this.data("validationMinlengthMinlength", $this.attr("minlength")); + $this.data( + "validationMinlengthMinlength", + $this.attr("minlength") + ); } // --------------------------------------------------------- // REQUIRED // --------------------------------------------------------- - if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) { + if ( + $this.attr("required") !== undefined || + $this.attr("aria-required") !== undefined + ) { message = settings.builtInValidators.required.message; if ($this.data("validationRequiredMessage")) { message = $this.data("validationRequiredMessage"); } $this.data("validationRequiredMessage", message); } // --------------------------------------------------------- // NUMBER // --------------------------------------------------------- - if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") { + if ( + $this.attr("type") !== undefined && + $this.attr("type").toLowerCase() === "number" + ) { message = settings.builtInValidators.number.message; if ($this.data("validationNumberMessage")) { message = $this.data("validationNumberMessage"); } $this.data("validationNumberMessage", message); } // --------------------------------------------------------- // EMAIL // --------------------------------------------------------- - if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") { - message = "Not a valid email address<!-- data-validator-validemail-message to override -->"; + if ( + $this.attr("type") !== undefined && + $this.attr("type").toLowerCase() === "email" + ) { + message = + "Not a valid email address<!-- data-validator-validemail-message to override -->"; if ($this.data("validationValidemailMessage")) { message = $this.data("validationValidemailMessage"); } else if ($this.data("validationEmailMessage")) { message = $this.data("validationEmailMessage"); } @@ -193,27 +244,39 @@ } // --------------------------------------------------------- // MINCHECKED // --------------------------------------------------------- if ($this.attr("minchecked") !== undefined) { - message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required<!-- data-validation-minchecked-message to override -->"; + message = + "Not enough options checked; Minimum of '" + + $this.attr("minchecked") + + "' required<!-- data-validation-minchecked-message to override -->"; if ($this.data("validationMincheckedMessage")) { message = $this.data("validationMincheckedMessage"); } $this.data("validationMincheckedMessage", message); - $this.data("validationMincheckedMinchecked", $this.attr("minchecked")); + $this.data( + "validationMincheckedMinchecked", + $this.attr("minchecked") + ); } // --------------------------------------------------------- // MAXCHECKED // --------------------------------------------------------- if ($this.attr("maxchecked") !== undefined) { - message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required<!-- data-validation-maxchecked-message to override -->"; + message = + "Too many options checked; Maximum of '" + + $this.attr("maxchecked") + + "' required<!-- data-validation-maxchecked-message to override -->"; if ($this.data("validationMaxcheckedMessage")) { message = $this.data("validationMaxcheckedMessage"); } $this.data("validationMaxcheckedMessage", message); - $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked")); + $this.data( + "validationMaxcheckedMaxchecked", + $this.attr("maxchecked") + ); } } // ============================================================= // COLLECT VALIDATOR NAMES @@ -223,11 +286,11 @@ if ($this.data("validation") !== undefined) { validatorNames = $this.data("validation").split(","); } // Get extra ones defined on the element's data attributes - $.each($this.data(), function(i, el) { + $.each($this.data(), function (i, el) { var parts = i.replace(/([A-Z])/g, ",$1").split(","); if (parts[0] === "validation" && parts[1]) { validatorNames.push(parts[1]); } }); @@ -240,107 +303,129 @@ var newValidatorNamesToInspect = []; do // repeatedly expand 'shortcut' validators into their real validators { // Uppercase only the first letter of each name - $.each(validatorNames, function(i, el) { + $.each(validatorNames, function (i, el) { validatorNames[i] = formatValidatorName(el); }); // Remove duplicate validator names validatorNames = $.unique(validatorNames); // Pull out the new validator names from each shortcut newValidatorNamesToInspect = []; - $.each(validatorNamesToInspect, function(i, el) { + $.each(validatorNamesToInspect, function (i, el) { if ($this.data("validation" + el + "Shortcut") !== undefined) { // Are these custom validators? // Pull them out! - $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) { - newValidatorNamesToInspect.push(el2); - }); + $.each( + $this.data("validation" + el + "Shortcut").split(","), + function (i2, el2) { + newValidatorNamesToInspect.push(el2); + } + ); } else if (settings.builtInValidators[el.toLowerCase()]) { // Is this a recognised built-in? // Pull it out! var validator = settings.builtInValidators[el.toLowerCase()]; if (validator.type.toLowerCase() === "shortcut") { - $.each(validator.shortcut.split(","), function(i, el) { + $.each(validator.shortcut.split(","), function (i, el) { el = formatValidatorName(el); newValidatorNamesToInspect.push(el); validatorNames.push(el); }); } } }); validatorNamesToInspect = newValidatorNamesToInspect; + } while (validatorNamesToInspect.length > 0); - } while (validatorNamesToInspect.length > 0) - // ============================================================= // SET UP VALIDATOR ARRAYS // ============================================================= var validators = {}; - $.each(validatorNames, function(i, el) { + $.each(validatorNames, function (i, el) { // Set up the 'override' message var message = $this.data("validation" + el + "Message"); - var hasOverrideMessage = (message !== undefined); + var hasOverrideMessage = message !== undefined; var foundValidator = false; - message = - ( - message ? - message : - "'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->" - ); + message = message + ? message + : "'" + + el + + "' validation failed <!-- Add attribute 'data-validation-" + + el.toLowerCase() + + "-message' to input to change this message -->"; $.each( settings.validatorTypes, - function(validatorType, validatorTemplate) { + function (validatorType, validatorTemplate) { if (validators[validatorType] === undefined) { validators[validatorType] = []; } - if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) { + if ( + !foundValidator && + $this.data( + "validation" + + el + + formatValidatorName(validatorTemplate.name) + ) !== undefined + ) { validators[validatorType].push( $.extend( - true, { + true, + { name: formatValidatorName(validatorTemplate.name), - message: message + message: message, }, validatorTemplate.init($this, el) ) ); foundValidator = true; } } ); - if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) { - - var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]); + if ( + !foundValidator && + settings.builtInValidators[el.toLowerCase()] + ) { + var validator = $.extend( + true, + {}, + settings.builtInValidators[el.toLowerCase()] + ); if (hasOverrideMessage) { validator.message = message; } var validatorType = validator.type.toLowerCase(); if (validatorType === "shortcut") { foundValidator = true; } else { $.each( settings.validatorTypes, - function(validatorTemplateType, validatorTemplate) { + function (validatorTemplateType, validatorTemplate) { if (validators[validatorTemplateType] === undefined) { validators[validatorTemplateType] = []; } - if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) { - $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]); + if ( + !foundValidator && + validatorType === validatorTemplateType.toLowerCase() + ) { + $this.data( + "validation" + + el + + formatValidatorName(validatorTemplate.name), + validator[validatorTemplate.name.toLowerCase()] + ); validators[validatorType].push( - $.extend( - validator, - validatorTemplate.init($this, el) - ) + $.extend(validator, validatorTemplate.init($this, el)) ); foundValidator = true; } } ); @@ -356,136 +441,155 @@ // STORE FALLBACK VALUES // ============================================================= $helpBlock.data( "original-contents", - ( - $helpBlock.data("original-contents") ? - $helpBlock.data("original-contents") : - $helpBlock.html() - ) + $helpBlock.data("original-contents") + ? $helpBlock.data("original-contents") + : $helpBlock.html() ); $helpBlock.data( "original-role", - ( - $helpBlock.data("original-role") ? - $helpBlock.data("original-role") : - $helpBlock.attr("role") - ) + $helpBlock.data("original-role") + ? $helpBlock.data("original-role") + : $helpBlock.attr("role") ); $controlGroup.data( "original-classes", - ( - $controlGroup.data("original-clases") ? - $controlGroup.data("original-classes") : - $controlGroup.attr("class") - ) + $controlGroup.data("original-clases") + ? $controlGroup.data("original-classes") + : $controlGroup.attr("class") ); $this.data( "original-aria-invalid", - ( - $this.data("original-aria-invalid") ? - $this.data("original-aria-invalid") : - $this.attr("aria-invalid") - ) + $this.data("original-aria-invalid") + ? $this.data("original-aria-invalid") + : $this.attr("aria-invalid") ); // ============================================================= // VALIDATION // ============================================================= - $this.bind( - "validation.validation", - function(event, params) { + $this.bind("validation.validation", function (event, params) { + var value = getValue($this); - var value = getValue($this); + // Get a list of the errors to apply + var errorsFound = []; - // Get a list of the errors to apply - var errorsFound = []; + $.each(validators, function (validatorType, validatorTypeArray) { + if ( + value || + value.length || + (params && params.includeEmpty) || + (!!settings.validatorTypes[validatorType].blockSubmit && + params && + !!params.submitting) + ) { + $.each(validatorTypeArray, function (i, validator) { + if ( + settings.validatorTypes[validatorType].validate( + $this, + value, + validator + ) + ) { + errorsFound.push(validator.message); + } + }); + } + }); - $.each(validators, function(validatorType, validatorTypeArray) { - if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) { - $.each(validatorTypeArray, function(i, validator) { - if (settings.validatorTypes[validatorType].validate($this, value, validator)) { - errorsFound.push(validator.message); - } - }); - } - }); + return errorsFound; + }); - return errorsFound; - } - ); + $this.bind("getValidators.validation", function () { + return validators; + }); - $this.bind( - "getValidators.validation", - function() { - return validators; - } - ); - // ============================================================= // WATCH FOR CHANGES // ============================================================= + $this.bind("submit.validation", function () { + return $this.triggerHandler("change.validation", { + submitting: true, + }); + }); $this.bind( - "submit.validation", - function() { - return $this.triggerHandler("change.validation", { - submitting: true - }); - } - ); - $this.bind( [ "keyup", "focus", "blur", "click", "keydown", "keypress", - "change" + "change", ].join(".validation ") + ".validation", - function(e, params) { - + function (e, params) { var value = getValue($this); var errorsFound = []; - $controlGroup.find("input,textarea,select").each(function(i, el) { - var oldCount = errorsFound.length; - $.each($(el).triggerHandler("validation.validation", params), function(j, message) { - errorsFound.push(message); + $controlGroup + .find("input,textarea,select") + .each(function (i, el) { + var oldCount = errorsFound.length; + $.each( + $(el).triggerHandler("validation.validation", params), + function (j, message) { + errorsFound.push(message); + } + ); + if (errorsFound.length > oldCount) { + $(el).attr("aria-invalid", "true"); + } else { + var original = $this.data("original-aria-invalid"); + $(el).attr( + "aria-invalid", + original !== undefined ? original : false + ); + } }); - if (errorsFound.length > oldCount) { - $(el).attr("aria-invalid", "true"); - } else { - var original = $this.data("original-aria-invalid"); - $(el).attr("aria-invalid", (original !== undefined ? original : false)); - } - }); - $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation"); + $form + .find("input,select,textarea") + .not($this) + .not('[name="' + $this.attr("name") + '"]') + .trigger("validationLostFocus.validation"); errorsFound = $.unique(errorsFound.sort()); // Were there any errors? if (errorsFound.length) { // Better flag it up as a warning. $controlGroup.removeClass("success error").addClass("warning"); // How many errors did we find? - if (settings.options.semanticallyStrict && errorsFound.length === 1) { + if ( + settings.options.semanticallyStrict && + errorsFound.length === 1 + ) { // Only one? Being strict? Just output it. - $helpBlock.html(errorsFound[0] + - (settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "")); + $helpBlock.html( + errorsFound[0] + + (settings.options.prependExistingHelpBlock + ? $helpBlock.data("original-contents") + : "") + ); } else { // Multiple? Being sloppy? Glue them together into an UL. - $helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" + - (settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "")); + $helpBlock.html( + '<ul role="alert"><li>' + + errorsFound.join("</li><li>") + + "</li></ul>" + + (settings.options.prependExistingHelpBlock + ? $helpBlock.data("original-contents") + : "") + ); } } else { $controlGroup.removeClass("warning error success"); if (value.length > 0) { $controlGroup.addClass("success"); @@ -496,96 +600,88 @@ if (e.type === "blur") { $controlGroup.removeClass("success"); } } ); - $this.bind("validationLostFocus.validation", function() { + $this.bind("validationLostFocus.validation", function () { $controlGroup.removeClass("success"); }); }); }, - destroy: function() { + destroy: function () { + return this.each(function () { + var $this = $(this), + $controlGroup = $this.parents(".form-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(); - return this.each( - function() { - - var - $this = $(this), - $controlGroup = $this.parents(".form-group").first(), - $helpBlock = $controlGroup.find(".help-block").first(); - - // remove our events - $this.unbind('.validation'); // events are namespaced. - // reset help text - $helpBlock.html($helpBlock.data("original-contents")); - // reset classes - $controlGroup.attr("class", $controlGroup.data("original-classes")); - // reset aria - $this.attr("aria-invalid", $this.data("original-aria-invalid")); - // reset role - $helpBlock.attr("role", $this.data("original-role")); - // remove all elements we created - if (createdElements.indexOf($helpBlock[0]) > -1) { - $helpBlock.remove(); - } - + // remove our events + $this.unbind(".validation"); // events are namespaced. + // reset help text + $helpBlock.html($helpBlock.data("original-contents")); + // reset classes + $controlGroup.attr("class", $controlGroup.data("original-classes")); + // reset aria + $this.attr("aria-invalid", $this.data("original-aria-invalid")); + // reset role + $helpBlock.attr("role", $this.data("original-role")); + // remove all elements we created + if (createdElements.indexOf($helpBlock[0]) > -1) { + $helpBlock.remove(); } - ); - + }); }, - collectErrors: function(includeEmpty) { - + collectErrors: function (includeEmpty) { var errorMessages = {}; - this.each(function(i, el) { + this.each(function (i, el) { var $el = $(el); var name = $el.attr("name"); var errors = $el.triggerHandler("validation.validation", { - includeEmpty: true + includeEmpty: true, }); errorMessages[name] = $.extend(true, errors, errorMessages[name]); }); - $.each(errorMessages, function(i, el) { + $.each(errorMessages, function (i, el) { if (el.length === 0) { delete errorMessages[i]; } }); return errorMessages; - }, - hasErrors: function() { - + hasErrors: function () { var errorMessages = []; - this.each(function(i, el) { + this.each(function (i, el) { errorMessages = errorMessages.concat( - $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", { - submitting: true - }) : [] + $(el).triggerHandler("getValidators.validation") + ? $(el).triggerHandler("validation.validation", { + submitting: true, + }) + : [] ); }); - return (errorMessages.length > 0); + return errorMessages.length > 0; }, - override: function(newDefaults) { + override: function (newDefaults) { defaults = $.extend(true, defaults, newDefaults); - } + }, }, validatorTypes: { callback: { name: "callback", - init: function($this, name) { + init: function ($this, name) { return { validatorName: name, callback: $this.data("validation" + name + "Callback"), lastValue: $this.val(), lastValid: true, - lastFinished: true + lastFinished: true, }; }, - validate: function($this, value, validator) { + validate: function ($this, value, validator) { if (validator.lastValue === value && validator.lastFinished) { return !validator.lastValid; } if (validator.lastFinished === true) { @@ -598,44 +694,49 @@ executeFunctionByName( validator.callback, window, $this, value, - function(data) { + function (data) { if (rrjqbvValidator.lastValue === data.value) { rrjqbvValidator.lastValid = data.valid; if (data.message) { rrjqbvValidator.message = data.message; } rrjqbvValidator.lastFinished = true; - rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message); + rrjqbvThis.data( + "validation" + rrjqbvValidator.validatorName + "Message", + rrjqbvValidator.message + ); // Timeout is set to avoid problems with the events being considered 'already fired' - setTimeout(function() { + setTimeout(function () { rrjqbvThis.trigger("change.validation"); }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst } } ); } return false; - - } + }, }, ajax: { name: "ajax", - init: function($this, name) { + init: function ($this, name) { return { validatorName: name, url: $this.data("validation" + name + "Ajax"), lastValue: $this.val(), lastValid: true, - lastFinished: true + lastFinished: true, }; }, - validate: function($this, value, validator) { - if ("" + validator.lastValue === "" + value && validator.lastFinished === true) { + validate: function ($this, value, validator) { + if ( + "" + validator.lastValue === "" + value && + validator.lastFinished === true + ) { return validator.lastValid === false; } if (validator.lastFinished === true) { validator.lastValue = value; @@ -643,258 +744,309 @@ validator.lastFinished = false; $.ajax({ url: validator.url, data: "value=" + value + "&field=" + $this.attr("name"), dataType: "json", - success: function(data) { + success: function (data) { if ("" + validator.lastValue === "" + data.value) { - validator.lastValid = !!(data.valid); + validator.lastValid = !!data.valid; if (data.message) { validator.message = data.message; } validator.lastFinished = true; - $this.data("validation" + validator.validatorName + "Message", validator.message); + $this.data( + "validation" + validator.validatorName + "Message", + validator.message + ); // Timeout is set to avoid problems with the events being considered 'already fired' - setTimeout(function() { + setTimeout(function () { $this.trigger("change.validation"); }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst } }, - failure: function() { + failure: function () { validator.lastValid = true; validator.message = "ajax call failed"; validator.lastFinished = true; - $this.data("validation" + validator.validatorName + "Message", validator.message); + $this.data( + "validation" + validator.validatorName + "Message", + validator.message + ); // Timeout is set to avoid problems with the events being considered 'already fired' - setTimeout(function() { + setTimeout(function () { $this.trigger("change.validation"); }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst - } + }, }); } return false; - - } + }, }, regex: { name: "regex", - init: function($this, name) { + init: function ($this, name) { return { - regex: regexFromString($this.data("validation" + name + "Regex")) + regex: regexFromString($this.data("validation" + name + "Regex")), }; }, - validate: function($this, value, validator) { - return (!validator.regex.test(value) && !validator.negative) || - (validator.regex.test(value) && validator.negative); - } + validate: function ($this, value, validator) { + return ( + (!validator.regex.test(value) && !validator.negative) || + (validator.regex.test(value) && validator.negative) + ); + }, }, required: { name: "required", - init: function($this, name) { + init: function ($this, name) { return {}; }, - validate: function($this, value, validator) { - return !!(value.length === 0 && !validator.negative) || - !!(value.length > 0 && validator.negative); + validate: function ($this, value, validator) { + return ( + !!(value.length === 0 && !validator.negative) || + !!(value.length > 0 && validator.negative) + ); }, - blockSubmit: true + blockSubmit: true, }, match: { name: "match", - init: function($this, name) { - var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first(); - element.bind("validation.validation", function() { + init: function ($this, name) { + var element = $this + .parents("form") + .first() + .find('[name="' + $this.data("validation" + name + "Match") + '"]') + .first(); + element.bind("validation.validation", function () { $this.trigger("change.validation", { - submitting: true + submitting: true, }); }); return { - "element": element + element: element, }; }, - validate: function($this, value, validator) { - return (value !== validator.element.val() && !validator.negative) || - (value === validator.element.val() && validator.negative); + validate: function ($this, value, validator) { + return ( + (value !== validator.element.val() && !validator.negative) || + (value === validator.element.val() && validator.negative) + ); }, - blockSubmit: true + blockSubmit: true, }, max: { name: "max", - init: function($this, name) { + init: function ($this, name) { return { - max: $this.data("validation" + name + "Max") + max: $this.data("validation" + name + "Max"), }; }, - validate: function($this, value, validator) { - return (parseFloat(value, 10) > parseFloat(validator.max, 10) && !validator.negative) || - (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative); - } + validate: function ($this, value, validator) { + return ( + (parseFloat(value, 10) > parseFloat(validator.max, 10) && + !validator.negative) || + (parseFloat(value, 10) <= parseFloat(validator.max, 10) && + validator.negative) + ); + }, }, min: { name: "min", - init: function($this, name) { + init: function ($this, name) { return { - min: $this.data("validation" + name + "Min") + min: $this.data("validation" + name + "Min"), }; }, - validate: function($this, value, validator) { - return (parseFloat(value) < parseFloat(validator.min) && !validator.negative) || - (parseFloat(value) >= parseFloat(validator.min) && validator.negative); - } + validate: function ($this, value, validator) { + return ( + (parseFloat(value) < parseFloat(validator.min) && + !validator.negative) || + (parseFloat(value) >= parseFloat(validator.min) && + validator.negative) + ); + }, }, maxlength: { name: "maxlength", - init: function($this, name) { + init: function ($this, name) { return { - maxlength: $this.data("validation" + name + "Maxlength") + maxlength: $this.data("validation" + name + "Maxlength"), }; }, - validate: function($this, value, validator) { - return ((value.length > validator.maxlength) && !validator.negative) || - ((value.length <= validator.maxlength) && validator.negative); - } + validate: function ($this, value, validator) { + return ( + (value.length > validator.maxlength && !validator.negative) || + (value.length <= validator.maxlength && validator.negative) + ); + }, }, minlength: { name: "minlength", - init: function($this, name) { + init: function ($this, name) { return { - minlength: $this.data("validation" + name + "Minlength") + minlength: $this.data("validation" + name + "Minlength"), }; }, - validate: function($this, value, validator) { - return ((value.length < validator.minlength) && !validator.negative) || - ((value.length >= validator.minlength) && validator.negative); - } + validate: function ($this, value, validator) { + return ( + (value.length < validator.minlength && !validator.negative) || + (value.length >= validator.minlength && validator.negative) + ); + }, }, maxchecked: { name: "maxchecked", - init: function($this, name) { - var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); - elements.bind("click.validation", function() { + init: function ($this, name) { + var elements = $this + .parents("form") + .first() + .find('[name="' + $this.attr("name") + '"]'); + elements.bind("click.validation", function () { $this.trigger("change.validation", { - includeEmpty: true + includeEmpty: true, }); }); return { maxchecked: $this.data("validation" + name + "Maxchecked"), - elements: elements + elements: elements, }; }, - validate: function($this, value, validator) { - return (validator.elements.filter(":checked").length > validator.maxchecked && !validator.negative) || - (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative); + validate: function ($this, value, validator) { + return ( + (validator.elements.filter(":checked").length > + validator.maxchecked && + !validator.negative) || + (validator.elements.filter(":checked").length <= + validator.maxchecked && + validator.negative) + ); }, - blockSubmit: true + blockSubmit: true, }, minchecked: { name: "minchecked", - init: function($this, name) { - var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); - elements.bind("click.validation", function() { + init: function ($this, name) { + var elements = $this + .parents("form") + .first() + .find('[name="' + $this.attr("name") + '"]'); + elements.bind("click.validation", function () { $this.trigger("change.validation", { - includeEmpty: true + includeEmpty: true, }); }); return { minchecked: $this.data("validation" + name + "Minchecked"), - elements: elements + elements: elements, }; }, - validate: function($this, value, validator) { - return (validator.elements.filter(":checked").length < validator.minchecked && !validator.negative) || - (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative); + validate: function ($this, value, validator) { + return ( + (validator.elements.filter(":checked").length < + validator.minchecked && + !validator.negative) || + (validator.elements.filter(":checked").length >= + validator.minchecked && + validator.negative) + ); }, - blockSubmit: true - } + blockSubmit: true, + }, }, builtInValidators: { email: { name: "Email", type: "shortcut", - shortcut: "validemail" + shortcut: "validemail", }, validemail: { name: "Validemail", type: "regex", - regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}", - message: "Not a valid email address<!-- data-validator-validemail-message to override -->" + regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}", + message: + "Not a valid email address<!-- data-validator-validemail-message to override -->", }, passwordagain: { name: "Passwordagain", type: "match", match: "password", - message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->" + message: + "Does not match the given password<!-- data-validator-paswordagain-message to override -->", }, positive: { name: "Positive", type: "shortcut", - shortcut: "number,positivenumber" + shortcut: "number,positivenumber", }, negative: { name: "Negative", type: "shortcut", - shortcut: "number,negativenumber" + shortcut: "number,negativenumber", }, number: { name: "Number", type: "regex", - regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?", - message: "Must be a number<!-- data-validator-number-message to override -->" + regex: "([+-]?\\d+(\\.\\d*)?([eE][+-]?[0-9]+)?)?", + message: + "Must be a number<!-- data-validator-number-message to override -->", }, integer: { name: "Integer", type: "regex", - regex: "[+-]?\\\d+", - message: "No decimal places allowed<!-- data-validator-integer-message to override -->" + regex: "[+-]?\\d+", + message: + "No decimal places allowed<!-- data-validator-integer-message to override -->", }, positivenumber: { name: "Positivenumber", type: "min", min: 0, - message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->" + message: + "Must be a positive number<!-- data-validator-positivenumber-message to override -->", }, negativenumber: { name: "Negativenumber", type: "max", max: 0, - message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->" + message: + "Must be a negative number<!-- data-validator-negativenumber-message to override -->", }, required: { name: "Required", type: "required", - message: "This is required<!-- data-validator-required-message to override -->" + message: + "This is required<!-- data-validator-required-message to override -->", }, checkone: { name: "Checkone", type: "minchecked", minchecked: 1, - message: "Check at least one option<!-- data-validation-checkone-message to override -->" - } - } + message: + "Check at least one option<!-- data-validation-checkone-message to override -->", + }, + }, }; - var formatValidatorName = function(name) { - return name - .toLowerCase() - .replace( - /(^|\s)([a-z])/g, - function(m, p1, p2) { - return p1 + p2.toUpperCase(); - } - ); + var formatValidatorName = function (name) { + return name.toLowerCase().replace(/(^|\s)([a-z])/g, function (m, p1, p2) { + return p1 + p2.toUpperCase(); + }); }; - var getValue = function($this) { + var getValue = function ($this) { // Extract the value we're talking about var value = $this.val(); var type = $this.attr("type"); if (type === "checkbox") { - value = ($this.is(":checked") ? value : ""); + value = $this.is(":checked") ? value : ""; } if (type === "radio") { - value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : ""); + value = + $('input[name="' + $this.attr("name") + '"]:checked').length > 0 + ? value + : ""; } return value; }; function regexFromString(inputstring) { @@ -905,33 +1057,37 @@ * Thanks to Jason Bunting via StackOverflow.com * * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910 * Short link: http://tinyurl.com/executeFunctionByName **/ - function executeFunctionByName(functionName, context /*, args*/ ) { + function executeFunctionByName(functionName, context /*, args*/) { var args = Array.prototype.slice.call(arguments).splice(2); var namespaces = functionName.split("."); var func = namespaces.pop(); for (var i = 0; i < namespaces.length; i++) { context = context[namespaces[i]]; } return context[func].apply(this, args); } - $.fn.jqBootstrapValidation = function(method) { - + $.fn.jqBootstrapValidation = function (method) { if (defaults.methods[method]) { - return defaults.methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); - } else if (typeof method === 'object' || !method) { + return defaults.methods[method].apply( + this, + Array.prototype.slice.call(arguments, 1) + ); + } else if (typeof method === "object" || !method) { return defaults.methods.init.apply(this, arguments); } else { - $.error('Method ' + method + ' does not exist on jQuery.jqBootstrapValidation'); + $.error( + "Method " + method + " does not exist on jQuery.jqBootstrapValidation" + ); return null; } - }; - $.jqBootstrapValidation = function(options) { - $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this, arguments); + $.jqBootstrapValidation = function (options) { + $(":input") + .not("[type=image],[type=submit]") + .jqBootstrapValidation.apply(this, arguments); }; - })(jQuery);