mirror of https://gitee.com/y_project/RuoYi.git
升级select2到最新版v4.0.13
parent
6d27c8bbc7
commit
007cadbecb
|
@ -188,16 +188,13 @@
|
|||
width: 100%; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
||||
list-style: none; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__placeholder {
|
||||
color: #999;
|
||||
margin-top: 5px;
|
||||
float: left; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
font-weight: bold;
|
||||
margin-top: 5px;
|
||||
margin-right: 10px; }
|
||||
margin-right: 10px;
|
||||
padding: 1px; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: #e4e4e4;
|
||||
border: 1px solid #aaa;
|
||||
|
@ -216,7 +213,7 @@
|
|||
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||
color: #333; }
|
||||
|
||||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||
float: right; }
|
||||
|
||||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*!
|
||||
* Select2 4.0.7
|
||||
* Select2 4.0.13
|
||||
* https://select2.github.io
|
||||
*
|
||||
* Released under the MIT license
|
||||
|
@ -832,6 +832,8 @@ S2.define('select2/utils',[
|
|||
if (Utils.__cache[id] != null) {
|
||||
delete Utils.__cache[id];
|
||||
}
|
||||
|
||||
element.removeAttribute('data-select2-id');
|
||||
};
|
||||
|
||||
return Utils;
|
||||
|
@ -853,7 +855,7 @@ S2.define('select2/results',[
|
|||
|
||||
Results.prototype.render = function () {
|
||||
var $results = $(
|
||||
'<ul class="select2-results__options" role="tree"></ul>'
|
||||
'<ul class="select2-results__options" role="listbox"></ul>'
|
||||
);
|
||||
|
||||
if (this.options.get('multiple')) {
|
||||
|
@ -876,7 +878,7 @@ S2.define('select2/results',[
|
|||
this.hideLoading();
|
||||
|
||||
var $message = $(
|
||||
'<li role="treeitem" aria-live="assertive"' +
|
||||
'<li role="alert" aria-live="assertive"' +
|
||||
' class="select2-results__option"></li>'
|
||||
);
|
||||
|
||||
|
@ -1010,11 +1012,16 @@ S2.define('select2/results',[
|
|||
option.className = 'select2-results__option';
|
||||
|
||||
var attrs = {
|
||||
'role': 'treeitem',
|
||||
'role': 'option',
|
||||
'aria-selected': 'false'
|
||||
};
|
||||
|
||||
if (data.disabled) {
|
||||
var matches = window.Element.prototype.matches ||
|
||||
window.Element.prototype.msMatchesSelector ||
|
||||
window.Element.prototype.webkitMatchesSelector;
|
||||
|
||||
if ((data.element != null && matches.call(data.element, ':disabled')) ||
|
||||
(data.element == null && data.disabled)) {
|
||||
delete attrs['aria-selected'];
|
||||
attrs['aria-disabled'] = 'true';
|
||||
}
|
||||
|
@ -1425,6 +1432,7 @@ S2.define('select2/selection/base',[
|
|||
|
||||
$selection.attr('title', this.$element.attr('title'));
|
||||
$selection.attr('tabindex', this._tabindex);
|
||||
$selection.attr('aria-disabled', 'false');
|
||||
|
||||
this.$selection = $selection;
|
||||
|
||||
|
@ -1434,7 +1442,6 @@ S2.define('select2/selection/base',[
|
|||
BaseSelection.prototype.bind = function (container, $container) {
|
||||
var self = this;
|
||||
|
||||
var id = container.id + '-container';
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
this.container = container;
|
||||
|
@ -1477,19 +1484,19 @@ S2.define('select2/selection/base',[
|
|||
self.$selection.removeAttr('aria-activedescendant');
|
||||
self.$selection.removeAttr('aria-owns');
|
||||
|
||||
window.setTimeout(function () {
|
||||
self.$selection.focus();
|
||||
}, 0);
|
||||
self.$selection.trigger('focus');
|
||||
|
||||
self._detachCloseHandler(container);
|
||||
});
|
||||
|
||||
container.on('enable', function () {
|
||||
self.$selection.attr('tabindex', self._tabindex);
|
||||
self.$selection.attr('aria-disabled', 'false');
|
||||
});
|
||||
|
||||
container.on('disable', function () {
|
||||
self.$selection.attr('tabindex', '-1');
|
||||
self.$selection.attr('aria-disabled', 'true');
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -1512,7 +1519,6 @@ S2.define('select2/selection/base',[
|
|||
};
|
||||
|
||||
BaseSelection.prototype._attachCloseHandler = function (container) {
|
||||
var self = this;
|
||||
|
||||
$(document.body).on('mousedown.select2.' + container.id, function (e) {
|
||||
var $target = $(e.target);
|
||||
|
@ -1522,8 +1528,6 @@ S2.define('select2/selection/base',[
|
|||
var $all = $('.select2.select2-container--open');
|
||||
|
||||
$all.each(function () {
|
||||
var $this = $(this);
|
||||
|
||||
if (this == $select[0]) {
|
||||
return;
|
||||
}
|
||||
|
@ -1552,6 +1556,27 @@ S2.define('select2/selection/base',[
|
|||
throw new Error('The `update` method must be defined in child classes.');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "enabled" (not "disabled") state of this
|
||||
* object.
|
||||
*
|
||||
* @return {true} if the instance is not disabled.
|
||||
* @return {false} if the instance is disabled.
|
||||
*/
|
||||
BaseSelection.prototype.isEnabled = function () {
|
||||
return !this.isDisabled();
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "disabled" state of this object.
|
||||
*
|
||||
* @return {true} if the disabled option is true.
|
||||
* @return {false} if the disabled option is false.
|
||||
*/
|
||||
BaseSelection.prototype.isDisabled = function () {
|
||||
return this.options.get('disabled');
|
||||
};
|
||||
|
||||
return BaseSelection;
|
||||
});
|
||||
|
||||
|
@ -1616,7 +1641,7 @@ S2.define('select2/selection/single',[
|
|||
|
||||
container.on('focus', function (evt) {
|
||||
if (!container.isOpen()) {
|
||||
self.$selection.focus();
|
||||
self.$selection.trigger('focus');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -1650,7 +1675,14 @@ S2.define('select2/selection/single',[
|
|||
var formatted = this.display(selection, $rendered);
|
||||
|
||||
$rendered.empty().append(formatted);
|
||||
$rendered.attr('title', selection.title || selection.text);
|
||||
|
||||
var title = selection.title || selection.text;
|
||||
|
||||
if (title) {
|
||||
$rendered.attr('title', title);
|
||||
} else {
|
||||
$rendered.removeAttr('title');
|
||||
}
|
||||
};
|
||||
|
||||
return SingleSelection;
|
||||
|
@ -1695,7 +1727,7 @@ S2.define('select2/selection/multiple',[
|
|||
'.select2-selection__choice__remove',
|
||||
function (evt) {
|
||||
// Ignore the event if it is disabled
|
||||
if (self.options.get('disabled')) {
|
||||
if (self.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1753,7 +1785,12 @@ S2.define('select2/selection/multiple',[
|
|||
var formatted = this.display(selection, $selection);
|
||||
|
||||
$selection.append(formatted);
|
||||
$selection.attr('title', selection.title || selection.text);
|
||||
|
||||
var title = selection.title || selection.text;
|
||||
|
||||
if (title) {
|
||||
$selection.attr('title', title);
|
||||
}
|
||||
|
||||
Utils.StoreData($selection[0], 'data', selection);
|
||||
|
||||
|
@ -1851,7 +1888,7 @@ S2.define('select2/selection/allowClear',[
|
|||
|
||||
AllowClear.prototype._handleClear = function (_, evt) {
|
||||
// Ignore the event if it is disabled
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1894,7 +1931,7 @@ S2.define('select2/selection/allowClear',[
|
|||
}
|
||||
}
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
this.trigger('toggle', {});
|
||||
};
|
||||
|
@ -1946,7 +1983,7 @@ S2.define('select2/selection/search',[
|
|||
'<li class="select2-search select2-search--inline">' +
|
||||
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
||||
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
||||
' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
|
||||
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
||||
'</li>'
|
||||
);
|
||||
|
||||
|
@ -1963,14 +2000,18 @@ S2.define('select2/selection/search',[
|
|||
Search.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self.$search.attr('aria-controls', resultsId);
|
||||
self.$search.trigger('focus');
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
self.$search.val('');
|
||||
self.$search.removeAttr('aria-controls');
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
self.$search.trigger('focus');
|
||||
});
|
||||
|
@ -1990,7 +2031,11 @@ S2.define('select2/selection/search',[
|
|||
});
|
||||
|
||||
container.on('results:focus', function (params) {
|
||||
self.$search.attr('aria-activedescendant', params.id);
|
||||
if (params.data._resultId) {
|
||||
self.$search.attr('aria-activedescendant', params.data._resultId);
|
||||
} else {
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
}
|
||||
});
|
||||
|
||||
this.$selection.on('focusin', '.select2-search--inline', function (evt) {
|
||||
|
@ -2024,6 +2069,12 @@ S2.define('select2/selection/search',[
|
|||
}
|
||||
});
|
||||
|
||||
this.$selection.on('click', '.select2-search--inline', function (evt) {
|
||||
if (self.$search.val()) {
|
||||
evt.stopPropagation();
|
||||
}
|
||||
});
|
||||
|
||||
// Try to detect the IE version should the `documentMode` property that
|
||||
// is stored on the document. This is only implemented in IE and is
|
||||
// slightly cleaner than doing a user agent check.
|
||||
|
@ -2109,13 +2160,7 @@ S2.define('select2/selection/search',[
|
|||
|
||||
this.resizeSearch();
|
||||
if (searchHadFocus) {
|
||||
var isTagInput = this.$element.find('[data-select2-tag]').length;
|
||||
if (isTagInput) {
|
||||
// fix IE11 bug where tag input lost focus
|
||||
this.$element.focus();
|
||||
} else {
|
||||
this.$search.focus();
|
||||
}
|
||||
this.$search.trigger('focus');
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2148,7 +2193,7 @@ S2.define('select2/selection/search',[
|
|||
var width = '';
|
||||
|
||||
if (this.$search.attr('placeholder') !== '') {
|
||||
width = this.$selection.find('.select2-selection__rendered').innerWidth();
|
||||
width = this.$selection.find('.select2-selection__rendered').width();
|
||||
} else {
|
||||
var minimumWidth = this.$search.val().length + 1;
|
||||
|
||||
|
@ -3177,7 +3222,7 @@ S2.define('select2/data/select',[
|
|||
if ($(data.element).is('option')) {
|
||||
data.element.selected = true;
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -3198,13 +3243,13 @@ S2.define('select2/data/select',[
|
|||
}
|
||||
|
||||
self.$element.val(val);
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
} else {
|
||||
var val = data.id;
|
||||
|
||||
this.$element.val(val);
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -3220,7 +3265,7 @@ S2.define('select2/data/select',[
|
|||
if ($(data.element).is('option')) {
|
||||
data.element.selected = false;
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -3238,7 +3283,7 @@ S2.define('select2/data/select',[
|
|||
|
||||
self.$element.val(val);
|
||||
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -3431,15 +3476,19 @@ S2.define('select2/data/array',[
|
|||
'jquery'
|
||||
], function (SelectAdapter, Utils, $) {
|
||||
function ArrayAdapter ($element, options) {
|
||||
var data = options.get('data') || [];
|
||||
this._dataToConvert = options.get('data') || [];
|
||||
|
||||
ArrayAdapter.__super__.constructor.call(this, $element, options);
|
||||
|
||||
this.addOptions(this.convertToOptions(data));
|
||||
}
|
||||
|
||||
Utils.Extend(ArrayAdapter, SelectAdapter);
|
||||
|
||||
ArrayAdapter.prototype.bind = function (container, $container) {
|
||||
ArrayAdapter.__super__.bind.call(this, container, $container);
|
||||
|
||||
this.addOptions(this.convertToOptions(this._dataToConvert));
|
||||
};
|
||||
|
||||
ArrayAdapter.prototype.select = function (data) {
|
||||
var $option = this.$element.find('option').filter(function (i, elm) {
|
||||
return elm.value == data.id.toString();
|
||||
|
@ -3729,8 +3778,6 @@ S2.define('select2/data/tags',[
|
|||
};
|
||||
|
||||
Tags.prototype._removeOldTags = function (_) {
|
||||
var tag = this._lastTag;
|
||||
|
||||
var $options = this.$element.find('option[data-select2-tag]');
|
||||
|
||||
$options.each(function () {
|
||||
|
@ -3805,7 +3852,7 @@ S2.define('select2/data/tokenizer',[
|
|||
// Replace the search term if we have the search box
|
||||
if (this.$search.length) {
|
||||
this.$search.val(tokenData.term);
|
||||
this.$search.focus();
|
||||
this.$search.trigger('focus');
|
||||
}
|
||||
|
||||
params.term = tokenData.term;
|
||||
|
@ -3934,10 +3981,30 @@ S2.define('select2/data/maximumSelectionLength',[
|
|||
decorated.call(this, $e, options);
|
||||
}
|
||||
|
||||
MaximumSelectionLength.prototype.bind =
|
||||
function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('select', function () {
|
||||
self._checkIfMaximumSelected();
|
||||
});
|
||||
};
|
||||
|
||||
MaximumSelectionLength.prototype.query =
|
||||
function (decorated, params, callback) {
|
||||
var self = this;
|
||||
|
||||
this._checkIfMaximumSelected(function () {
|
||||
decorated.call(self, params, callback);
|
||||
});
|
||||
};
|
||||
|
||||
MaximumSelectionLength.prototype._checkIfMaximumSelected =
|
||||
function (_, successCallback) {
|
||||
var self = this;
|
||||
|
||||
this.current(function (currentData) {
|
||||
var count = currentData != null ? currentData.length : 0;
|
||||
if (self.maximumSelectionLength > 0 &&
|
||||
|
@ -3950,7 +4017,10 @@ S2.define('select2/data/maximumSelectionLength',[
|
|||
});
|
||||
return;
|
||||
}
|
||||
decorated.call(self, params, callback);
|
||||
|
||||
if (successCallback) {
|
||||
successCallback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -4013,7 +4083,7 @@ S2.define('select2/dropdown/search',[
|
|||
'<span class="select2-search select2-search--dropdown">' +
|
||||
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
||||
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
||||
' spellcheck="false" role="textbox" />' +
|
||||
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
||||
'</span>'
|
||||
);
|
||||
|
||||
|
@ -4028,6 +4098,8 @@ S2.define('select2/dropdown/search',[
|
|||
Search.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
this.$search.on('keydown', function (evt) {
|
||||
|
@ -4050,24 +4122,27 @@ S2.define('select2/dropdown/search',[
|
|||
|
||||
container.on('open', function () {
|
||||
self.$search.attr('tabindex', 0);
|
||||
self.$search.attr('aria-controls', resultsId);
|
||||
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
|
||||
window.setTimeout(function () {
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
}, 0);
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
self.$search.attr('tabindex', -1);
|
||||
self.$search.removeAttr('aria-controls');
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
|
||||
self.$search.val('');
|
||||
self.$search.blur();
|
||||
self.$search.trigger('blur');
|
||||
});
|
||||
|
||||
container.on('focus', function () {
|
||||
if (!container.isOpen()) {
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -4082,6 +4157,14 @@ S2.define('select2/dropdown/search',[
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
container.on('results:focus', function (params) {
|
||||
if (params.data._resultId) {
|
||||
self.$search.attr('aria-activedescendant', params.data._resultId);
|
||||
} else {
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Search.prototype.handleSearch = function (evt) {
|
||||
|
@ -4166,6 +4249,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
|||
|
||||
if (this.showLoadingMore(data)) {
|
||||
this.$results.append(this.$loadingMore);
|
||||
this.loadMoreIfNeeded();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -4184,25 +4268,27 @@ S2.define('select2/dropdown/infiniteScroll',[
|
|||
self.loading = true;
|
||||
});
|
||||
|
||||
this.$results.on('scroll', function () {
|
||||
this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
|
||||
};
|
||||
|
||||
InfiniteScroll.prototype.loadMoreIfNeeded = function () {
|
||||
var isLoadMoreVisible = $.contains(
|
||||
document.documentElement,
|
||||
self.$loadingMore[0]
|
||||
this.$loadingMore[0]
|
||||
);
|
||||
|
||||
if (self.loading || !isLoadMoreVisible) {
|
||||
if (this.loading || !isLoadMoreVisible) {
|
||||
return;
|
||||
}
|
||||
|
||||
var currentOffset = self.$results.offset().top +
|
||||
self.$results.outerHeight(false);
|
||||
var loadingMoreOffset = self.$loadingMore.offset().top +
|
||||
self.$loadingMore.outerHeight(false);
|
||||
var currentOffset = this.$results.offset().top +
|
||||
this.$results.outerHeight(false);
|
||||
var loadingMoreOffset = this.$loadingMore.offset().top +
|
||||
this.$loadingMore.outerHeight(false);
|
||||
|
||||
if (currentOffset + 50 >= loadingMoreOffset) {
|
||||
self.loadMore();
|
||||
this.loadMore();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
InfiniteScroll.prototype.loadMore = function () {
|
||||
|
@ -4223,7 +4309,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
|||
var $option = $(
|
||||
'<li ' +
|
||||
'class="select2-results__option select2-results__option--load-more"' +
|
||||
'role="treeitem" aria-disabled="true"></li>'
|
||||
'role="option" aria-disabled="true"></li>'
|
||||
);
|
||||
|
||||
var message = this.options.get('translations').get('loadingMore');
|
||||
|
@ -4241,7 +4327,7 @@ S2.define('select2/dropdown/attachBody',[
|
|||
'../utils'
|
||||
], function ($, Utils) {
|
||||
function AttachBody (decorated, $element, options) {
|
||||
this.$dropdownParent = options.get('dropdownParent') || $(document.body);
|
||||
this.$dropdownParent = $(options.get('dropdownParent') || document.body);
|
||||
|
||||
decorated.call(this, $element, options);
|
||||
}
|
||||
|
@ -4249,27 +4335,14 @@ S2.define('select2/dropdown/attachBody',[
|
|||
AttachBody.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var setupResultsEvents = false;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self._showDropdown();
|
||||
self._attachPositioningHandler(container);
|
||||
|
||||
if (!setupResultsEvents) {
|
||||
setupResultsEvents = true;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
}
|
||||
// Must bind after the results handlers to ensure correct sizing
|
||||
self._bindContainerResultHandlers(container);
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
|
@ -4318,6 +4391,44 @@ S2.define('select2/dropdown/attachBody',[
|
|||
this.$dropdownContainer.detach();
|
||||
};
|
||||
|
||||
AttachBody.prototype._bindContainerResultHandlers =
|
||||
function (decorated, container) {
|
||||
|
||||
// These should only be bound once
|
||||
if (this._containerResultsHandlersBound) {
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:message', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('select', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('unselect', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
this._containerResultsHandlersBound = true;
|
||||
};
|
||||
|
||||
AttachBody.prototype._attachPositioningHandler =
|
||||
function (decorated, container) {
|
||||
var self = this;
|
||||
|
@ -4403,7 +4514,17 @@ S2.define('select2/dropdown/attachBody',[
|
|||
$offsetParent = $offsetParent.offsetParent();
|
||||
}
|
||||
|
||||
var parentOffset = $offsetParent.offset();
|
||||
var parentOffset = {
|
||||
top: 0,
|
||||
left: 0
|
||||
};
|
||||
|
||||
if (
|
||||
$.contains(document.body, $offsetParent[0]) ||
|
||||
$offsetParent[0].isConnected
|
||||
) {
|
||||
parentOffset = $offsetParent.offset();
|
||||
}
|
||||
|
||||
css.top -= parentOffset.top;
|
||||
css.left -= parentOffset.left;
|
||||
|
@ -4590,7 +4711,7 @@ S2.define('select2/i18n/en',[],function () {
|
|||
// English
|
||||
return {
|
||||
errorLoading: function () {
|
||||
return '无法载入结果';
|
||||
return '无法载入结果。';
|
||||
},
|
||||
inputTooLong: function (args) {
|
||||
var overChars = args.input.length - args.maximum;
|
||||
|
@ -4868,66 +4989,29 @@ S2.define('select2/defaults',[
|
|||
);
|
||||
}
|
||||
|
||||
if (typeof options.language === 'string') {
|
||||
// Check if the language is specified with a region
|
||||
if (options.language.indexOf('-') > 0) {
|
||||
// Extract the region information if it is included
|
||||
var languageParts = options.language.split('-');
|
||||
var baseLanguage = languageParts[0];
|
||||
// If the defaults were not previously applied from an element, it is
|
||||
// possible for the language option to have not been resolved
|
||||
options.language = this._resolveLanguage(options.language);
|
||||
|
||||
options.language = [options.language, baseLanguage];
|
||||
} else {
|
||||
options.language = [options.language];
|
||||
}
|
||||
}
|
||||
|
||||
if ($.isArray(options.language)) {
|
||||
var languages = new Translation();
|
||||
// Always fall back to English since it will always be complete
|
||||
options.language.push('en');
|
||||
|
||||
var languageNames = options.language;
|
||||
var uniqueLanguages = [];
|
||||
|
||||
for (var l = 0; l < languageNames.length; l++) {
|
||||
var name = languageNames[l];
|
||||
var language = {};
|
||||
for (var l = 0; l < options.language.length; l++) {
|
||||
var language = options.language[l];
|
||||
|
||||
try {
|
||||
// Try to load it with the original name
|
||||
language = Translation.loadPath(name);
|
||||
} catch (e) {
|
||||
try {
|
||||
// If we couldn't load it, check if it wasn't the full path
|
||||
name = this.defaults.amdLanguageBase + name;
|
||||
language = Translation.loadPath(name);
|
||||
} catch (ex) {
|
||||
// The translation could not be loaded at all. Sometimes this is
|
||||
// because of a configuration problem, other times this can be
|
||||
// because of how Select2 helps load all possible translation files.
|
||||
if (options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The language file for "' + name + '" could not be ' +
|
||||
'automatically loaded. A fallback will be used instead.'
|
||||
if (uniqueLanguages.indexOf(language) === -1) {
|
||||
uniqueLanguages.push(language);
|
||||
}
|
||||
}
|
||||
|
||||
options.language = uniqueLanguages;
|
||||
|
||||
options.translations = this._processTranslations(
|
||||
options.language,
|
||||
options.debug
|
||||
);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
languages.extend(language);
|
||||
}
|
||||
|
||||
options.translations = languages;
|
||||
} else {
|
||||
var baseTranslation = Translation.loadPath(
|
||||
this.defaults.amdLanguageBase + 'en'
|
||||
);
|
||||
var customTranslation = new Translation(options.language);
|
||||
|
||||
customTranslation.extend(baseTranslation);
|
||||
|
||||
options.translations = customTranslation;
|
||||
}
|
||||
|
||||
return options;
|
||||
};
|
||||
|
@ -4994,7 +5078,7 @@ S2.define('select2/defaults',[
|
|||
debug: false,
|
||||
dropdownAutoWidth: false,
|
||||
escapeMarkup: Utils.escapeMarkup,
|
||||
language: EnglishTranslation,
|
||||
language: {},
|
||||
matcher: matcher,
|
||||
minimumInputLength: 0,
|
||||
maximumInputLength: 0,
|
||||
|
@ -5012,10 +5096,107 @@ S2.define('select2/defaults',[
|
|||
return selection.text;
|
||||
},
|
||||
theme: 'default',
|
||||
width: '100%'
|
||||
width: 'resolve'
|
||||
};
|
||||
};
|
||||
|
||||
Defaults.prototype.applyFromElement = function (options, $element) {
|
||||
var optionLanguage = options.language;
|
||||
var defaultLanguage = this.defaults.language;
|
||||
var elementLanguage = $element.prop('lang');
|
||||
var parentLanguage = $element.closest('[lang]').prop('lang');
|
||||
|
||||
var languages = Array.prototype.concat.call(
|
||||
this._resolveLanguage(elementLanguage),
|
||||
this._resolveLanguage(optionLanguage),
|
||||
this._resolveLanguage(defaultLanguage),
|
||||
this._resolveLanguage(parentLanguage)
|
||||
);
|
||||
|
||||
options.language = languages;
|
||||
|
||||
return options;
|
||||
};
|
||||
|
||||
Defaults.prototype._resolveLanguage = function (language) {
|
||||
if (!language) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($.isEmptyObject(language)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($.isPlainObject(language)) {
|
||||
return [language];
|
||||
}
|
||||
|
||||
var languages;
|
||||
|
||||
if (!$.isArray(language)) {
|
||||
languages = [language];
|
||||
} else {
|
||||
languages = language;
|
||||
}
|
||||
|
||||
var resolvedLanguages = [];
|
||||
|
||||
for (var l = 0; l < languages.length; l++) {
|
||||
resolvedLanguages.push(languages[l]);
|
||||
|
||||
if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {
|
||||
// Extract the region information if it is included
|
||||
var languageParts = languages[l].split('-');
|
||||
var baseLanguage = languageParts[0];
|
||||
|
||||
resolvedLanguages.push(baseLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
return resolvedLanguages;
|
||||
};
|
||||
|
||||
Defaults.prototype._processTranslations = function (languages, debug) {
|
||||
var translations = new Translation();
|
||||
|
||||
for (var l = 0; l < languages.length; l++) {
|
||||
var languageData = new Translation();
|
||||
|
||||
var language = languages[l];
|
||||
|
||||
if (typeof language === 'string') {
|
||||
try {
|
||||
// Try to load it with the original name
|
||||
languageData = Translation.loadPath(language);
|
||||
} catch (e) {
|
||||
try {
|
||||
// If we couldn't load it, check if it wasn't the full path
|
||||
language = this.defaults.amdLanguageBase + language;
|
||||
languageData = Translation.loadPath(language);
|
||||
} catch (ex) {
|
||||
// The translation could not be loaded at all. Sometimes this is
|
||||
// because of a configuration problem, other times this can be
|
||||
// because of how Select2 helps load all possible translation files
|
||||
if (debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The language file for "' + language + '" could ' +
|
||||
'not be automatically loaded. A fallback will be used instead.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ($.isPlainObject(language)) {
|
||||
languageData = new Translation(language);
|
||||
} else {
|
||||
languageData = language;
|
||||
}
|
||||
|
||||
translations.extend(languageData);
|
||||
}
|
||||
|
||||
return translations;
|
||||
};
|
||||
|
||||
Defaults.prototype.set = function (key, value) {
|
||||
var camelKey = $.camelCase(key);
|
||||
|
||||
|
@ -5045,6 +5226,10 @@ S2.define('select2/options',[
|
|||
this.fromElement($element);
|
||||
}
|
||||
|
||||
if ($element != null) {
|
||||
this.options = Defaults.applyFromElement(this.options, $element);
|
||||
}
|
||||
|
||||
this.options = Defaults.apply(this.options);
|
||||
|
||||
if ($element && $element.is('input')) {
|
||||
|
@ -5068,14 +5253,6 @@ S2.define('select2/options',[
|
|||
this.options.disabled = $e.prop('disabled');
|
||||
}
|
||||
|
||||
if (this.options.language == null) {
|
||||
if ($e.prop('lang')) {
|
||||
this.options.language = $e.prop('lang').toLowerCase();
|
||||
} else if ($e.closest('[lang]').prop('lang')) {
|
||||
this.options.language = $e.closest('[lang]').prop('lang');
|
||||
}
|
||||
}
|
||||
|
||||
if (this.options.dir == null) {
|
||||
if ($e.prop('dir')) {
|
||||
this.options.dir = $e.prop('dir');
|
||||
|
@ -5343,6 +5520,12 @@ S2.define('select2/core',[
|
|||
return null;
|
||||
}
|
||||
|
||||
if (method == 'computedstyle') {
|
||||
var computedStyle = window.getComputedStyle($element[0]);
|
||||
|
||||
return computedStyle.width;
|
||||
}
|
||||
|
||||
return method;
|
||||
};
|
||||
|
||||
|
@ -5383,8 +5566,8 @@ S2.define('select2/core',[
|
|||
|
||||
if (observer != null) {
|
||||
this._observer = new observer(function (mutations) {
|
||||
$.each(mutations, self._syncA);
|
||||
$.each(mutations, self._syncS);
|
||||
self._syncA();
|
||||
self._syncS(null, mutations);
|
||||
});
|
||||
this._observer.observe(this.$element[0], {
|
||||
attributes: true,
|
||||
|
@ -5506,7 +5689,7 @@ S2.define('select2/core',[
|
|||
if (self.isOpen()) {
|
||||
if (key === KEYS.ESC || key === KEYS.TAB ||
|
||||
(key === KEYS.UP && evt.altKey)) {
|
||||
self.close();
|
||||
self.close(evt);
|
||||
|
||||
evt.preventDefault();
|
||||
} else if (key === KEYS.ENTER) {
|
||||
|
@ -5540,7 +5723,7 @@ S2.define('select2/core',[
|
|||
Select2.prototype._syncAttributes = function () {
|
||||
this.options.set('disabled', this.$element.prop('disabled'));
|
||||
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
if (this.isOpen()) {
|
||||
this.close();
|
||||
}
|
||||
|
@ -5551,7 +5734,7 @@ S2.define('select2/core',[
|
|||
}
|
||||
};
|
||||
|
||||
Select2.prototype._syncSubtree = function (evt, mutations) {
|
||||
Select2.prototype._isChangeMutation = function (evt, mutations) {
|
||||
var changed = false;
|
||||
var self = this;
|
||||
|
||||
|
@ -5579,7 +5762,22 @@ S2.define('select2/core',[
|
|||
}
|
||||
} else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
|
||||
changed = true;
|
||||
} else if ($.isArray(mutations)) {
|
||||
$.each(mutations, function(evt, mutation) {
|
||||
if (self._isChangeMutation(evt, mutation)) {
|
||||
// We've found a change mutation.
|
||||
// Let's escape from the loop and continue
|
||||
changed = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return changed;
|
||||
};
|
||||
|
||||
Select2.prototype._syncSubtree = function (evt, mutations) {
|
||||
var changed = this._isChangeMutation(evt, mutations);
|
||||
var self = this;
|
||||
|
||||
// Only re-pull the data if we think there is a change
|
||||
if (changed) {
|
||||
|
@ -5630,7 +5828,7 @@ S2.define('select2/core',[
|
|||
};
|
||||
|
||||
Select2.prototype.toggleDropdown = function () {
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5646,15 +5844,40 @@ S2.define('select2/core',[
|
|||
return;
|
||||
}
|
||||
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trigger('query', {});
|
||||
};
|
||||
|
||||
Select2.prototype.close = function () {
|
||||
Select2.prototype.close = function (evt) {
|
||||
if (!this.isOpen()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trigger('close', {});
|
||||
this.trigger('close', { originalEvent : evt });
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "enabled" (not "disabled") state of this
|
||||
* object.
|
||||
*
|
||||
* @return {true} if the instance is not disabled.
|
||||
* @return {false} if the instance is disabled.
|
||||
*/
|
||||
Select2.prototype.isEnabled = function () {
|
||||
return !this.isDisabled();
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "disabled" state of this object.
|
||||
*
|
||||
* @return {true} if the disabled option is true.
|
||||
* @return {false} if the disabled option is false.
|
||||
*/
|
||||
Select2.prototype.isDisabled = function () {
|
||||
return this.options.get('disabled');
|
||||
};
|
||||
|
||||
Select2.prototype.isOpen = function () {
|
||||
|
@ -5731,7 +5954,7 @@ S2.define('select2/core',[
|
|||
});
|
||||
}
|
||||
|
||||
this.$element.val(newVal).trigger('change');
|
||||
this.$element.val(newVal).trigger('input').trigger('change');
|
||||
};
|
||||
|
||||
Select2.prototype.destroy = function () {
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -50,11 +50,11 @@
|
|||
|
||||
<!-- select2下拉框插件 -->
|
||||
<div th:fragment="select2-css">
|
||||
<link th:href="@{/ajax/libs/select2/select2.min.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/select2/select2-bootstrap.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/select2/select2.min.css?v=4.0.13}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/select2/select2-bootstrap.min.css?v=4.0.13}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="select2-js">
|
||||
<script th:src="@{/ajax/libs/select2/select2.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/select2/select2.min.js?v=4.0.13}"></script>
|
||||
</div>
|
||||
|
||||
<!-- bootstrap-select下拉框插件 -->
|
||||
|
|
Loading…
Reference in New Issue