a993ed9ca9
Since Select2 methods should not be called on an element where Select2 has not yet been initialized, this raises an error when it happens. This does not silence the original error, but it does provide the user with some more context about why they are seeing a TypeError. This closes https://github.com/select2/select2/issues/3173.
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
define([
|
|
'jquery',
|
|
'require',
|
|
|
|
'./select2/core',
|
|
'./select2/defaults'
|
|
], function ($, require, Select2, Defaults) {
|
|
// Force jQuery.mousewheel to be loaded if it hasn't already
|
|
require('jquery.mousewheel');
|
|
|
|
if ($.fn.select2 == null) {
|
|
// All methods that should return the element
|
|
var thisMethods = ['open', 'close', 'destroy'];
|
|
|
|
$.fn.select2 = function (options) {
|
|
options = options || {};
|
|
|
|
if (typeof options === 'object') {
|
|
this.each(function () {
|
|
var instanceOptions = $.extend({}, options, true);
|
|
|
|
var instance = new Select2($(this), instanceOptions);
|
|
});
|
|
|
|
return this;
|
|
} else if (typeof options === 'string') {
|
|
var instance = this.data('select2');
|
|
|
|
if (instance == null && window.console && console.error) {
|
|
console.error(
|
|
'The select2(\'' + options + '\') method was called on an ' +
|
|
'element that is not using Select2.'
|
|
);
|
|
}
|
|
|
|
var args = Array.prototype.slice.call(arguments, 1);
|
|
|
|
var ret = instance[options](args);
|
|
|
|
// Check if we should be returning `this`
|
|
if ($.inArray(options, thisMethods) > -1) {
|
|
return this;
|
|
}
|
|
|
|
return ret;
|
|
} else {
|
|
throw new Error('Invalid arguments for Select2: ' + options);
|
|
}
|
|
};
|
|
}
|
|
|
|
if ($.fn.select2.defaults == null) {
|
|
$.fn.select2.defaults = Defaults;
|
|
}
|
|
|
|
return Select2;
|
|
});
|