: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
classes = $.trim($src.attr('class'));
classes = '' + classes; // for IE which returns object
$(classes.split(/\s+/)).each(function () {
// Only adapt non-Select2 classes
if (this.indexOf('pumselect2-') !== 0) {
replacements.push(adapted);
$dest.attr('class', replacements.join(' '));
syncCssClasses: syncCssClasses
S2.define('pumselect2/compat/containerCss',[
], function ($, CompatUtils) {
// No-op CSS adapter that discards all classes by default
function _containerAdapter (clazz) {
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);
// Append the old one along with the adapted one
return adapted + ' ' + clazz;
var containerCss = this.options.get('containerCss') || {};
if ($.isFunction(containerCss)) {
containerCss = containerCss(this.$element);
CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);
$container.css(containerCss);
$container.addClass(containerCssClass);
S2.define('pumselect2/compat/dropdownCss',[
], function ($, CompatUtils) {
// No-op CSS adapter that discards all classes by default
function _dropdownAdapter (clazz) {
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);
// Append the old one along with the adapted one
return adapted + ' ' + 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);
S2.define('pumselect2/compat/initSelection',[
function InitSelection (decorated, $element, options) {
if (options.get('debug') && window.console && console.warn) {
'Select2: The `initSelection` option has been deprecated in favor' +
' of a custom data adapter that overrides the `current` method. ' +
'This method is now called multiple times instead of a single ' +
'time when the instance is initialized. Support will be removed ' +
'for the `initSelection` option in future versions of Select2'
this.initSelection = options.get('initSelection');
this._isInitialized = false;
decorated.call(this, $element, options);
InitSelection.prototype.current = function (decorated, callback) {
if (this._isInitialized) {
decorated.call(this, callback);
this.initSelection.call(null, this.$element, function (data) {
self._isInitialized = true;
S2.define('pumselect2/compat/inputData',[
function InputData (decorated, $element, options) {
this._valueSeparator = options.get('valueSeparator') || ',';
if ($element.prop('type') === 'hidden') {
if (options.get('debug') && console && console.warn) {
'Select2: Using a hidden input with Select2 is no longer ' +
'supported and may stop working in the future. It is recommended ' +
'to use a `<select>` element instead.'
decorated.call(this, $element, options);
InputData.prototype.current = function (_, callback) {
function getSelected (data, selectedIds) {
if (data.selected || $.inArray(data.id, selectedIds) !== -1) {
selected.push.apply(selected, getSelected(data.children, selectedIds));
for (var d = 0; d < this._currentData.length; d++) {
var data = this._currentData[d];
this.$element.val().split(
InputData.prototype.select = function (_, data) {
if (!this.options.get('multiple')) {
this.current(function (allData) {
$.map(allData, function (data) {
this.$element.val(data.id);
this.$element.trigger('change');
var value = this.$element.val();
value += this._valueSeparator + data.id;
this.$element.val(value);
this.$element.trigger('change');
InputData.prototype.unselect = function (_, data) {
this.current(function (allData) {
for (var d = 0; d < allData.length; d++) {
if (data.id == item.id) {
self.$element.val(values.join(self._valueSeparator));
self.$element.trigger('change');
InputData.prototype.query = function (_, params, callback) {
for (var d = 0; d < this._currentData.length; d++) {
var data = this._currentData[d];
var matches = this.matches(params, data);
InputData.prototype.addOptions = function (_, $options) {
var options = $.map($options, function ($option) {
return $.data($option[0], 'data');
this._currentData.push.apply(this._currentData, options);
S2.define('pumselect2/compat/matcher',[
function oldMatcher (matcher) {
function wrappedMatcher (params, data) {
var match = $.extend(true, {}, data);
if (params.term == null || $.trim(params.term) === '') {
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
match.children.splice(c, 1);
if (match.children.length > 0) {
if (matcher(params.term, data.text, data)) {
S2.define('pumselect2/compat/query',[
function Query (decorated, $element, options) {
if (options.get('debug') && window.console && console.warn) {
'Select2: The `query` option has been deprecated in favor of a ' +
'custom data adapter that overrides the `query` method. Support ' +
'will be removed for the `query` option in future versions of ' +
decorated.call(this, $element, options);
Query.prototype.query = function (_, params, callback) {
params.callback = callback;
var query = this.options.get('query');
query.call(null, params);
S2.define('pumselect2/dropdown/attachContainer',[
function AttachContainer (decorated, $element, options) {
decorated.call(this, $element, options);
AttachContainer.prototype.position =
function (decorated, $dropdown, $container) {
var $dropdownContainer = $container.find('.dropdown-wrapper');
$dropdownContainer.append($dropdown);
$dropdown.addClass('pumselect2-dropdown--below');
$container.addClass('pumselect2-container--below');
S2.define('pumselect2/dropdown/stopPropagation',[
function StopPropagation () { }
StopPropagation.prototype.bind = function (decorated, container, $container) {
decorated.call(this, container, $container);
this.$dropdown.on(stoppedEvents.join(' '), function (evt) {
S2.define('pumselect2/selection/stopPropagation',[
function StopPropagation () { }
StopPropagation.prototype.bind = function (decorated, container, $container) {
decorated.call(this, container, $container);
this.$selection.on(stoppedEvents.join(' '), function (evt) {
* jQuery Mousewheel 3.1.13
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
if ( typeof S2.define === 'function' && S2.define.amd ) {
// AMD. Register as an anonymous module.
S2.define('jquery-mousewheel',['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS style for Browserify
module.exports = factory;