?
Path : /home/admin/public_html/old/media/system/js/ |
Current File : /home/admin/public_html/old/media/system/js/validate-uncompressed.js |
/** * @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ /** * Unobtrusive Form Validation library * * Inspired by: Chris Campbell <www.particletree.com> * * @since 1.5 */ var JFormValidator = function() { "use strict"; var handlers, inputEmail, custom, setHandler = function(name, fn, en) { en = (en === '') ? true : en; handlers[name] = { enabled : en, exec : fn }; }, findLabel = function(id, form){ var $label, $form = jQuery(form); if (!id) { return false; } $label = $form.find('#' + id + '-lbl'); if ($label.length) { return $label; } $label = $form.find('label[for="' + id + '"]'); if ($label.length) { return $label; } return false; }, handleResponse = function(state, $el) { // Get a label var $label = $el.data('label'); if ($label === undefined) { $label = findLabel($el.attr('id'), $el.get(0).form); $el.data('label', $label); } // Set the element and its label (if exists) invalid state if (state === false) { $el.addClass('invalid').attr('aria-invalid', 'true'); if ($label) { $label.addClass('invalid').attr('aria-invalid', 'true'); } } else { $el.removeClass('invalid').attr('aria-invalid', 'false'); if ($label) { $label.removeClass('invalid').attr('aria-invalid', 'false'); } } }, validate = function(el) { var $el = jQuery(el), tagName, handler; // Ignore the element if its currently disabled, because are not submitted for the http-request. For those case return always true. if ($el.attr('disabled')) { handleResponse(true, $el); return true; } // If the field is required make sure it has a value if ($el.attr('required') || $el.hasClass('required')) { tagName = $el.prop("tagName").toLowerCase(); if (tagName === 'fieldset' && ($el.hasClass('radio') || $el.hasClass('checkboxes'))) { if (!$el.find('input:checked').length){ handleResponse(false, $el); return false; } //If element has class placeholder that means it is empty. } else if (!$el.val() || $el.hasClass('placeholder') || ($el.attr('type') === 'checkbox' && !$el.is(':checked'))) { handleResponse(false, $el); return false; } } // Only validate the field if the validate class is set handler = ($el.attr('class') && $el.attr('class').match(/validate-([a-zA-Z0-9\_\-]+)/)) ? $el.attr('class').match(/validate-([a-zA-Z0-9\_\-]+)/)[1] : ""; if (handler === '') { handleResponse(true, $el); return true; } // Check the additional validation types if ((handler) && (handler !== 'none') && (handlers[handler]) && $el.val()) { // Execute the validation handler and return result if (handlers[handler].exec($el.val(), $el) !== true) { handleResponse(false, $el); return false; } } // Return validation state handleResponse(true, $el); return true; }, isValid = function(form) { var fields, valid = true, message, error, label, invalid = [], i, l; // Validate form fields fields = jQuery(form).find('input, textarea, select, fieldset'); for (i = 0, l = fields.length; i < l; i++) { if (validate(fields[i]) === false) { valid = false; invalid.push(fields[i]); } } // Run custom form validators if present jQuery.each(custom, function(key, validator) { if (validator.exec() !== true) { valid = false; } }); if (!valid && invalid.length > 0) { message = Joomla.JText._('JLIB_FORM_FIELD_INVALID'); error = {"error": []}; for (i = invalid.length - 1; i >= 0; i--) { label = jQuery(invalid[i]).data("label"); if (label) { error.error.push(message + label.text().replace("*", "")); } } Joomla.renderMessages(error); } return valid; }, attachToForm = function(form) { var inputFields = [], elements, $form = jQuery(form); // Iterate through the form object and attach the validate method to all input fields. elements = $form.find('input, textarea, select, fieldset, button'); for (var i = 0, l = elements.length; i < l; i++) { var $el = jQuery(elements[i]), tagName = $el.prop("tagName").toLowerCase(); // Attach isValid method to submit button if ((tagName === 'input' || tagName === 'button') && ($el.attr('type') === 'submit' || $el.attr('type') === 'image')) { if ($el.hasClass('validate')) { $el.on('click', function() { return isValid(form); }); } } // Attach validate method only to fields else if (tagName !== 'button' && !(tagName === 'input' && $el.attr('type') === 'button')) { if ($el.hasClass('required')) { $el.attr('aria-required', 'true').attr('required', 'required'); } if (tagName !== 'fieldset') { $el.on('blur', function() { return validate(this); }); if ($el.hasClass('validate-email') && inputEmail) { $el.get(0).type = 'email'; } } inputFields.push($el); } } $form.data('inputfields', inputFields); }, initialize = function() { handlers = {}; custom = custom || {}; inputEmail = (function() { var input = document.createElement("input"); input.setAttribute("type", "email"); return input.type !== "text"; })(); // Default handlers setHandler('username', function(value, element) { var regex = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&]", "i"); return !regex.test(value); }); setHandler('password', function(value, element) { var regex = /^\S[\S ]{2,98}\S$/; return regex.test(value); }); setHandler('numeric', function(value, element) { var regex = /^(\d|-)?(\d|,)*\.?\d*$/; return regex.test(value); }); setHandler('email', function(value, element) { value = punycode.toASCII(value); var regex = /^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; return regex.test(value); }); // Attach to forms with class 'form-validate' var forms = jQuery('form.form-validate'); for (var i = 0, l = forms.length; i < l; i++) { attachToForm(forms[i]); } }; // Initialize handlers and attach validation to form initialize(); return { isValid : isValid, validate : validate, setHandler : setHandler, attachToForm : attachToForm, custom: custom }; }; document.formvalidator = null; jQuery(function() { document.formvalidator = new JFormValidator(); });