146 lines
4.0 KiB
Plaintext
146 lines
4.0 KiB
Plaintext
import $ from 'jquery';
|
|
import ParsleyUtils from './utils';
|
|
|
|
var ParsleyAbstract = function () {
|
|
this.__id__ = ParsleyUtils.generateID();
|
|
};
|
|
|
|
ParsleyAbstract.prototype = {
|
|
asyncSupport: true, // Deprecated
|
|
|
|
_pipeAccordingToValidationResult: function () {
|
|
var pipe = () => {
|
|
var r = $.Deferred();
|
|
if (true !== this.validationResult)
|
|
r.reject();
|
|
return r.resolve().promise();
|
|
};
|
|
return [pipe, pipe];
|
|
},
|
|
|
|
actualizeOptions: function () {
|
|
ParsleyUtils.attr(this.$element, this.options.namespace, this.domOptions);
|
|
if (this.parent && this.parent.actualizeOptions)
|
|
this.parent.actualizeOptions();
|
|
return this;
|
|
},
|
|
|
|
_resetOptions: function (initOptions) {
|
|
this.domOptions = ParsleyUtils.objectCreate(this.parent.options);
|
|
this.options = ParsleyUtils.objectCreate(this.domOptions);
|
|
// Shallow copy of ownProperties of initOptions:
|
|
for (var i in initOptions) {
|
|
if (initOptions.hasOwnProperty(i))
|
|
this.options[i] = initOptions[i];
|
|
}
|
|
this.actualizeOptions();
|
|
},
|
|
|
|
_listeners: null,
|
|
|
|
// Register a callback for the given event name
|
|
// Callback is called with context as the first argument and the `this`
|
|
// The context is the current parsley instance, or window.Parsley if global
|
|
// A return value of `false` will interrupt the calls
|
|
on: function (name, fn) {
|
|
this._listeners = this._listeners || {};
|
|
var queue = this._listeners[name] = this._listeners[name] || [];
|
|
queue.push(fn);
|
|
|
|
return this;
|
|
},
|
|
|
|
// Deprecated. Use `on` instead
|
|
subscribe: function(name, fn) {
|
|
$.listenTo(this, name.toLowerCase(), fn);
|
|
},
|
|
|
|
// Unregister a callback (or all if none is given) for the given event name
|
|
off: function (name, fn) {
|
|
var queue = this._listeners && this._listeners[name];
|
|
if (queue) {
|
|
if (!fn) {
|
|
delete this._listeners[name];
|
|
} else {
|
|
for (var i = queue.length; i--; )
|
|
if (queue[i] === fn)
|
|
queue.splice(i, 1);
|
|
}
|
|
}
|
|
return this;
|
|
},
|
|
|
|
// Deprecated. Use `off`
|
|
unsubscribe: function(name, fn) {
|
|
$.unsubscribeTo(this, name.toLowerCase());
|
|
},
|
|
|
|
// Trigger an event of the given name
|
|
// A return value of `false` interrupts the callback chain
|
|
// Returns false if execution was interrupted
|
|
trigger: function (name, target, extraArg) {
|
|
target = target || this;
|
|
var queue = this._listeners && this._listeners[name];
|
|
var result;
|
|
var parentResult;
|
|
if (queue) {
|
|
for (var i = queue.length; i--; ) {
|
|
result = queue[i].call(target, target, extraArg);
|
|
if (result === false) return result;
|
|
}
|
|
}
|
|
if (this.parent) {
|
|
return this.parent.trigger(name, target, extraArg);
|
|
}
|
|
return true;
|
|
},
|
|
|
|
// Reset UI
|
|
reset: function () {
|
|
// Field case: just emit a reset event for UI
|
|
if ('ParsleyForm' !== this.__class__) {
|
|
this._resetUI();
|
|
return this._trigger('reset');
|
|
}
|
|
|
|
// Form case: emit a reset event for each field
|
|
for (var i = 0; i < this.fields.length; i++)
|
|
this.fields[i].reset();
|
|
|
|
this._trigger('reset');
|
|
},
|
|
|
|
// Destroy Parsley instance (+ UI)
|
|
destroy: function () {
|
|
// Field case: emit destroy event to clean UI and then destroy stored instance
|
|
this._destroyUI();
|
|
if ('ParsleyForm' !== this.__class__) {
|
|
this.$element.removeData('Parsley');
|
|
this.$element.removeData('ParsleyFieldMultiple');
|
|
this._trigger('destroy');
|
|
|
|
return;
|
|
}
|
|
|
|
// Form case: destroy all its fields and then destroy stored instance
|
|
for (var i = 0; i < this.fields.length; i++)
|
|
this.fields[i].destroy();
|
|
|
|
this.$element.removeData('Parsley');
|
|
this._trigger('destroy');
|
|
},
|
|
|
|
asyncIsValid: function (group, force) {
|
|
ParsleyUtils.warnOnce("asyncIsValid is deprecated; please use whenValid instead");
|
|
return this.whenValid({group, force});
|
|
},
|
|
|
|
_findRelated: function () {
|
|
return this.options.multiple ?
|
|
this.parent.$element.find(`[${this.options.namespace}multiple="${this.options.multiple}"]`)
|
|
: this.$element;
|
|
}
|
|
};
|
|
|
|
export default ParsleyAbstract;
|