• Jump To … +
    <<< back to documentation abstract.js defaults.js factory.js field.js form.js main.js multiple.js pubsub.js remote.js ui.js utils.js validator.js validator_registry.js
  • main.js

  • ¶
    import $ from 'jquery';
    import ParsleyUtils from './utils';
    import ParsleyDefaults from './defaults';
    import ParsleyAbstract from './abstract';
    import ParsleyValidatorRegistry from './validator_registry';
    import ParsleyUI from './ui';
    import ParsleyForm from './form';
    import ParsleyField from './field';
    import ParsleyMultiple from './multiple';
    import ParsleyFactory from './factory';
    
    var vernums = $.fn.jquery.split('.');
    if (parseInt(vernums[0]) <= 1 && parseInt(vernums[1]) < 8) {
      throw "The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.";
    }
    if (!vernums.forEach) {
      ParsleyUtils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');
    }
  • ¶

    Inherit on, off & trigger to Parsley:

    var Parsley = $.extend(new ParsleyAbstract(), {
        $element: $(document),
        actualizeOptions: null,
        _resetOptions: null,
        Factory: ParsleyFactory,
        version: '@@version'
      });
  • ¶

    Supplement ParsleyField and Form with ParsleyAbstract This way, the constructors will have access to those methods

    $.extend(ParsleyField.prototype, ParsleyUI.Field, ParsleyAbstract.prototype);
    $.extend(ParsleyForm.prototype, ParsleyUI.Form, ParsleyAbstract.prototype);
  • ¶

    Inherit actualizeOptions and _resetOptions:

    $.extend(ParsleyFactory.prototype, ParsleyAbstract.prototype);
  • ¶

    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) {
        ParsleyUtils.warn('You must bind Parsley on an existing element.');
    
        return;
      }
    
      return new ParsleyFactory(this, options);
    };
  • ¶

    ParsleyField and ParsleyForm extension

    Ensure the extension is now defined if it wasn’t previously

    if ('undefined' === typeof window.ParsleyExtend)
      window.ParsleyExtend = {};
  • ¶

    Parsley config

    Inherit from ParsleyDefault, and copy over any existing values

    Parsley.options = $.extend(ParsleyUtils.objectCreate(ParsleyDefaults), window.ParsleyConfig);
    window.ParsleyConfig = Parsley.options; // Old way of accessing global options
  • ¶

    Globals

    window.Parsley = window.psly = Parsley;
    window.ParsleyUtils = ParsleyUtils;
  • ¶

    Define methods that forward to the registry, and deprecate all access except through window.Parsley

    var registry = window.Parsley._validatorRegistry = new ParsleyValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);
    window.ParsleyValidator = {};
    $.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator'.split(' '), function (i, method) {
      window.Parsley[method] = $.proxy(registry, method);
      window.ParsleyValidator[method] = function () {
        ParsleyUtils.warnOnce(`Accessing the method '${method}' through ParsleyValidator is deprecated. Simply call 'window.Parsley.${method}(...)'`);
        return window.Parsley[method](...arguments);
      };
    });
  • ¶

    ParsleyUI

    Deprecated global object

    window.Parsley.UI = ParsleyUI;
    window.ParsleyUI = {
      removeError: function (instance, name, doNotUpdateClass) {
        var updateClass = true !== doNotUpdateClass;
        ParsleyUtils.warnOnce(`Accessing ParsleyUI is deprecated. Call 'removeError' on the instance directly. Please comment in issue 1073 as to your need to call this method.`);
        return instance.removeError(name, {updateClass});
      },
      getErrorsMessages: function (instance) {
        ParsleyUtils.warnOnce(`Accessing ParsleyUI is deprecated. Call 'getErrorsMessages' on the instance directly.`);
        return instance.getErrorsMessages();
      }
    };
    $.each('addError updateError'.split(' '), function (i, method) {
      window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {
        var updateClass = true !== doNotUpdateClass;
        ParsleyUtils.warnOnce(`Accessing ParsleyUI is deprecated. Call '${method}' on the instance directly. Please comment in issue 1073 as to your need to call this method.`);
        return instance[method](name, {message, assert, updateClass});
      };
    });
  • ¶

    PARSLEY auto-binding

    Prevent it by setting ParsleyConfig.autoBind to false

    if (false !== window.ParsleyConfig.autoBind) {
      $(function () {
  • ¶

    Works only on data-parsley-validate.

        if ($('[data-parsley-validate]').length)
          $('[data-parsley-validate]').parsley();
      });
    }
    
    export default Parsley;