|
@@ -4428,6 +4428,19 @@ S2.define('select2/defaults',[
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ if (
|
|
|
+ options.dropdownCssClass != null ||
|
|
|
+ options.dropdownCss != null ||
|
|
|
+ options.adaptDropdownCssClass != null
|
|
|
+ ) {
|
|
|
+ var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
|
|
|
+
|
|
|
+ options.dropdownAdapter = Utils.Decorate(
|
|
|
+ options.dropdownAdapter,
|
|
|
+ DropdownCSS
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
options.dropdownAdapter = Utils.Decorate(
|
|
|
options.dropdownAdapter,
|
|
|
AttachBody
|
|
@@ -4463,6 +4476,19 @@ S2.define('select2/defaults',[
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ if (
|
|
|
+ options.containerCssClass != null ||
|
|
|
+ options.containerCss != null ||
|
|
|
+ options.adaptContainerCssClass != null
|
|
|
+ ) {
|
|
|
+ var ContainerCSS = require(options.amdBase + 'compat/containerCss');
|
|
|
+
|
|
|
+ options.selectionAdapter = Utils.Decorate(
|
|
|
+ options.selectionAdapter,
|
|
|
+ ContainerCSS
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
options.selectionAdapter = Utils.Decorate(
|
|
|
options.selectionAdapter,
|
|
|
EventRelay
|
|
@@ -5283,47 +5309,162 @@ S2.define('select2/core',[
|
|
|
return Select2;
|
|
|
});
|
|
|
|
|
|
-S2.define('select2/compat/matcher',[
|
|
|
+S2.define('select2/compat/utils',[
|
|
|
'jquery'
|
|
|
], function ($) {
|
|
|
- function oldMatcher (matcher) {
|
|
|
- function wrappedMatcher (params, data) {
|
|
|
- var match = $.extend(true, {}, data);
|
|
|
+ function syncCssClasses ($dest, $src, adapter) {
|
|
|
+ var classes, replacements = [], adapted;
|
|
|
|
|
|
- if (params.term == null || $.trim(params.term) === '') {
|
|
|
- return match;
|
|
|
- }
|
|
|
+ classes = $.trim($dest.attr('class'));
|
|
|
|
|
|
- if (data.children) {
|
|
|
- for (var c = data.children.length - 1; c >= 0; c--) {
|
|
|
- var child = data.children[c];
|
|
|
+ if (classes) {
|
|
|
+ classes = '' + classes; // for IE which returns object
|
|
|
|
|
|
- // Check if the child object matches
|
|
|
- // The old matcher returned a boolean true or false
|
|
|
- var doesMatch = matcher(params.term, child.text, child);
|
|
|
+ $(classes.split(/\s+/)).each(function () {
|
|
|
+ // Save all Select2 classes
|
|
|
+ if (this.indexOf('select2-') === 0) {
|
|
|
+ replacements.push(this);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- // If the child didn't match, pop it off
|
|
|
- if (!doesMatch) {
|
|
|
- match.children.splice(c, 1);
|
|
|
+ classes = $.trim($src.attr('class'));
|
|
|
+
|
|
|
+ if (classes) {
|
|
|
+ classes = '' + classes; // for IE which returns object
|
|
|
+
|
|
|
+ $(classes.split(/\s+/)).each(function () {
|
|
|
+ // Only adapt non-Select2 classes
|
|
|
+ if (this.indexOf('select2-') !== 0) {
|
|
|
+ adapted = adapter(this);
|
|
|
+
|
|
|
+ if (adapted != null) {
|
|
|
+ replacements.push(adapted);
|
|
|
}
|
|
|
}
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- if (match.children.length > 0) {
|
|
|
- return match;
|
|
|
+ $dest.attr('class', replacements.join(' '));
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ syncCssClasses: syncCssClasses
|
|
|
+ };
|
|
|
+});
|
|
|
+
|
|
|
+S2.define('select2/compat/containerCss',[
|
|
|
+ 'jquery',
|
|
|
+ './utils'
|
|
|
+], function ($, CompatUtils) {
|
|
|
+ // No-op CSS adapter that discards all classes by default
|
|
|
+ function _containerAdapter (clazz) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ function ContainerCSS () { }
|
|
|
+
|
|
|
+ ContainerCSS.prototype.render = function (decorated) {
|
|
|
+ var $container = decorated.call(this);
|
|
|
+
|
|
|
+ var containerCssClass = this.options.get('containerCssClass') || '';
|
|
|
+
|
|
|
+ if ($.isFunction(containerCssClass)) {
|
|
|
+ containerCssClass = containerCssClass(this.$element);
|
|
|
+ }
|
|
|
+
|
|
|
+ var containerCssAdapter = this.options.get('adaptContainerCssClass');
|
|
|
+ containerCssAdapter = containerCssAdapter || _containerAdapter;
|
|
|
+
|
|
|
+ if (containerCssClass.indexOf(':all:') !== -1) {
|
|
|
+ containerCssClass = containerCssClass.replace(':all', '');
|
|
|
+
|
|
|
+ var _cssAdapter = containerCssAdapter;
|
|
|
+
|
|
|
+ containerCssAdapter = function (clazz) {
|
|
|
+ var adapted = _cssAdapter(clazz);
|
|
|
+
|
|
|
+ if (adapted != null) {
|
|
|
+ // Append the old one along with the adapted one
|
|
|
+ return adapted + ' ' + clazz;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (matcher(params.term, data.text, data)) {
|
|
|
- return match;
|
|
|
- }
|
|
|
+ return clazz;
|
|
|
+ };
|
|
|
+ }
|
|
|
|
|
|
- return null;
|
|
|
+ var containerCss = this.options.get('containerCss') || {};
|
|
|
+
|
|
|
+ if ($.isFunction(containerCss)) {
|
|
|
+ containerCss = containerCss(this.$element);
|
|
|
}
|
|
|
|
|
|
- return wrappedMatcher;
|
|
|
+ CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);
|
|
|
+
|
|
|
+ $container.css(containerCss);
|
|
|
+ $container.addClass(containerCssClass);
|
|
|
+
|
|
|
+ return $container;
|
|
|
+ };
|
|
|
+
|
|
|
+ return ContainerCSS;
|
|
|
+});
|
|
|
+
|
|
|
+S2.define('select2/compat/dropdownCss',[
|
|
|
+ 'jquery',
|
|
|
+ './utils'
|
|
|
+], function ($, CompatUtils) {
|
|
|
+ // No-op CSS adapter that discards all classes by default
|
|
|
+ function _dropdownAdapter (clazz) {
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
- return oldMatcher;
|
|
|
+ function DropdownCSS () { }
|
|
|
+
|
|
|
+ DropdownCSS.prototype.render = function (decorated) {
|
|
|
+ var $dropdown = decorated.call(this);
|
|
|
+
|
|
|
+ var dropdownCssClass = this.options.get('dropdownCssClass') || '';
|
|
|
+
|
|
|
+ if ($.isFunction(dropdownCssClass)) {
|
|
|
+ dropdownCssClass = dropdownCssClass(this.$element);
|
|
|
+ }
|
|
|
+
|
|
|
+ var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');
|
|
|
+ dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;
|
|
|
+
|
|
|
+ if (dropdownCssClass.indexOf(':all:') !== -1) {
|
|
|
+ dropdownCssClass = dropdownCssClass.replace(':all', '');
|
|
|
+
|
|
|
+ var _cssAdapter = dropdownCssAdapter;
|
|
|
+
|
|
|
+ dropdownCssAdapter = function (clazz) {
|
|
|
+ var adapted = _cssAdapter(clazz);
|
|
|
+
|
|
|
+ if (adapted != null) {
|
|
|
+ // Append the old one along with the adapted one
|
|
|
+ return adapted + ' ' + clazz;
|
|
|
+ }
|
|
|
+
|
|
|
+ return clazz;
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ var dropdownCss = this.options.get('dropdownCss') || {};
|
|
|
+
|
|
|
+ if ($.isFunction(dropdownCss)) {
|
|
|
+ dropdownCss = dropdownCss(this.$element);
|
|
|
+ }
|
|
|
+
|
|
|
+ CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);
|
|
|
+
|
|
|
+ $dropdown.css(dropdownCss);
|
|
|
+ $dropdown.addClass(dropdownCssClass);
|
|
|
+
|
|
|
+ return $dropdown;
|
|
|
+ };
|
|
|
+
|
|
|
+ return DropdownCSS;
|
|
|
});
|
|
|
|
|
|
S2.define('select2/compat/initSelection',[
|
|
@@ -5497,6 +5638,49 @@ S2.define('select2/compat/inputData',[
|
|
|
return InputData;
|
|
|
});
|
|
|
|
|
|
+S2.define('select2/compat/matcher',[
|
|
|
+ 'jquery'
|
|
|
+], function ($) {
|
|
|
+ function oldMatcher (matcher) {
|
|
|
+ function wrappedMatcher (params, data) {
|
|
|
+ var match = $.extend(true, {}, data);
|
|
|
+
|
|
|
+ if (params.term == null || $.trim(params.term) === '') {
|
|
|
+ return match;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (data.children) {
|
|
|
+ for (var c = data.children.length - 1; c >= 0; c--) {
|
|
|
+ var child = data.children[c];
|
|
|
+
|
|
|
+ // Check if the child object matches
|
|
|
+ // The old matcher returned a boolean true or false
|
|
|
+ var doesMatch = matcher(params.term, child.text, child);
|
|
|
+
|
|
|
+ // If the child didn't match, pop it off
|
|
|
+ if (!doesMatch) {
|
|
|
+ match.children.splice(c, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (match.children.length > 0) {
|
|
|
+ return match;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (matcher(params.term, data.text, data)) {
|
|
|
+ return match;
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return wrappedMatcher;
|
|
|
+ }
|
|
|
+
|
|
|
+ return oldMatcher;
|
|
|
+});
|
|
|
+
|
|
|
S2.define('select2/compat/query',[
|
|
|
|
|
|
], function () {
|