import $ from 'jquery';
import Utils from './utils';
var Multiple = function () {
this.__class__ = 'FieldMultiple';
};
Multiple.prototype = {
import $ from 'jquery';
import Utils from './utils';
var Multiple = function () {
this.__class__ = 'FieldMultiple';
};
Multiple.prototype = {
Add new $element
sibling for multiple field
addElement: function ($element) {
this.$elements.push($element);
return this;
},
See Field._refreshConstraints()
_refreshConstraints: function () {
var fieldConstraints;
this.constraints = [];
Select multiple special treatment
if (this.element.nodeName === 'SELECT') {
this.actualizeOptions()._bindConstraints();
return this;
}
Gather all constraints for each input in the multiple group
for (var i = 0; i < this.$elements.length; i++) {
Check if element have not been dynamically removed since last binding
if (!$('html').has(this.$elements[i]).length) {
this.$elements.splice(i, 1);
continue;
}
fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;
for (var j = 0; j < fieldConstraints.length; j++)
this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);
}
return this;
},
See Field.getValue()
getValue: function () {
Value could be overriden in DOM
if ('function' === typeof this.options.value)
return this.options.value(this);
else if ('undefined' !== typeof this.options.value)
return this.options.value;
Radio input case
if (this.element.nodeName === 'INPUT') {
var type = Utils.getType(this.element);
if (type === 'radio')
return this._findRelated().filter(':checked').val() || '';
checkbox input case
if (type === 'checkbox') {
var values = [];
this._findRelated().filter(':checked').each(function () {
values.push($(this).val());
});
return values;
}
}
Select multiple case
if (this.element.nodeName === 'SELECT' && null === this.$element.val())
return [];
Default case that should never happen
return this.$element.val();
},
_init: function () {
this.$elements = [this.$element];
return this;
}
};
export default Multiple;