50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
define([
|
|
'../utils'
|
|
], function (Utils) {
|
|
function Placeholder (decorated, $element, options) {
|
|
this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
|
|
|
|
decorated.call(this, $element, options);
|
|
}
|
|
|
|
Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
|
|
if (typeof placeholder === 'string') {
|
|
placeholder = {
|
|
id: '',
|
|
text: placeholder
|
|
};
|
|
}
|
|
|
|
return placeholder;
|
|
};
|
|
|
|
Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
|
|
var $placeholder = this.selectionContainer();
|
|
|
|
$placeholder.html(this.display(placeholder));
|
|
$placeholder.addClass('select2-selection__placeholder')
|
|
.removeClass('select2-selection__choice');
|
|
|
|
return $placeholder;
|
|
};
|
|
|
|
Placeholder.prototype.update = function (decorated, data) {
|
|
var singlePlaceholder = (
|
|
data.length == 1 && data[0].id != this.placeholder.id
|
|
);
|
|
var multipleSelections = data.length > 1;
|
|
|
|
if (multipleSelections || singlePlaceholder) {
|
|
return decorated.call(this, data);
|
|
}
|
|
|
|
this.clear();
|
|
|
|
var $placeholder = this.createPlaceholder(this.placeholder);
|
|
|
|
this.$selection.find('.select2-selection__rendered').append($placeholder);
|
|
};
|
|
|
|
return Placeholder;
|
|
});
|