%PDF- %PDF-
Direktori : /home/riacommer/domains/gasworld.com.my/private_html/admin/vendor/parsleyjs/src/ |
Current File : /home/riacommer/domains/gasworld.com.my/private_html/admin/vendor/parsleyjs/src/parsley.js |
// Parsley.js @@version // http://parsleyjs.org // (c) 20012-2014 Guillaume Potier, Wisembly // Parsley may be freely distributed under the MIT license. define([ // ### Requirements // Handy third party functions 'parsley/utils', // Parsley default configuration 'parsley/defaults', // An abstract class shared by `ParsleyField` and `ParsleyForm` 'parsley/abstract', // A proxy between Parsley and [Validator.js](http://validatorjs.org) 'parsley/validator', // `ParsleyUI` static class. Handle all UI and UX 'parsley/ui', // Handle default javascript config and DOM-API config 'parsley/factory/options', // `ParsleyForm` Class. Handle form validation 'parsley/form', // `ParsleyField` Class. Handle field validation 'parsley/field', // `Multiple` Class. Extend `ParsleyField` to generate `ParsleyFieldMultiple` 'parsley/multiple', // Tiny Parsley Pub / Sub mechanism, used for `ParsleyUI` and Listeners 'parsley/pubsub', // Default en constraints messages 'i18n/en' ], function (ParsleyUtils, ParsleyDefaults, ParsleyAbstract, ParsleyValidator, ParsleyUI, ParsleyOptionsFactory, ParsleyForm, ParsleyField, ParsleyMultiple) { // ### Parsley factory var Parsley = function (element, options, parsleyFormInstance) { this.__class__ = 'Parsley'; this.__version__ = '@@version'; this.__id__ = ParsleyUtils.hash(4); // Parsley must be instanciated with a DOM element or jQuery $element if ('undefined' === typeof element) throw new Error('You must give an element'); if ('undefined' !== typeof parsleyFormInstance && 'ParsleyForm' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a ParsleyForm instance'); return this.init($(element), options, parsleyFormInstance); }; Parsley.prototype = { init: function ($element, options, parsleyFormInstance) { if (!$element.length) throw new Error('You must bind Parsley on an existing element.'); this.$element = $element; // If element have already been binded, returns its saved Parsley instance if (this.$element.data('Parsley')) { var savedparsleyFormInstance = this.$element.data('Parsley'); // If saved instance have been binded without a ParsleyForm parent and there is one given in this call, add it if ('undefined' !== typeof parsleyFormInstance) savedparsleyFormInstance.parent = parsleyFormInstance; return savedparsleyFormInstance; } // Handle 'static' options this.OptionsFactory = new ParsleyOptionsFactory(ParsleyDefaults, ParsleyUtils.get(window, 'ParsleyConfig') || {}, options, this.getNamespace(options)); this.options = this.OptionsFactory.get(this); // A ParsleyForm instance is obviously a `<form>` elem but also every node that is not an input and have `data-parsley-validate` attribute if (this.$element.is('form') || (ParsleyUtils.attr(this.$element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs))) return this.bind('parsleyForm'); // Every other supported element and not excluded element is binded as a `ParsleyField` or `ParsleyFieldMultiple` else if (this.$element.is(this.options.inputs) && !this.$element.is(this.options.excluded)) return this.isMultiple() ? this.handleMultiple(parsleyFormInstance) : this.bind('parsleyField', parsleyFormInstance); return this; }, isMultiple: function () { return (this.$element.is('input[type=radio], input[type=checkbox]') && 'undefined' === typeof this.options.multiple) || (this.$element.is('select') && 'undefined' !== typeof this.$element.attr('multiple')); }, // Multiples fields are a real nightmare :( // Maybe some refacto would be appreciated here.. handleMultiple: function (parsleyFormInstance) { var that = this, name, multiple, parsleyMultipleInstance; // Get parsleyFormInstance options if exist, mixed with element attributes this.options = $.extend(this.options, parsleyFormInstance ? parsleyFormInstance.OptionsFactory.get(parsleyFormInstance) : {}, ParsleyUtils.attr(this.$element, this.options.namespace)); // Handle multiple name if (this.options.multiple) { multiple = this.options.multiple; } else if ('undefined' !== typeof this.$element.attr('name') && this.$element.attr('name').length) { multiple = name = this.$element.attr('name'); } else if ('undefined' !== typeof this.$element.attr('id') && this.$element.attr('id').length) { multiple = this.$element.attr('id'); } // Special select multiple input if (this.$element.is('select') && 'undefined' !== typeof this.$element.attr('multiple')) { return this.bind('parsleyFieldMultiple', parsleyFormInstance, multiple || this.__id__); // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it } else if ('undefined' === typeof multiple) { if (window.console && window.console.warn) window.console.warn('To be binded by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element); return this; } // Remove special chars multiple = multiple.replace(/(:|\.|\[|\]|\$)/g, ''); // Add proper `data-parsley-multiple` to siblings if we had a name if ('undefined' !== typeof name) $('input[name="' + name + '"]').each(function () { if ($(this).is('input[type=radio], input[type=checkbox]')) $(this).attr(that.options.namespace + 'multiple', multiple); }); // Check here if we don't already have a related multiple instance saved if ($('[' + this.options.namespace + 'multiple=' + multiple +']').length) for (var i = 0; i < $('[' + this.options.namespace + 'multiple=' + multiple +']').length; i++) if ('undefined' !== typeof $($('[' + this.options.namespace + 'multiple=' + multiple +']').get(i)).data('Parsley')) { parsleyMultipleInstance = $($('[' + this.options.namespace + 'multiple=' + multiple +']').get(i)).data('Parsley'); if (!this.$element.data('ParsleyFieldMultiple')) { parsleyMultipleInstance.addElement(this.$element); this.$element.attr(this.options.namespace + 'id', parsleyMultipleInstance.__id__); } break; } // Create a secret ParsleyField instance for every multiple field. It would be stored in `data('ParsleyFieldMultiple')` // And would be useful later to access classic `ParsleyField` stuff while being in a `ParsleyFieldMultiple` instance this.bind('parsleyField', parsleyFormInstance, multiple, true); return parsleyMultipleInstance || this.bind('parsleyFieldMultiple', parsleyFormInstance, multiple); }, // Retrieve namespace used for DOM-API getNamespace: function (options) { // `data-parsley-namespace=<namespace>` if ('undefined' !== typeof this.$element.data('parsleyNamespace')) return this.$element.data('parsleyNamespace'); if ('undefined' !== typeof ParsleyUtils.get(options, 'namespace')) return options.namespace; if ('undefined' !== typeof ParsleyUtils.get(window, 'ParsleyConfig.namespace')) return window.ParsleyConfig.namespace; return ParsleyDefaults.namespace; }, // Return proper `ParsleyForm`, `ParsleyField` or `ParsleyFieldMultiple` bind: function (type, parentParsleyFormInstance, multiple, doNotStore) { var parsleyInstance; switch (type) { case 'parsleyForm': parsleyInstance = $.extend( new ParsleyForm(this.$element, this.OptionsFactory), new ParsleyAbstract(), window.ParsleyExtend )._bindFields(); break; case 'parsleyField': parsleyInstance = $.extend( new ParsleyField(this.$element, this.OptionsFactory, parentParsleyFormInstance), new ParsleyAbstract(), window.ParsleyExtend ); break; case 'parsleyFieldMultiple': parsleyInstance = $.extend( new ParsleyField(this.$element, this.OptionsFactory, parentParsleyFormInstance), new ParsleyAbstract(), new ParsleyMultiple(), window.ParsleyExtend )._init(multiple); break; default: throw new Error(type + 'is not a supported Parsley type'); } if ('undefined' !== typeof multiple) ParsleyUtils.setAttr(this.$element, this.options.namespace, 'multiple', multiple); if ('undefined' !== typeof doNotStore) { this.$element.data('ParsleyFieldMultiple', parsleyInstance); return parsleyInstance; } // Store instance if `ParsleyForm`, `ParsleyField` or `ParsleyFieldMultiple` if (new RegExp('ParsleyF', 'i').test(parsleyInstance.__class__)) { // Store for later access the freshly binded instance in DOM element itself using jQuery `data()` this.$element.data('Parsley', parsleyInstance); // Tell the world we got a new ParsleyForm or ParsleyField instance! $.emit('parsley:' + ('parsleyForm' === type ? 'form' : 'field') + ':init', parsleyInstance); } return parsleyInstance; } }; // ### jQuery API // `$('.elem').parsley(options)` or `$('.elem').psly(options)` $.fn.parsley = $.fn.psly = function (options) { if (this.length > 1) { var instances = []; this.each(function () { instances.push($(this).parsley(options)); }); return instances; } // Return undefined if applied to non existing DOM element if (!$(this).length) { if (window.console && window.console.warn) window.console.warn('You must bind Parsley on an existing element.'); return; } return new Parsley(this, options); }; // ### ParsleyUI // UI is a class apart that only listen to some events and them modify DOM accordingly // Could be overriden by defining a `window.ParsleyConfig.ParsleyUI` appropriate class (with `listen()` method basically) window.ParsleyUI = 'function' === typeof ParsleyUtils.get(window, 'ParsleyConfig.ParsleyUI') ? new window.ParsleyConfig.ParsleyUI().listen() : new ParsleyUI().listen(); // ### ParsleyField and ParsleyForm extension // Ensure that defined if not already the case if ('undefined' === typeof window.ParsleyExtend) window.ParsleyExtend = {}; // ### ParsleyConfig // Ensure that defined if not already the case if ('undefined' === typeof window.ParsleyConfig) window.ParsleyConfig = {}; // ### Globals window.Parsley = window.psly = Parsley; window.ParsleyUtils = ParsleyUtils; window.ParsleyValidator = new ParsleyValidator(window.ParsleyConfig.validators, window.ParsleyConfig.i18n); // ### PARSLEY auto-binding // Prevent it by setting `ParsleyConfig.autoBind` to `false` if (false !== ParsleyUtils.get(window, 'ParsleyConfig.autoBind')) $(document).ready(function () { // Works only on `data-parsley-validate`. if ($('[data-parsley-validate]').length) $('[data-parsley-validate]').parsley(); }); return Parsley; });