• Jump To … +
    <<< back to documentation base.js constraint.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
  • pubsub.js

  • ¶
    import $ from 'jquery';
    import Field from './field';
    import Form from './form';
    import Utils from './utils';
    
    var o = $({});
    var deprecated = function () {
      Utils.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley");
    };
  • ¶

    Returns an event handler that calls fn with the arguments it expects

    function adapt(fn, context) {
  • ¶

    Store to allow unbinding

      if (!fn.parsleyAdaptedCallback) {
        fn.parsleyAdaptedCallback = function () {
          var args = Array.prototype.slice.call(arguments, 0);
          args.unshift(this);
          fn.apply(context || o, args);
        };
      }
      return fn.parsleyAdaptedCallback;
    }
    
    var eventPrefix = 'parsley:';
  • ¶

    Converts ‘parsley:form:validate’ into ‘form:validate’

    function eventName(name) {
      if (name.lastIndexOf(eventPrefix, 0) === 0)
        return name.substr(eventPrefix.length);
      return name;
    }
  • ¶

    $.listen is deprecated. Use Parsley.on instead.

    $.listen = function (name, callback) {
      var context;
      deprecated();
      if ('object' === typeof arguments[1] && 'function' === typeof arguments[2]) {
        context = arguments[1];
        callback = arguments[2];
      }
    
      if ('function' !== typeof callback)
        throw new Error('Wrong parameters');
    
      window.Parsley.on(eventName(name), adapt(callback, context));
    };
    
    $.listenTo = function (instance, name, fn) {
      deprecated();
      if (!(instance instanceof Field) && !(instance instanceof Form))
        throw new Error('Must give Parsley instance');
    
      if ('string' !== typeof name || 'function' !== typeof fn)
        throw new Error('Wrong parameters');
    
      instance.on(eventName(name), adapt(fn));
    };
    
    $.unsubscribe = function (name, fn) {
      deprecated();
      if ('string' !== typeof name || 'function' !== typeof fn)
        throw new Error('Wrong arguments');
      window.Parsley.off(eventName(name), fn.parsleyAdaptedCallback);
    };
    
    $.unsubscribeTo = function (instance, name) {
      deprecated();
      if (!(instance instanceof Field) && !(instance instanceof Form))
        throw new Error('Must give Parsley instance');
      instance.off(eventName(name));
    };
    
    $.unsubscribeAll = function (name) {
      deprecated();
      window.Parsley.off(eventName(name));
      $('form,input,textarea,select').each(function () {
        var instance = $(this).data('Parsley');
        if (instance) {
          instance.off(eventName(name));
        }
      });
    };
  • ¶

    $.emit is deprecated. Use jQuery events instead.

    $.emit = function (name, instance) {
      deprecated();
      var instanceGiven = (instance instanceof Field) || (instance instanceof Form);
      var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1);
      args.unshift(eventName(name));
      if (!instanceGiven) {
        instance = window.Parsley;
      }
      instance.trigger(...args);
    };
    
    export default {};