select2-rails 4.0.3 → 4.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +8 -2
- data/lib/select2-rails/version.rb +1 -1
- data/select2-rails.gemspec +1 -1
- data/vendor/assets/javascripts/select2-full.js +670 -286
- data/vendor/assets/javascripts/select2.js +663 -280
- data/vendor/assets/javascripts/select2_locale_af.js +3 -0
- data/vendor/assets/javascripts/select2_locale_ar.js +2 -2
- data/vendor/assets/javascripts/select2_locale_az.js +2 -2
- data/vendor/assets/javascripts/select2_locale_bg.js +2 -2
- data/vendor/assets/javascripts/select2_locale_bn.js +3 -0
- data/vendor/assets/javascripts/select2_locale_bs.js +3 -0
- data/vendor/assets/javascripts/select2_locale_ca.js +2 -2
- data/vendor/assets/javascripts/select2_locale_cs.js +2 -2
- data/vendor/assets/javascripts/select2_locale_da.js +2 -2
- data/vendor/assets/javascripts/select2_locale_de.js +2 -2
- data/vendor/assets/javascripts/select2_locale_dsb.js +3 -0
- data/vendor/assets/javascripts/select2_locale_el.js +2 -2
- data/vendor/assets/javascripts/select2_locale_en.js +2 -2
- data/vendor/assets/javascripts/select2_locale_es.js +2 -2
- data/vendor/assets/javascripts/select2_locale_et.js +2 -2
- data/vendor/assets/javascripts/select2_locale_eu.js +2 -2
- data/vendor/assets/javascripts/select2_locale_fa.js +2 -2
- data/vendor/assets/javascripts/select2_locale_fi.js +2 -2
- data/vendor/assets/javascripts/select2_locale_fr.js +2 -2
- data/vendor/assets/javascripts/select2_locale_gl.js +2 -2
- data/vendor/assets/javascripts/select2_locale_he.js +2 -2
- data/vendor/assets/javascripts/select2_locale_hi.js +2 -2
- data/vendor/assets/javascripts/select2_locale_hr.js +2 -2
- data/vendor/assets/javascripts/select2_locale_hsb.js +3 -0
- data/vendor/assets/javascripts/select2_locale_hu.js +2 -2
- data/vendor/assets/javascripts/select2_locale_hy.js +3 -0
- data/vendor/assets/javascripts/select2_locale_id.js +2 -2
- data/vendor/assets/javascripts/select2_locale_is.js +2 -2
- data/vendor/assets/javascripts/select2_locale_it.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ja.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ka.js +3 -0
- data/vendor/assets/javascripts/select2_locale_km.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ko.js +2 -2
- data/vendor/assets/javascripts/select2_locale_lt.js +2 -2
- data/vendor/assets/javascripts/select2_locale_lv.js +2 -2
- data/vendor/assets/javascripts/select2_locale_mk.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ms.js +2 -2
- data/vendor/assets/javascripts/select2_locale_nb.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ne.js +3 -0
- data/vendor/assets/javascripts/select2_locale_nl.js +2 -2
- data/vendor/assets/javascripts/select2_locale_pl.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ps.js +3 -0
- data/vendor/assets/javascripts/select2_locale_pt-BR.js +2 -2
- data/vendor/assets/javascripts/select2_locale_pt.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ro.js +2 -2
- data/vendor/assets/javascripts/select2_locale_ru.js +2 -2
- data/vendor/assets/javascripts/select2_locale_sk.js +2 -2
- data/vendor/assets/javascripts/select2_locale_sl.js +3 -0
- data/vendor/assets/javascripts/select2_locale_sq.js +3 -0
- data/vendor/assets/javascripts/select2_locale_sr-Cyrl.js +2 -2
- data/vendor/assets/javascripts/select2_locale_sr.js +2 -2
- data/vendor/assets/javascripts/select2_locale_sv.js +2 -2
- data/vendor/assets/javascripts/select2_locale_th.js +2 -2
- data/vendor/assets/javascripts/select2_locale_tk.js +3 -0
- data/vendor/assets/javascripts/select2_locale_tr.js +2 -2
- data/vendor/assets/javascripts/select2_locale_uk.js +2 -2
- data/vendor/assets/javascripts/select2_locale_vi.js +2 -2
- data/vendor/assets/javascripts/select2_locale_zh-CN.js +2 -2
- data/vendor/assets/javascripts/select2_locale_zh-TW.js +2 -2
- data/vendor/assets/stylesheets/select2.css +8 -11
- metadata +18 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: c74819abcc9a780c3221badc68cc4d2bc999e016c8d3a412c6c197545451126c
|
|
4
|
+
data.tar.gz: 1b22502c83b69ebbe348018e3e069aa640f160fd0e99c385c6d18064bd662ffa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 044aca6303e13dee71f8e2532db1369fd757fb58cda8945e9f7d20a1244205a75c8a72e4fed02a4e768ff7379a9a0579ed0735baa9fb421c11a5c2722481ed4b
|
|
7
|
+
data.tar.gz: 2fc02500109a54e3d47fddccfe6d477741e4f3e9bb6b2a937cffc658c4eec2777940ba3ee66bc436645eb7bcb6d6e11e580460c15abf2b982bc86c9575bdbcce
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#Select2 for rails asset pipeline
|
|
1
|
+
# Select2 for rails asset pipeline
|
|
2
2
|
|
|
3
3
|
[Select2](https://github.com/select2/select2) is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.
|
|
4
4
|
|
|
@@ -48,9 +48,15 @@ Add the following to your `app/assets/javascripts/application.js`:
|
|
|
48
48
|
|
|
49
49
|
//= require select2_locale_"any possible language"
|
|
50
50
|
|
|
51
|
+
To apply the language, pass whatever language you'd like to use to the [`language`](https://select2.github.io/examples.html#language) option when initializing Select2:
|
|
52
|
+
|
|
53
|
+
$( "#dropdown" ).select2({
|
|
54
|
+
language: "zh-TW"
|
|
55
|
+
});
|
|
56
|
+
|
|
51
57
|
Possible languages:
|
|
52
58
|
|
|
53
|
-
ar, az, bg, ca, cs, da, de, el, en, es, et, eu, fa, fi, fr, gl, he, hi, hr, hu, id, is, it, ja, km, ko, lt, lv, mk, ms, nb, nl, pl, pt, pt-BR, ro, ru, sk, sr, sr-Cyrl, sv, th, tr, uk, vi, zh-CN, zh-TW
|
|
59
|
+
af, ar, az, bg, bn, bs, ca, cs, da, de, dsb, el, en, es, et, eu, fa, fi, fr, gl, he, hi, hr, hsb, hu, hy, id, is, it, ja, ka, km, ko, lt, lv, mk, ms, nb, ne, nl, pl, ps, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-Cyrl, sv, th, tk, tr, uk, vi, zh-CN, zh-TW
|
|
54
60
|
|
|
55
61
|
## Example
|
|
56
62
|
Code [here](https://github.com/argerim/select_2_example)
|
data/select2-rails.gemspec
CHANGED
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
16
16
|
s.require_paths = ["lib"]
|
|
17
17
|
|
|
18
|
-
s.
|
|
18
|
+
s.add_development_dependency "thor", "~> 1"
|
|
19
19
|
s.add_development_dependency "bundler", "~> 1.0"
|
|
20
20
|
s.add_development_dependency "rails", ">= 3.0"
|
|
21
21
|
s.add_development_dependency "httpclient", "~> 2.2"
|
|
@@ -1,27 +1,41 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Select2 4.0.
|
|
2
|
+
* Select2 4.0.13
|
|
3
3
|
* https://select2.github.io
|
|
4
4
|
*
|
|
5
5
|
* Released under the MIT license
|
|
6
6
|
* https://github.com/select2/select2/blob/master/LICENSE.md
|
|
7
7
|
*/
|
|
8
|
-
(function (factory) {
|
|
8
|
+
;(function (factory) {
|
|
9
9
|
if (typeof define === 'function' && define.amd) {
|
|
10
10
|
// AMD. Register as an anonymous module.
|
|
11
11
|
define(['jquery'], factory);
|
|
12
|
-
} else if (typeof
|
|
12
|
+
} else if (typeof module === 'object' && module.exports) {
|
|
13
13
|
// Node/CommonJS
|
|
14
|
-
|
|
14
|
+
module.exports = function (root, jQuery) {
|
|
15
|
+
if (jQuery === undefined) {
|
|
16
|
+
// require('jQuery') returns a factory that requires window to
|
|
17
|
+
// build a jQuery instance, we normalize how we use modules
|
|
18
|
+
// that require this pattern but the window provided is a noop
|
|
19
|
+
// if it's defined (how jquery works)
|
|
20
|
+
if (typeof window !== 'undefined') {
|
|
21
|
+
jQuery = require('jquery');
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
jQuery = require('jquery')(root);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
factory(jQuery);
|
|
28
|
+
return jQuery;
|
|
29
|
+
};
|
|
15
30
|
} else {
|
|
16
31
|
// Browser globals
|
|
17
32
|
factory(jQuery);
|
|
18
33
|
}
|
|
19
|
-
}(function (jQuery) {
|
|
34
|
+
} (function (jQuery) {
|
|
20
35
|
// This is needed so we can catch the AMD loader configuration and use it
|
|
21
36
|
// The inner file should be wrapped (by `banner.start.js`) in a function that
|
|
22
37
|
// returns the AMD loader references.
|
|
23
|
-
var S2 =
|
|
24
|
-
(function () {
|
|
38
|
+
var S2 =(function () {
|
|
25
39
|
// Restore the Select2 AMD loader so it can be used
|
|
26
40
|
// Needed mostly in the language files, where the loader is not inserted
|
|
27
41
|
if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
|
|
@@ -30,13 +44,11 @@
|
|
|
30
44
|
var S2;(function () { if (!S2 || !S2.requirejs) {
|
|
31
45
|
if (!S2) { S2 = {}; } else { require = S2; }
|
|
32
46
|
/**
|
|
33
|
-
* @license almond 0.3.
|
|
34
|
-
*
|
|
35
|
-
* see: http://github.com/jrburke/almond for details
|
|
47
|
+
* @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
|
|
48
|
+
* Released under MIT license, http://github.com/requirejs/almond/LICENSE
|
|
36
49
|
*/
|
|
37
50
|
//Going sloppy to avoid 'use strict' string cost, but strict practices should
|
|
38
51
|
//be followed.
|
|
39
|
-
/*jslint sloppy: true */
|
|
40
52
|
/*global setTimeout: false */
|
|
41
53
|
|
|
42
54
|
var requirejs, require, define;
|
|
@@ -64,60 +76,58 @@ var requirejs, require, define;
|
|
|
64
76
|
*/
|
|
65
77
|
function normalize(name, baseName) {
|
|
66
78
|
var nameParts, nameSegment, mapValue, foundMap, lastIndex,
|
|
67
|
-
foundI, foundStarMap, starI, i, j, part,
|
|
79
|
+
foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
|
|
68
80
|
baseParts = baseName && baseName.split("/"),
|
|
69
81
|
map = config.map,
|
|
70
82
|
starMap = (map && map['*']) || {};
|
|
71
83
|
|
|
72
84
|
//Adjust any relative paths.
|
|
73
|
-
if (name
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
+
if (name) {
|
|
86
|
+
name = name.split('/');
|
|
87
|
+
lastIndex = name.length - 1;
|
|
88
|
+
|
|
89
|
+
// If wanting node ID compatibility, strip .js from end
|
|
90
|
+
// of IDs. Have to do this here, and not in nameToUrl
|
|
91
|
+
// because node allows either .js or non .js to map
|
|
92
|
+
// to same file.
|
|
93
|
+
if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
|
|
94
|
+
name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
|
|
95
|
+
}
|
|
85
96
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
//baseName
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
97
|
+
// Starts with a '.' so need the baseName
|
|
98
|
+
if (name[0].charAt(0) === '.' && baseParts) {
|
|
99
|
+
//Convert baseName to array, and lop off the last part,
|
|
100
|
+
//so that . matches that 'directory' and not name of the baseName's
|
|
101
|
+
//module. For instance, baseName of 'one/two/three', maps to
|
|
102
|
+
//'one/two/three.js', but we want the directory, 'one/two' for
|
|
103
|
+
//this normalization.
|
|
104
|
+
normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
|
|
105
|
+
name = normalizedBaseParts.concat(name);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//start trimDots
|
|
109
|
+
for (i = 0; i < name.length; i++) {
|
|
110
|
+
part = name[i];
|
|
111
|
+
if (part === '.') {
|
|
112
|
+
name.splice(i, 1);
|
|
113
|
+
i -= 1;
|
|
114
|
+
} else if (part === '..') {
|
|
115
|
+
// If at the start, or previous value is still ..,
|
|
116
|
+
// keep them so that when converted to a path it may
|
|
117
|
+
// still work when converted to a path, even though
|
|
118
|
+
// as an ID it is less than ideal. In larger point
|
|
119
|
+
// releases, may be better to just kick out an error.
|
|
120
|
+
if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
|
|
121
|
+
continue;
|
|
122
|
+
} else if (i > 0) {
|
|
123
|
+
name.splice(i - 1, 2);
|
|
124
|
+
i -= 2;
|
|
111
125
|
}
|
|
112
126
|
}
|
|
113
|
-
//end trimDots
|
|
114
|
-
|
|
115
|
-
name = name.join("/");
|
|
116
|
-
} else if (name.indexOf('./') === 0) {
|
|
117
|
-
// No baseName, so this is ID is resolved relative
|
|
118
|
-
// to baseUrl, pull off the leading dot.
|
|
119
|
-
name = name.substring(2);
|
|
120
127
|
}
|
|
128
|
+
//end trimDots
|
|
129
|
+
|
|
130
|
+
name = name.join('/');
|
|
121
131
|
}
|
|
122
132
|
|
|
123
133
|
//Apply map config if available.
|
|
@@ -230,32 +240,39 @@ var requirejs, require, define;
|
|
|
230
240
|
return [prefix, name];
|
|
231
241
|
}
|
|
232
242
|
|
|
243
|
+
//Creates a parts array for a relName where first part is plugin ID,
|
|
244
|
+
//second part is resource ID. Assumes relName has already been normalized.
|
|
245
|
+
function makeRelParts(relName) {
|
|
246
|
+
return relName ? splitPrefix(relName) : [];
|
|
247
|
+
}
|
|
248
|
+
|
|
233
249
|
/**
|
|
234
250
|
* Makes a name map, normalizing the name, and using a plugin
|
|
235
251
|
* for normalization if necessary. Grabs a ref to plugin
|
|
236
252
|
* too, as an optimization.
|
|
237
253
|
*/
|
|
238
|
-
makeMap = function (name,
|
|
254
|
+
makeMap = function (name, relParts) {
|
|
239
255
|
var plugin,
|
|
240
256
|
parts = splitPrefix(name),
|
|
241
|
-
prefix = parts[0]
|
|
257
|
+
prefix = parts[0],
|
|
258
|
+
relResourceName = relParts[1];
|
|
242
259
|
|
|
243
260
|
name = parts[1];
|
|
244
261
|
|
|
245
262
|
if (prefix) {
|
|
246
|
-
prefix = normalize(prefix,
|
|
263
|
+
prefix = normalize(prefix, relResourceName);
|
|
247
264
|
plugin = callDep(prefix);
|
|
248
265
|
}
|
|
249
266
|
|
|
250
267
|
//Normalize according
|
|
251
268
|
if (prefix) {
|
|
252
269
|
if (plugin && plugin.normalize) {
|
|
253
|
-
name = plugin.normalize(name, makeNormalize(
|
|
270
|
+
name = plugin.normalize(name, makeNormalize(relResourceName));
|
|
254
271
|
} else {
|
|
255
|
-
name = normalize(name,
|
|
272
|
+
name = normalize(name, relResourceName);
|
|
256
273
|
}
|
|
257
274
|
} else {
|
|
258
|
-
name = normalize(name,
|
|
275
|
+
name = normalize(name, relResourceName);
|
|
259
276
|
parts = splitPrefix(name);
|
|
260
277
|
prefix = parts[0];
|
|
261
278
|
name = parts[1];
|
|
@@ -302,13 +319,14 @@ var requirejs, require, define;
|
|
|
302
319
|
};
|
|
303
320
|
|
|
304
321
|
main = function (name, deps, callback, relName) {
|
|
305
|
-
var cjsModule, depName, ret, map, i,
|
|
322
|
+
var cjsModule, depName, ret, map, i, relParts,
|
|
306
323
|
args = [],
|
|
307
324
|
callbackType = typeof callback,
|
|
308
325
|
usingExports;
|
|
309
326
|
|
|
310
327
|
//Use name if no relName
|
|
311
328
|
relName = relName || name;
|
|
329
|
+
relParts = makeRelParts(relName);
|
|
312
330
|
|
|
313
331
|
//Call the callback to define the module, if necessary.
|
|
314
332
|
if (callbackType === 'undefined' || callbackType === 'function') {
|
|
@@ -317,7 +335,7 @@ var requirejs, require, define;
|
|
|
317
335
|
//Default to [require, exports, module] if no deps
|
|
318
336
|
deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
|
|
319
337
|
for (i = 0; i < deps.length; i += 1) {
|
|
320
|
-
map = makeMap(deps[i],
|
|
338
|
+
map = makeMap(deps[i], relParts);
|
|
321
339
|
depName = map.f;
|
|
322
340
|
|
|
323
341
|
//Fast path CommonJS standard dependencies.
|
|
@@ -373,7 +391,7 @@ var requirejs, require, define;
|
|
|
373
391
|
//deps arg is the module name, and second arg (if passed)
|
|
374
392
|
//is just the relName.
|
|
375
393
|
//Normalize module name, if it contains . or ..
|
|
376
|
-
return callDep(makeMap(deps, callback).f);
|
|
394
|
+
return callDep(makeMap(deps, makeRelParts(callback)).f);
|
|
377
395
|
} else if (!deps.splice) {
|
|
378
396
|
//deps is a config object, not an array.
|
|
379
397
|
config = deps;
|
|
@@ -556,10 +574,10 @@ S2.define('select2/utils',[
|
|
|
556
574
|
DecoratedClass.prototype = new ctr();
|
|
557
575
|
|
|
558
576
|
for (var m = 0; m < superMethods.length; m++) {
|
|
559
|
-
|
|
577
|
+
var superMethod = superMethods[m];
|
|
560
578
|
|
|
561
|
-
|
|
562
|
-
|
|
579
|
+
DecoratedClass.prototype[superMethod] =
|
|
580
|
+
SuperClass.prototype[superMethod];
|
|
563
581
|
}
|
|
564
582
|
|
|
565
583
|
var calledMethod = function (methodName) {
|
|
@@ -754,6 +772,70 @@ S2.define('select2/utils',[
|
|
|
754
772
|
$element.append($nodes);
|
|
755
773
|
};
|
|
756
774
|
|
|
775
|
+
// Cache objects in Utils.__cache instead of $.data (see #4346)
|
|
776
|
+
Utils.__cache = {};
|
|
777
|
+
|
|
778
|
+
var id = 0;
|
|
779
|
+
Utils.GetUniqueElementId = function (element) {
|
|
780
|
+
// Get a unique element Id. If element has no id,
|
|
781
|
+
// creates a new unique number, stores it in the id
|
|
782
|
+
// attribute and returns the new id.
|
|
783
|
+
// If an id already exists, it simply returns it.
|
|
784
|
+
|
|
785
|
+
var select2Id = element.getAttribute('data-select2-id');
|
|
786
|
+
if (select2Id == null) {
|
|
787
|
+
// If element has id, use it.
|
|
788
|
+
if (element.id) {
|
|
789
|
+
select2Id = element.id;
|
|
790
|
+
element.setAttribute('data-select2-id', select2Id);
|
|
791
|
+
} else {
|
|
792
|
+
element.setAttribute('data-select2-id', ++id);
|
|
793
|
+
select2Id = id.toString();
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
return select2Id;
|
|
797
|
+
};
|
|
798
|
+
|
|
799
|
+
Utils.StoreData = function (element, name, value) {
|
|
800
|
+
// Stores an item in the cache for a specified element.
|
|
801
|
+
// name is the cache key.
|
|
802
|
+
var id = Utils.GetUniqueElementId(element);
|
|
803
|
+
if (!Utils.__cache[id]) {
|
|
804
|
+
Utils.__cache[id] = {};
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
Utils.__cache[id][name] = value;
|
|
808
|
+
};
|
|
809
|
+
|
|
810
|
+
Utils.GetData = function (element, name) {
|
|
811
|
+
// Retrieves a value from the cache by its key (name)
|
|
812
|
+
// name is optional. If no name specified, return
|
|
813
|
+
// all cache items for the specified element.
|
|
814
|
+
// and for a specified element.
|
|
815
|
+
var id = Utils.GetUniqueElementId(element);
|
|
816
|
+
if (name) {
|
|
817
|
+
if (Utils.__cache[id]) {
|
|
818
|
+
if (Utils.__cache[id][name] != null) {
|
|
819
|
+
return Utils.__cache[id][name];
|
|
820
|
+
}
|
|
821
|
+
return $(element).data(name); // Fallback to HTML5 data attribs.
|
|
822
|
+
}
|
|
823
|
+
return $(element).data(name); // Fallback to HTML5 data attribs.
|
|
824
|
+
} else {
|
|
825
|
+
return Utils.__cache[id];
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
|
|
829
|
+
Utils.RemoveData = function (element) {
|
|
830
|
+
// Removes all cached items for a specified element.
|
|
831
|
+
var id = Utils.GetUniqueElementId(element);
|
|
832
|
+
if (Utils.__cache[id] != null) {
|
|
833
|
+
delete Utils.__cache[id];
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
element.removeAttribute('data-select2-id');
|
|
837
|
+
};
|
|
838
|
+
|
|
757
839
|
return Utils;
|
|
758
840
|
});
|
|
759
841
|
|
|
@@ -773,7 +855,7 @@ S2.define('select2/results',[
|
|
|
773
855
|
|
|
774
856
|
Results.prototype.render = function () {
|
|
775
857
|
var $results = $(
|
|
776
|
-
'<ul class="select2-results__options" role="
|
|
858
|
+
'<ul class="select2-results__options" role="listbox"></ul>'
|
|
777
859
|
);
|
|
778
860
|
|
|
779
861
|
if (this.options.get('multiple')) {
|
|
@@ -796,7 +878,7 @@ S2.define('select2/results',[
|
|
|
796
878
|
this.hideLoading();
|
|
797
879
|
|
|
798
880
|
var $message = $(
|
|
799
|
-
'<li role="
|
|
881
|
+
'<li role="alert" aria-live="assertive"' +
|
|
800
882
|
' class="select2-results__option"></li>'
|
|
801
883
|
);
|
|
802
884
|
|
|
@@ -889,7 +971,7 @@ S2.define('select2/results',[
|
|
|
889
971
|
$options.each(function () {
|
|
890
972
|
var $option = $(this);
|
|
891
973
|
|
|
892
|
-
var item =
|
|
974
|
+
var item = Utils.GetData(this, 'data');
|
|
893
975
|
|
|
894
976
|
// id needs to be converted to a string when comparing
|
|
895
977
|
var id = '' + item.id;
|
|
@@ -930,11 +1012,16 @@ S2.define('select2/results',[
|
|
|
930
1012
|
option.className = 'select2-results__option';
|
|
931
1013
|
|
|
932
1014
|
var attrs = {
|
|
933
|
-
'role': '
|
|
1015
|
+
'role': 'option',
|
|
934
1016
|
'aria-selected': 'false'
|
|
935
1017
|
};
|
|
936
1018
|
|
|
937
|
-
|
|
1019
|
+
var matches = window.Element.prototype.matches ||
|
|
1020
|
+
window.Element.prototype.msMatchesSelector ||
|
|
1021
|
+
window.Element.prototype.webkitMatchesSelector;
|
|
1022
|
+
|
|
1023
|
+
if ((data.element != null && matches.call(data.element, ':disabled')) ||
|
|
1024
|
+
(data.element == null && data.disabled)) {
|
|
938
1025
|
delete attrs['aria-selected'];
|
|
939
1026
|
attrs['aria-disabled'] = 'true';
|
|
940
1027
|
}
|
|
@@ -994,7 +1081,7 @@ S2.define('select2/results',[
|
|
|
994
1081
|
this.template(data, option);
|
|
995
1082
|
}
|
|
996
1083
|
|
|
997
|
-
|
|
1084
|
+
Utils.StoreData(option, 'data', data);
|
|
998
1085
|
|
|
999
1086
|
return option;
|
|
1000
1087
|
};
|
|
@@ -1035,7 +1122,10 @@ S2.define('select2/results',[
|
|
|
1035
1122
|
}
|
|
1036
1123
|
|
|
1037
1124
|
self.setClasses();
|
|
1038
|
-
|
|
1125
|
+
|
|
1126
|
+
if (self.options.get('scrollAfterSelect')) {
|
|
1127
|
+
self.highlightFirstItem();
|
|
1128
|
+
}
|
|
1039
1129
|
});
|
|
1040
1130
|
|
|
1041
1131
|
container.on('unselect', function () {
|
|
@@ -1044,7 +1134,10 @@ S2.define('select2/results',[
|
|
|
1044
1134
|
}
|
|
1045
1135
|
|
|
1046
1136
|
self.setClasses();
|
|
1047
|
-
|
|
1137
|
+
|
|
1138
|
+
if (self.options.get('scrollAfterSelect')) {
|
|
1139
|
+
self.highlightFirstItem();
|
|
1140
|
+
}
|
|
1048
1141
|
});
|
|
1049
1142
|
|
|
1050
1143
|
container.on('open', function () {
|
|
@@ -1080,7 +1173,7 @@ S2.define('select2/results',[
|
|
|
1080
1173
|
return;
|
|
1081
1174
|
}
|
|
1082
1175
|
|
|
1083
|
-
var data = $highlighted
|
|
1176
|
+
var data = Utils.GetData($highlighted[0], 'data');
|
|
1084
1177
|
|
|
1085
1178
|
if ($highlighted.attr('aria-selected') == 'true') {
|
|
1086
1179
|
self.trigger('close', {});
|
|
@@ -1098,8 +1191,9 @@ S2.define('select2/results',[
|
|
|
1098
1191
|
|
|
1099
1192
|
var currentIndex = $options.index($highlighted);
|
|
1100
1193
|
|
|
1101
|
-
// If we are already at
|
|
1102
|
-
|
|
1194
|
+
// If we are already at the top, don't move further
|
|
1195
|
+
// If no options, currentIndex will be -1
|
|
1196
|
+
if (currentIndex <= 0) {
|
|
1103
1197
|
return;
|
|
1104
1198
|
}
|
|
1105
1199
|
|
|
@@ -1192,7 +1286,7 @@ S2.define('select2/results',[
|
|
|
1192
1286
|
function (evt) {
|
|
1193
1287
|
var $this = $(this);
|
|
1194
1288
|
|
|
1195
|
-
var data =
|
|
1289
|
+
var data = Utils.GetData(this, 'data');
|
|
1196
1290
|
|
|
1197
1291
|
if ($this.attr('aria-selected') === 'true') {
|
|
1198
1292
|
if (self.options.get('multiple')) {
|
|
@@ -1215,7 +1309,7 @@ S2.define('select2/results',[
|
|
|
1215
1309
|
|
|
1216
1310
|
this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
|
|
1217
1311
|
function (evt) {
|
|
1218
|
-
var data =
|
|
1312
|
+
var data = Utils.GetData(this, 'data');
|
|
1219
1313
|
|
|
1220
1314
|
self.getHighlightedResults()
|
|
1221
1315
|
.removeClass('select2-results__option--highlighted');
|
|
@@ -1330,14 +1424,15 @@ S2.define('select2/selection/base',[
|
|
|
1330
1424
|
|
|
1331
1425
|
this._tabindex = 0;
|
|
1332
1426
|
|
|
1333
|
-
if (this.$element
|
|
1334
|
-
this._tabindex = this.$element
|
|
1427
|
+
if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
|
|
1428
|
+
this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
|
|
1335
1429
|
} else if (this.$element.attr('tabindex') != null) {
|
|
1336
1430
|
this._tabindex = this.$element.attr('tabindex');
|
|
1337
1431
|
}
|
|
1338
1432
|
|
|
1339
1433
|
$selection.attr('title', this.$element.attr('title'));
|
|
1340
1434
|
$selection.attr('tabindex', this._tabindex);
|
|
1435
|
+
$selection.attr('aria-disabled', 'false');
|
|
1341
1436
|
|
|
1342
1437
|
this.$selection = $selection;
|
|
1343
1438
|
|
|
@@ -1347,7 +1442,6 @@ S2.define('select2/selection/base',[
|
|
|
1347
1442
|
BaseSelection.prototype.bind = function (container, $container) {
|
|
1348
1443
|
var self = this;
|
|
1349
1444
|
|
|
1350
|
-
var id = container.id + '-container';
|
|
1351
1445
|
var resultsId = container.id + '-results';
|
|
1352
1446
|
|
|
1353
1447
|
this.container = container;
|
|
@@ -1390,17 +1484,19 @@ S2.define('select2/selection/base',[
|
|
|
1390
1484
|
self.$selection.removeAttr('aria-activedescendant');
|
|
1391
1485
|
self.$selection.removeAttr('aria-owns');
|
|
1392
1486
|
|
|
1393
|
-
self.$selection.focus
|
|
1487
|
+
self.$selection.trigger('focus');
|
|
1394
1488
|
|
|
1395
1489
|
self._detachCloseHandler(container);
|
|
1396
1490
|
});
|
|
1397
1491
|
|
|
1398
1492
|
container.on('enable', function () {
|
|
1399
1493
|
self.$selection.attr('tabindex', self._tabindex);
|
|
1494
|
+
self.$selection.attr('aria-disabled', 'false');
|
|
1400
1495
|
});
|
|
1401
1496
|
|
|
1402
1497
|
container.on('disable', function () {
|
|
1403
1498
|
self.$selection.attr('tabindex', '-1');
|
|
1499
|
+
self.$selection.attr('aria-disabled', 'true');
|
|
1404
1500
|
});
|
|
1405
1501
|
};
|
|
1406
1502
|
|
|
@@ -1423,7 +1519,6 @@ S2.define('select2/selection/base',[
|
|
|
1423
1519
|
};
|
|
1424
1520
|
|
|
1425
1521
|
BaseSelection.prototype._attachCloseHandler = function (container) {
|
|
1426
|
-
var self = this;
|
|
1427
1522
|
|
|
1428
1523
|
$(document.body).on('mousedown.select2.' + container.id, function (e) {
|
|
1429
1524
|
var $target = $(e.target);
|
|
@@ -1433,13 +1528,11 @@ S2.define('select2/selection/base',[
|
|
|
1433
1528
|
var $all = $('.select2.select2-container--open');
|
|
1434
1529
|
|
|
1435
1530
|
$all.each(function () {
|
|
1436
|
-
var $this = $(this);
|
|
1437
|
-
|
|
1438
1531
|
if (this == $select[0]) {
|
|
1439
1532
|
return;
|
|
1440
1533
|
}
|
|
1441
1534
|
|
|
1442
|
-
var $element =
|
|
1535
|
+
var $element = Utils.GetData(this, 'element');
|
|
1443
1536
|
|
|
1444
1537
|
$element.select2('close');
|
|
1445
1538
|
});
|
|
@@ -1463,6 +1556,27 @@ S2.define('select2/selection/base',[
|
|
|
1463
1556
|
throw new Error('The `update` method must be defined in child classes.');
|
|
1464
1557
|
};
|
|
1465
1558
|
|
|
1559
|
+
/**
|
|
1560
|
+
* Helper method to abstract the "enabled" (not "disabled") state of this
|
|
1561
|
+
* object.
|
|
1562
|
+
*
|
|
1563
|
+
* @return {true} if the instance is not disabled.
|
|
1564
|
+
* @return {false} if the instance is disabled.
|
|
1565
|
+
*/
|
|
1566
|
+
BaseSelection.prototype.isEnabled = function () {
|
|
1567
|
+
return !this.isDisabled();
|
|
1568
|
+
};
|
|
1569
|
+
|
|
1570
|
+
/**
|
|
1571
|
+
* Helper method to abstract the "disabled" state of this object.
|
|
1572
|
+
*
|
|
1573
|
+
* @return {true} if the disabled option is true.
|
|
1574
|
+
* @return {false} if the disabled option is false.
|
|
1575
|
+
*/
|
|
1576
|
+
BaseSelection.prototype.isDisabled = function () {
|
|
1577
|
+
return this.options.get('disabled');
|
|
1578
|
+
};
|
|
1579
|
+
|
|
1466
1580
|
return BaseSelection;
|
|
1467
1581
|
});
|
|
1468
1582
|
|
|
@@ -1500,7 +1614,10 @@ S2.define('select2/selection/single',[
|
|
|
1500
1614
|
|
|
1501
1615
|
var id = container.id + '-container';
|
|
1502
1616
|
|
|
1503
|
-
this.$selection.find('.select2-selection__rendered')
|
|
1617
|
+
this.$selection.find('.select2-selection__rendered')
|
|
1618
|
+
.attr('id', id)
|
|
1619
|
+
.attr('role', 'textbox')
|
|
1620
|
+
.attr('aria-readonly', 'true');
|
|
1504
1621
|
this.$selection.attr('aria-labelledby', id);
|
|
1505
1622
|
|
|
1506
1623
|
this.$selection.on('mousedown', function (evt) {
|
|
@@ -1524,17 +1641,15 @@ S2.define('select2/selection/single',[
|
|
|
1524
1641
|
|
|
1525
1642
|
container.on('focus', function (evt) {
|
|
1526
1643
|
if (!container.isOpen()) {
|
|
1527
|
-
self.$selection.focus
|
|
1644
|
+
self.$selection.trigger('focus');
|
|
1528
1645
|
}
|
|
1529
1646
|
});
|
|
1530
|
-
|
|
1531
|
-
container.on('selection:update', function (params) {
|
|
1532
|
-
self.update(params.data);
|
|
1533
|
-
});
|
|
1534
1647
|
};
|
|
1535
1648
|
|
|
1536
1649
|
SingleSelection.prototype.clear = function () {
|
|
1537
|
-
this.$selection.find('.select2-selection__rendered')
|
|
1650
|
+
var $rendered = this.$selection.find('.select2-selection__rendered');
|
|
1651
|
+
$rendered.empty();
|
|
1652
|
+
$rendered.removeAttr('title'); // clear tooltip on empty
|
|
1538
1653
|
};
|
|
1539
1654
|
|
|
1540
1655
|
SingleSelection.prototype.display = function (data, container) {
|
|
@@ -1560,7 +1675,14 @@ S2.define('select2/selection/single',[
|
|
|
1560
1675
|
var formatted = this.display(selection, $rendered);
|
|
1561
1676
|
|
|
1562
1677
|
$rendered.empty().append(formatted);
|
|
1563
|
-
|
|
1678
|
+
|
|
1679
|
+
var title = selection.title || selection.text;
|
|
1680
|
+
|
|
1681
|
+
if (title) {
|
|
1682
|
+
$rendered.attr('title', title);
|
|
1683
|
+
} else {
|
|
1684
|
+
$rendered.removeAttr('title');
|
|
1685
|
+
}
|
|
1564
1686
|
};
|
|
1565
1687
|
|
|
1566
1688
|
return SingleSelection;
|
|
@@ -1605,14 +1727,14 @@ S2.define('select2/selection/multiple',[
|
|
|
1605
1727
|
'.select2-selection__choice__remove',
|
|
1606
1728
|
function (evt) {
|
|
1607
1729
|
// Ignore the event if it is disabled
|
|
1608
|
-
if (self.
|
|
1730
|
+
if (self.isDisabled()) {
|
|
1609
1731
|
return;
|
|
1610
1732
|
}
|
|
1611
1733
|
|
|
1612
1734
|
var $remove = $(this);
|
|
1613
1735
|
var $selection = $remove.parent();
|
|
1614
1736
|
|
|
1615
|
-
var data = $selection
|
|
1737
|
+
var data = Utils.GetData($selection[0], 'data');
|
|
1616
1738
|
|
|
1617
1739
|
self.trigger('unselect', {
|
|
1618
1740
|
originalEvent: evt,
|
|
@@ -1623,7 +1745,9 @@ S2.define('select2/selection/multiple',[
|
|
|
1623
1745
|
};
|
|
1624
1746
|
|
|
1625
1747
|
MultipleSelection.prototype.clear = function () {
|
|
1626
|
-
this.$selection.find('.select2-selection__rendered')
|
|
1748
|
+
var $rendered = this.$selection.find('.select2-selection__rendered');
|
|
1749
|
+
$rendered.empty();
|
|
1750
|
+
$rendered.removeAttr('title');
|
|
1627
1751
|
};
|
|
1628
1752
|
|
|
1629
1753
|
MultipleSelection.prototype.display = function (data, container) {
|
|
@@ -1661,9 +1785,14 @@ S2.define('select2/selection/multiple',[
|
|
|
1661
1785
|
var formatted = this.display(selection, $selection);
|
|
1662
1786
|
|
|
1663
1787
|
$selection.append(formatted);
|
|
1664
|
-
$selection.prop('title', selection.title || selection.text);
|
|
1665
1788
|
|
|
1666
|
-
|
|
1789
|
+
var title = selection.title || selection.text;
|
|
1790
|
+
|
|
1791
|
+
if (title) {
|
|
1792
|
+
$selection.attr('title', title);
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
Utils.StoreData($selection[0], 'data', selection);
|
|
1667
1796
|
|
|
1668
1797
|
$selections.push($selection);
|
|
1669
1798
|
}
|
|
@@ -1728,8 +1857,9 @@ S2.define('select2/selection/placeholder',[
|
|
|
1728
1857
|
|
|
1729
1858
|
S2.define('select2/selection/allowClear',[
|
|
1730
1859
|
'jquery',
|
|
1731
|
-
'../keys'
|
|
1732
|
-
|
|
1860
|
+
'../keys',
|
|
1861
|
+
'../utils'
|
|
1862
|
+
], function ($, KEYS, Utils) {
|
|
1733
1863
|
function AllowClear () { }
|
|
1734
1864
|
|
|
1735
1865
|
AllowClear.prototype.bind = function (decorated, container, $container) {
|
|
@@ -1758,7 +1888,7 @@ S2.define('select2/selection/allowClear',[
|
|
|
1758
1888
|
|
|
1759
1889
|
AllowClear.prototype._handleClear = function (_, evt) {
|
|
1760
1890
|
// Ignore the event if it is disabled
|
|
1761
|
-
if (this.
|
|
1891
|
+
if (this.isDisabled()) {
|
|
1762
1892
|
return;
|
|
1763
1893
|
}
|
|
1764
1894
|
|
|
@@ -1771,10 +1901,22 @@ S2.define('select2/selection/allowClear',[
|
|
|
1771
1901
|
|
|
1772
1902
|
evt.stopPropagation();
|
|
1773
1903
|
|
|
1774
|
-
var data = $clear
|
|
1904
|
+
var data = Utils.GetData($clear[0], 'data');
|
|
1905
|
+
|
|
1906
|
+
var previousVal = this.$element.val();
|
|
1907
|
+
this.$element.val(this.placeholder.id);
|
|
1908
|
+
|
|
1909
|
+
var unselectData = {
|
|
1910
|
+
data: data
|
|
1911
|
+
};
|
|
1912
|
+
this.trigger('clear', unselectData);
|
|
1913
|
+
if (unselectData.prevented) {
|
|
1914
|
+
this.$element.val(previousVal);
|
|
1915
|
+
return;
|
|
1916
|
+
}
|
|
1775
1917
|
|
|
1776
1918
|
for (var d = 0; d < data.length; d++) {
|
|
1777
|
-
|
|
1919
|
+
unselectData = {
|
|
1778
1920
|
data: data[d]
|
|
1779
1921
|
};
|
|
1780
1922
|
|
|
@@ -1784,11 +1926,12 @@ S2.define('select2/selection/allowClear',[
|
|
|
1784
1926
|
|
|
1785
1927
|
// If the event was prevented, don't clear it out.
|
|
1786
1928
|
if (unselectData.prevented) {
|
|
1929
|
+
this.$element.val(previousVal);
|
|
1787
1930
|
return;
|
|
1788
1931
|
}
|
|
1789
1932
|
}
|
|
1790
1933
|
|
|
1791
|
-
this.$element.
|
|
1934
|
+
this.$element.trigger('input').trigger('change');
|
|
1792
1935
|
|
|
1793
1936
|
this.trigger('toggle', {});
|
|
1794
1937
|
};
|
|
@@ -1811,12 +1954,14 @@ S2.define('select2/selection/allowClear',[
|
|
|
1811
1954
|
return;
|
|
1812
1955
|
}
|
|
1813
1956
|
|
|
1957
|
+
var removeAll = this.options.get('translations').get('removeAllItems');
|
|
1958
|
+
|
|
1814
1959
|
var $remove = $(
|
|
1815
|
-
'<span class="select2-selection__clear">' +
|
|
1960
|
+
'<span class="select2-selection__clear" title="' + removeAll() +'">' +
|
|
1816
1961
|
'×' +
|
|
1817
1962
|
'</span>'
|
|
1818
1963
|
);
|
|
1819
|
-
$remove
|
|
1964
|
+
Utils.StoreData($remove[0], 'data', data);
|
|
1820
1965
|
|
|
1821
1966
|
this.$selection.find('.select2-selection__rendered').prepend($remove);
|
|
1822
1967
|
};
|
|
@@ -1837,8 +1982,8 @@ S2.define('select2/selection/search',[
|
|
|
1837
1982
|
var $search = $(
|
|
1838
1983
|
'<li class="select2-search select2-search--inline">' +
|
|
1839
1984
|
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
|
1840
|
-
' autocomplete="off" autocorrect="off" autocapitalize="
|
|
1841
|
-
' spellcheck="false" role="
|
|
1985
|
+
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
|
1986
|
+
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
|
1842
1987
|
'</li>'
|
|
1843
1988
|
);
|
|
1844
1989
|
|
|
@@ -1855,14 +2000,18 @@ S2.define('select2/selection/search',[
|
|
|
1855
2000
|
Search.prototype.bind = function (decorated, container, $container) {
|
|
1856
2001
|
var self = this;
|
|
1857
2002
|
|
|
2003
|
+
var resultsId = container.id + '-results';
|
|
2004
|
+
|
|
1858
2005
|
decorated.call(this, container, $container);
|
|
1859
2006
|
|
|
1860
2007
|
container.on('open', function () {
|
|
2008
|
+
self.$search.attr('aria-controls', resultsId);
|
|
1861
2009
|
self.$search.trigger('focus');
|
|
1862
2010
|
});
|
|
1863
2011
|
|
|
1864
2012
|
container.on('close', function () {
|
|
1865
2013
|
self.$search.val('');
|
|
2014
|
+
self.$search.removeAttr('aria-controls');
|
|
1866
2015
|
self.$search.removeAttr('aria-activedescendant');
|
|
1867
2016
|
self.$search.trigger('focus');
|
|
1868
2017
|
});
|
|
@@ -1882,7 +2031,11 @@ S2.define('select2/selection/search',[
|
|
|
1882
2031
|
});
|
|
1883
2032
|
|
|
1884
2033
|
container.on('results:focus', function (params) {
|
|
1885
|
-
|
|
2034
|
+
if (params.data._resultId) {
|
|
2035
|
+
self.$search.attr('aria-activedescendant', params.data._resultId);
|
|
2036
|
+
} else {
|
|
2037
|
+
self.$search.removeAttr('aria-activedescendant');
|
|
2038
|
+
}
|
|
1886
2039
|
});
|
|
1887
2040
|
|
|
1888
2041
|
this.$selection.on('focusin', '.select2-search--inline', function (evt) {
|
|
@@ -1907,7 +2060,7 @@ S2.define('select2/selection/search',[
|
|
|
1907
2060
|
.prev('.select2-selection__choice');
|
|
1908
2061
|
|
|
1909
2062
|
if ($previousChoice.length > 0) {
|
|
1910
|
-
var item = $previousChoice
|
|
2063
|
+
var item = Utils.GetData($previousChoice[0], 'data');
|
|
1911
2064
|
|
|
1912
2065
|
self.searchRemoveChoice(item);
|
|
1913
2066
|
|
|
@@ -1916,6 +2069,12 @@ S2.define('select2/selection/search',[
|
|
|
1916
2069
|
}
|
|
1917
2070
|
});
|
|
1918
2071
|
|
|
2072
|
+
this.$selection.on('click', '.select2-search--inline', function (evt) {
|
|
2073
|
+
if (self.$search.val()) {
|
|
2074
|
+
evt.stopPropagation();
|
|
2075
|
+
}
|
|
2076
|
+
});
|
|
2077
|
+
|
|
1919
2078
|
// Try to detect the IE version should the `documentMode` property that
|
|
1920
2079
|
// is stored on the document. This is only implemented in IE and is
|
|
1921
2080
|
// slightly cleaner than doing a user agent check.
|
|
@@ -2001,7 +2160,7 @@ S2.define('select2/selection/search',[
|
|
|
2001
2160
|
|
|
2002
2161
|
this.resizeSearch();
|
|
2003
2162
|
if (searchHadFocus) {
|
|
2004
|
-
this.$search.focus
|
|
2163
|
+
this.$search.trigger('focus');
|
|
2005
2164
|
}
|
|
2006
2165
|
};
|
|
2007
2166
|
|
|
@@ -2034,7 +2193,7 @@ S2.define('select2/selection/search',[
|
|
|
2034
2193
|
var width = '';
|
|
2035
2194
|
|
|
2036
2195
|
if (this.$search.attr('placeholder') !== '') {
|
|
2037
|
-
width = this.$selection.find('.select2-selection__rendered').
|
|
2196
|
+
width = this.$selection.find('.select2-selection__rendered').width();
|
|
2038
2197
|
} else {
|
|
2039
2198
|
var minimumWidth = this.$search.val().length + 1;
|
|
2040
2199
|
|
|
@@ -2058,10 +2217,13 @@ S2.define('select2/selection/eventRelay',[
|
|
|
2058
2217
|
'open', 'opening',
|
|
2059
2218
|
'close', 'closing',
|
|
2060
2219
|
'select', 'selecting',
|
|
2061
|
-
'unselect', 'unselecting'
|
|
2220
|
+
'unselect', 'unselecting',
|
|
2221
|
+
'clear', 'clearing'
|
|
2062
2222
|
];
|
|
2063
2223
|
|
|
2064
|
-
var preventableEvents = [
|
|
2224
|
+
var preventableEvents = [
|
|
2225
|
+
'opening', 'closing', 'selecting', 'unselecting', 'clearing'
|
|
2226
|
+
];
|
|
2065
2227
|
|
|
2066
2228
|
decorated.call(this, container, $container);
|
|
2067
2229
|
|
|
@@ -2394,6 +2556,7 @@ S2.define('select2/diacritics',[
|
|
|
2394
2556
|
'\u019F': 'O',
|
|
2395
2557
|
'\uA74A': 'O',
|
|
2396
2558
|
'\uA74C': 'O',
|
|
2559
|
+
'\u0152': 'OE',
|
|
2397
2560
|
'\u01A2': 'OI',
|
|
2398
2561
|
'\uA74E': 'OO',
|
|
2399
2562
|
'\u0222': 'OU',
|
|
@@ -2803,6 +2966,7 @@ S2.define('select2/diacritics',[
|
|
|
2803
2966
|
'\uA74B': 'o',
|
|
2804
2967
|
'\uA74D': 'o',
|
|
2805
2968
|
'\u0275': 'o',
|
|
2969
|
+
'\u0153': 'oe',
|
|
2806
2970
|
'\u01A3': 'oi',
|
|
2807
2971
|
'\u0223': 'ou',
|
|
2808
2972
|
'\uA74F': 'oo',
|
|
@@ -2971,8 +3135,9 @@ S2.define('select2/diacritics',[
|
|
|
2971
3135
|
'\u03CD': '\u03C5',
|
|
2972
3136
|
'\u03CB': '\u03C5',
|
|
2973
3137
|
'\u03B0': '\u03C5',
|
|
2974
|
-
'\
|
|
2975
|
-
'\u03C2': '\u03C3'
|
|
3138
|
+
'\u03CE': '\u03C9',
|
|
3139
|
+
'\u03C2': '\u03C3',
|
|
3140
|
+
'\u2019': '\''
|
|
2976
3141
|
};
|
|
2977
3142
|
|
|
2978
3143
|
return diacritics;
|
|
@@ -3057,7 +3222,7 @@ S2.define('select2/data/select',[
|
|
|
3057
3222
|
if ($(data.element).is('option')) {
|
|
3058
3223
|
data.element.selected = true;
|
|
3059
3224
|
|
|
3060
|
-
this.$element.trigger('change');
|
|
3225
|
+
this.$element.trigger('input').trigger('change');
|
|
3061
3226
|
|
|
3062
3227
|
return;
|
|
3063
3228
|
}
|
|
@@ -3078,13 +3243,13 @@ S2.define('select2/data/select',[
|
|
|
3078
3243
|
}
|
|
3079
3244
|
|
|
3080
3245
|
self.$element.val(val);
|
|
3081
|
-
self.$element.trigger('change');
|
|
3246
|
+
self.$element.trigger('input').trigger('change');
|
|
3082
3247
|
});
|
|
3083
3248
|
} else {
|
|
3084
3249
|
var val = data.id;
|
|
3085
3250
|
|
|
3086
3251
|
this.$element.val(val);
|
|
3087
|
-
this.$element.trigger('change');
|
|
3252
|
+
this.$element.trigger('input').trigger('change');
|
|
3088
3253
|
}
|
|
3089
3254
|
};
|
|
3090
3255
|
|
|
@@ -3100,7 +3265,7 @@ S2.define('select2/data/select',[
|
|
|
3100
3265
|
if ($(data.element).is('option')) {
|
|
3101
3266
|
data.element.selected = false;
|
|
3102
3267
|
|
|
3103
|
-
this.$element.trigger('change');
|
|
3268
|
+
this.$element.trigger('input').trigger('change');
|
|
3104
3269
|
|
|
3105
3270
|
return;
|
|
3106
3271
|
}
|
|
@@ -3118,7 +3283,7 @@ S2.define('select2/data/select',[
|
|
|
3118
3283
|
|
|
3119
3284
|
self.$element.val(val);
|
|
3120
3285
|
|
|
3121
|
-
self.$element.trigger('change');
|
|
3286
|
+
self.$element.trigger('input').trigger('change');
|
|
3122
3287
|
});
|
|
3123
3288
|
};
|
|
3124
3289
|
|
|
@@ -3140,7 +3305,7 @@ S2.define('select2/data/select',[
|
|
|
3140
3305
|
// Remove anything added to child elements
|
|
3141
3306
|
this.$element.find('*').each(function () {
|
|
3142
3307
|
// Remove any custom data set by Select2
|
|
3143
|
-
|
|
3308
|
+
Utils.RemoveData(this);
|
|
3144
3309
|
});
|
|
3145
3310
|
};
|
|
3146
3311
|
|
|
@@ -3191,7 +3356,7 @@ S2.define('select2/data/select',[
|
|
|
3191
3356
|
}
|
|
3192
3357
|
}
|
|
3193
3358
|
|
|
3194
|
-
if (data.id) {
|
|
3359
|
+
if (data.id !== undefined) {
|
|
3195
3360
|
option.value = data.id;
|
|
3196
3361
|
}
|
|
3197
3362
|
|
|
@@ -3213,7 +3378,7 @@ S2.define('select2/data/select',[
|
|
|
3213
3378
|
normalizedData.element = option;
|
|
3214
3379
|
|
|
3215
3380
|
// Override the option's data with the combined data
|
|
3216
|
-
|
|
3381
|
+
Utils.StoreData(option, 'data', normalizedData);
|
|
3217
3382
|
|
|
3218
3383
|
return $option;
|
|
3219
3384
|
};
|
|
@@ -3221,7 +3386,7 @@ S2.define('select2/data/select',[
|
|
|
3221
3386
|
SelectAdapter.prototype.item = function ($option) {
|
|
3222
3387
|
var data = {};
|
|
3223
3388
|
|
|
3224
|
-
data =
|
|
3389
|
+
data = Utils.GetData($option[0], 'data');
|
|
3225
3390
|
|
|
3226
3391
|
if (data != null) {
|
|
3227
3392
|
return data;
|
|
@@ -3259,13 +3424,13 @@ S2.define('select2/data/select',[
|
|
|
3259
3424
|
data = this._normalizeItem(data);
|
|
3260
3425
|
data.element = $option[0];
|
|
3261
3426
|
|
|
3262
|
-
|
|
3427
|
+
Utils.StoreData($option[0], 'data', data);
|
|
3263
3428
|
|
|
3264
3429
|
return data;
|
|
3265
3430
|
};
|
|
3266
3431
|
|
|
3267
3432
|
SelectAdapter.prototype._normalizeItem = function (item) {
|
|
3268
|
-
if (
|
|
3433
|
+
if (item !== Object(item)) {
|
|
3269
3434
|
item = {
|
|
3270
3435
|
id: item,
|
|
3271
3436
|
text: item
|
|
@@ -3311,15 +3476,19 @@ S2.define('select2/data/array',[
|
|
|
3311
3476
|
'jquery'
|
|
3312
3477
|
], function (SelectAdapter, Utils, $) {
|
|
3313
3478
|
function ArrayAdapter ($element, options) {
|
|
3314
|
-
|
|
3479
|
+
this._dataToConvert = options.get('data') || [];
|
|
3315
3480
|
|
|
3316
3481
|
ArrayAdapter.__super__.constructor.call(this, $element, options);
|
|
3317
|
-
|
|
3318
|
-
this.addOptions(this.convertToOptions(data));
|
|
3319
3482
|
}
|
|
3320
3483
|
|
|
3321
3484
|
Utils.Extend(ArrayAdapter, SelectAdapter);
|
|
3322
3485
|
|
|
3486
|
+
ArrayAdapter.prototype.bind = function (container, $container) {
|
|
3487
|
+
ArrayAdapter.__super__.bind.call(this, container, $container);
|
|
3488
|
+
|
|
3489
|
+
this.addOptions(this.convertToOptions(this._dataToConvert));
|
|
3490
|
+
};
|
|
3491
|
+
|
|
3323
3492
|
ArrayAdapter.prototype.select = function (data) {
|
|
3324
3493
|
var $option = this.$element.find('option').filter(function (i, elm) {
|
|
3325
3494
|
return elm.value == data.id.toString();
|
|
@@ -3469,7 +3638,8 @@ S2.define('select2/data/ajax',[
|
|
|
3469
3638
|
}, function () {
|
|
3470
3639
|
// Attempt to detect if a request was aborted
|
|
3471
3640
|
// Only works if the transport exposes a status property
|
|
3472
|
-
if (
|
|
3641
|
+
if ('status' in $request &&
|
|
3642
|
+
($request.status === 0 || $request.status === '0')) {
|
|
3473
3643
|
return;
|
|
3474
3644
|
}
|
|
3475
3645
|
|
|
@@ -3550,7 +3720,10 @@ S2.define('select2/data/tags',[
|
|
|
3550
3720
|
}, true)
|
|
3551
3721
|
);
|
|
3552
3722
|
|
|
3553
|
-
var
|
|
3723
|
+
var optionText = (option.text || '').toUpperCase();
|
|
3724
|
+
var paramsTerm = (params.term || '').toUpperCase();
|
|
3725
|
+
|
|
3726
|
+
var checkText = optionText === paramsTerm;
|
|
3554
3727
|
|
|
3555
3728
|
if (checkText || checkChildren) {
|
|
3556
3729
|
if (child) {
|
|
@@ -3605,8 +3778,6 @@ S2.define('select2/data/tags',[
|
|
|
3605
3778
|
};
|
|
3606
3779
|
|
|
3607
3780
|
Tags.prototype._removeOldTags = function (_) {
|
|
3608
|
-
var tag = this._lastTag;
|
|
3609
|
-
|
|
3610
3781
|
var $options = this.$element.find('option[data-select2-tag]');
|
|
3611
3782
|
|
|
3612
3783
|
$options.each(function () {
|
|
@@ -3681,7 +3852,7 @@ S2.define('select2/data/tokenizer',[
|
|
|
3681
3852
|
// Replace the search term if we have the search box
|
|
3682
3853
|
if (this.$search.length) {
|
|
3683
3854
|
this.$search.val(tokenData.term);
|
|
3684
|
-
this.$search.focus
|
|
3855
|
+
this.$search.trigger('focus');
|
|
3685
3856
|
}
|
|
3686
3857
|
|
|
3687
3858
|
params.term = tokenData.term;
|
|
@@ -3810,10 +3981,30 @@ S2.define('select2/data/maximumSelectionLength',[
|
|
|
3810
3981
|
decorated.call(this, $e, options);
|
|
3811
3982
|
}
|
|
3812
3983
|
|
|
3984
|
+
MaximumSelectionLength.prototype.bind =
|
|
3985
|
+
function (decorated, container, $container) {
|
|
3986
|
+
var self = this;
|
|
3987
|
+
|
|
3988
|
+
decorated.call(this, container, $container);
|
|
3989
|
+
|
|
3990
|
+
container.on('select', function () {
|
|
3991
|
+
self._checkIfMaximumSelected();
|
|
3992
|
+
});
|
|
3993
|
+
};
|
|
3994
|
+
|
|
3813
3995
|
MaximumSelectionLength.prototype.query =
|
|
3814
3996
|
function (decorated, params, callback) {
|
|
3815
3997
|
var self = this;
|
|
3816
3998
|
|
|
3999
|
+
this._checkIfMaximumSelected(function () {
|
|
4000
|
+
decorated.call(self, params, callback);
|
|
4001
|
+
});
|
|
4002
|
+
};
|
|
4003
|
+
|
|
4004
|
+
MaximumSelectionLength.prototype._checkIfMaximumSelected =
|
|
4005
|
+
function (_, successCallback) {
|
|
4006
|
+
var self = this;
|
|
4007
|
+
|
|
3817
4008
|
this.current(function (currentData) {
|
|
3818
4009
|
var count = currentData != null ? currentData.length : 0;
|
|
3819
4010
|
if (self.maximumSelectionLength > 0 &&
|
|
@@ -3826,7 +4017,10 @@ S2.define('select2/data/maximumSelectionLength',[
|
|
|
3826
4017
|
});
|
|
3827
4018
|
return;
|
|
3828
4019
|
}
|
|
3829
|
-
|
|
4020
|
+
|
|
4021
|
+
if (successCallback) {
|
|
4022
|
+
successCallback();
|
|
4023
|
+
}
|
|
3830
4024
|
});
|
|
3831
4025
|
};
|
|
3832
4026
|
|
|
@@ -3865,7 +4059,7 @@ S2.define('select2/dropdown',[
|
|
|
3865
4059
|
};
|
|
3866
4060
|
|
|
3867
4061
|
Dropdown.prototype.position = function ($dropdown, $container) {
|
|
3868
|
-
// Should be
|
|
4062
|
+
// Should be implemented in subclasses
|
|
3869
4063
|
};
|
|
3870
4064
|
|
|
3871
4065
|
Dropdown.prototype.destroy = function () {
|
|
@@ -3888,8 +4082,8 @@ S2.define('select2/dropdown/search',[
|
|
|
3888
4082
|
var $search = $(
|
|
3889
4083
|
'<span class="select2-search select2-search--dropdown">' +
|
|
3890
4084
|
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
|
3891
|
-
' autocomplete="off" autocorrect="off" autocapitalize="
|
|
3892
|
-
' spellcheck="false" role="
|
|
4085
|
+
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
|
4086
|
+
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
|
3893
4087
|
'</span>'
|
|
3894
4088
|
);
|
|
3895
4089
|
|
|
@@ -3904,6 +4098,8 @@ S2.define('select2/dropdown/search',[
|
|
|
3904
4098
|
Search.prototype.bind = function (decorated, container, $container) {
|
|
3905
4099
|
var self = this;
|
|
3906
4100
|
|
|
4101
|
+
var resultsId = container.id + '-results';
|
|
4102
|
+
|
|
3907
4103
|
decorated.call(this, container, $container);
|
|
3908
4104
|
|
|
3909
4105
|
this.$search.on('keydown', function (evt) {
|
|
@@ -3926,23 +4122,27 @@ S2.define('select2/dropdown/search',[
|
|
|
3926
4122
|
|
|
3927
4123
|
container.on('open', function () {
|
|
3928
4124
|
self.$search.attr('tabindex', 0);
|
|
4125
|
+
self.$search.attr('aria-controls', resultsId);
|
|
3929
4126
|
|
|
3930
|
-
self.$search.focus
|
|
4127
|
+
self.$search.trigger('focus');
|
|
3931
4128
|
|
|
3932
4129
|
window.setTimeout(function () {
|
|
3933
|
-
self.$search.focus
|
|
4130
|
+
self.$search.trigger('focus');
|
|
3934
4131
|
}, 0);
|
|
3935
4132
|
});
|
|
3936
4133
|
|
|
3937
4134
|
container.on('close', function () {
|
|
3938
4135
|
self.$search.attr('tabindex', -1);
|
|
4136
|
+
self.$search.removeAttr('aria-controls');
|
|
4137
|
+
self.$search.removeAttr('aria-activedescendant');
|
|
3939
4138
|
|
|
3940
4139
|
self.$search.val('');
|
|
4140
|
+
self.$search.trigger('blur');
|
|
3941
4141
|
});
|
|
3942
4142
|
|
|
3943
4143
|
container.on('focus', function () {
|
|
3944
|
-
if (container.isOpen()) {
|
|
3945
|
-
self.$search.focus
|
|
4144
|
+
if (!container.isOpen()) {
|
|
4145
|
+
self.$search.trigger('focus');
|
|
3946
4146
|
}
|
|
3947
4147
|
});
|
|
3948
4148
|
|
|
@@ -3957,6 +4157,14 @@ S2.define('select2/dropdown/search',[
|
|
|
3957
4157
|
}
|
|
3958
4158
|
}
|
|
3959
4159
|
});
|
|
4160
|
+
|
|
4161
|
+
container.on('results:focus', function (params) {
|
|
4162
|
+
if (params.data._resultId) {
|
|
4163
|
+
self.$search.attr('aria-activedescendant', params.data._resultId);
|
|
4164
|
+
} else {
|
|
4165
|
+
self.$search.removeAttr('aria-activedescendant');
|
|
4166
|
+
}
|
|
4167
|
+
});
|
|
3960
4168
|
};
|
|
3961
4169
|
|
|
3962
4170
|
Search.prototype.handleSearch = function (evt) {
|
|
@@ -4041,6 +4249,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
|
|
4041
4249
|
|
|
4042
4250
|
if (this.showLoadingMore(data)) {
|
|
4043
4251
|
this.$results.append(this.$loadingMore);
|
|
4252
|
+
this.loadMoreIfNeeded();
|
|
4044
4253
|
}
|
|
4045
4254
|
};
|
|
4046
4255
|
|
|
@@ -4059,25 +4268,27 @@ S2.define('select2/dropdown/infiniteScroll',[
|
|
|
4059
4268
|
self.loading = true;
|
|
4060
4269
|
});
|
|
4061
4270
|
|
|
4062
|
-
this.$results.on('scroll',
|
|
4063
|
-
|
|
4064
|
-
document.documentElement,
|
|
4065
|
-
self.$loadingMore[0]
|
|
4066
|
-
);
|
|
4271
|
+
this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
|
|
4272
|
+
};
|
|
4067
4273
|
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4274
|
+
InfiniteScroll.prototype.loadMoreIfNeeded = function () {
|
|
4275
|
+
var isLoadMoreVisible = $.contains(
|
|
4276
|
+
document.documentElement,
|
|
4277
|
+
this.$loadingMore[0]
|
|
4278
|
+
);
|
|
4071
4279
|
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
self.$loadingMore.outerHeight(false);
|
|
4280
|
+
if (this.loading || !isLoadMoreVisible) {
|
|
4281
|
+
return;
|
|
4282
|
+
}
|
|
4076
4283
|
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4284
|
+
var currentOffset = this.$results.offset().top +
|
|
4285
|
+
this.$results.outerHeight(false);
|
|
4286
|
+
var loadingMoreOffset = this.$loadingMore.offset().top +
|
|
4287
|
+
this.$loadingMore.outerHeight(false);
|
|
4288
|
+
|
|
4289
|
+
if (currentOffset + 50 >= loadingMoreOffset) {
|
|
4290
|
+
this.loadMore();
|
|
4291
|
+
}
|
|
4081
4292
|
};
|
|
4082
4293
|
|
|
4083
4294
|
InfiniteScroll.prototype.loadMore = function () {
|
|
@@ -4098,7 +4309,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
|
|
4098
4309
|
var $option = $(
|
|
4099
4310
|
'<li ' +
|
|
4100
4311
|
'class="select2-results__option select2-results__option--load-more"' +
|
|
4101
|
-
'role="
|
|
4312
|
+
'role="option" aria-disabled="true"></li>'
|
|
4102
4313
|
);
|
|
4103
4314
|
|
|
4104
4315
|
var message = this.options.get('translations').get('loadingMore');
|
|
@@ -4116,7 +4327,7 @@ S2.define('select2/dropdown/attachBody',[
|
|
|
4116
4327
|
'../utils'
|
|
4117
4328
|
], function ($, Utils) {
|
|
4118
4329
|
function AttachBody (decorated, $element, options) {
|
|
4119
|
-
this.$dropdownParent = options.get('dropdownParent') ||
|
|
4330
|
+
this.$dropdownParent = $(options.get('dropdownParent') || document.body);
|
|
4120
4331
|
|
|
4121
4332
|
decorated.call(this, $element, options);
|
|
4122
4333
|
}
|
|
@@ -4124,27 +4335,14 @@ S2.define('select2/dropdown/attachBody',[
|
|
|
4124
4335
|
AttachBody.prototype.bind = function (decorated, container, $container) {
|
|
4125
4336
|
var self = this;
|
|
4126
4337
|
|
|
4127
|
-
var setupResultsEvents = false;
|
|
4128
|
-
|
|
4129
4338
|
decorated.call(this, container, $container);
|
|
4130
4339
|
|
|
4131
4340
|
container.on('open', function () {
|
|
4132
4341
|
self._showDropdown();
|
|
4133
4342
|
self._attachPositioningHandler(container);
|
|
4134
4343
|
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
container.on('results:all', function () {
|
|
4139
|
-
self._positionDropdown();
|
|
4140
|
-
self._resizeDropdown();
|
|
4141
|
-
});
|
|
4142
|
-
|
|
4143
|
-
container.on('results:append', function () {
|
|
4144
|
-
self._positionDropdown();
|
|
4145
|
-
self._resizeDropdown();
|
|
4146
|
-
});
|
|
4147
|
-
}
|
|
4344
|
+
// Must bind after the results handlers to ensure correct sizing
|
|
4345
|
+
self._bindContainerResultHandlers(container);
|
|
4148
4346
|
});
|
|
4149
4347
|
|
|
4150
4348
|
container.on('close', function () {
|
|
@@ -4193,6 +4391,44 @@ S2.define('select2/dropdown/attachBody',[
|
|
|
4193
4391
|
this.$dropdownContainer.detach();
|
|
4194
4392
|
};
|
|
4195
4393
|
|
|
4394
|
+
AttachBody.prototype._bindContainerResultHandlers =
|
|
4395
|
+
function (decorated, container) {
|
|
4396
|
+
|
|
4397
|
+
// These should only be bound once
|
|
4398
|
+
if (this._containerResultsHandlersBound) {
|
|
4399
|
+
return;
|
|
4400
|
+
}
|
|
4401
|
+
|
|
4402
|
+
var self = this;
|
|
4403
|
+
|
|
4404
|
+
container.on('results:all', function () {
|
|
4405
|
+
self._positionDropdown();
|
|
4406
|
+
self._resizeDropdown();
|
|
4407
|
+
});
|
|
4408
|
+
|
|
4409
|
+
container.on('results:append', function () {
|
|
4410
|
+
self._positionDropdown();
|
|
4411
|
+
self._resizeDropdown();
|
|
4412
|
+
});
|
|
4413
|
+
|
|
4414
|
+
container.on('results:message', function () {
|
|
4415
|
+
self._positionDropdown();
|
|
4416
|
+
self._resizeDropdown();
|
|
4417
|
+
});
|
|
4418
|
+
|
|
4419
|
+
container.on('select', function () {
|
|
4420
|
+
self._positionDropdown();
|
|
4421
|
+
self._resizeDropdown();
|
|
4422
|
+
});
|
|
4423
|
+
|
|
4424
|
+
container.on('unselect', function () {
|
|
4425
|
+
self._positionDropdown();
|
|
4426
|
+
self._resizeDropdown();
|
|
4427
|
+
});
|
|
4428
|
+
|
|
4429
|
+
this._containerResultsHandlersBound = true;
|
|
4430
|
+
};
|
|
4431
|
+
|
|
4196
4432
|
AttachBody.prototype._attachPositioningHandler =
|
|
4197
4433
|
function (decorated, container) {
|
|
4198
4434
|
var self = this;
|
|
@@ -4203,14 +4439,14 @@ S2.define('select2/dropdown/attachBody',[
|
|
|
4203
4439
|
|
|
4204
4440
|
var $watchers = this.$container.parents().filter(Utils.hasScroll);
|
|
4205
4441
|
$watchers.each(function () {
|
|
4206
|
-
|
|
4442
|
+
Utils.StoreData(this, 'select2-scroll-position', {
|
|
4207
4443
|
x: $(this).scrollLeft(),
|
|
4208
4444
|
y: $(this).scrollTop()
|
|
4209
4445
|
});
|
|
4210
4446
|
});
|
|
4211
4447
|
|
|
4212
4448
|
$watchers.on(scrollEvent, function (ev) {
|
|
4213
|
-
var position =
|
|
4449
|
+
var position = Utils.GetData(this, 'select2-scroll-position');
|
|
4214
4450
|
$(this).scrollTop(position.y);
|
|
4215
4451
|
});
|
|
4216
4452
|
|
|
@@ -4269,16 +4505,26 @@ S2.define('select2/dropdown/attachBody',[
|
|
|
4269
4505
|
top: container.bottom
|
|
4270
4506
|
};
|
|
4271
4507
|
|
|
4272
|
-
// Determine what the parent element is to use for
|
|
4508
|
+
// Determine what the parent element is to use for calculating the offset
|
|
4273
4509
|
var $offsetParent = this.$dropdownParent;
|
|
4274
4510
|
|
|
4275
|
-
// For statically
|
|
4511
|
+
// For statically positioned elements, we need to get the element
|
|
4276
4512
|
// that is determining the offset
|
|
4277
4513
|
if ($offsetParent.css('position') === 'static') {
|
|
4278
4514
|
$offsetParent = $offsetParent.offsetParent();
|
|
4279
4515
|
}
|
|
4280
4516
|
|
|
4281
|
-
var parentOffset =
|
|
4517
|
+
var parentOffset = {
|
|
4518
|
+
top: 0,
|
|
4519
|
+
left: 0
|
|
4520
|
+
};
|
|
4521
|
+
|
|
4522
|
+
if (
|
|
4523
|
+
$.contains(document.body, $offsetParent[0]) ||
|
|
4524
|
+
$offsetParent[0].isConnected
|
|
4525
|
+
) {
|
|
4526
|
+
parentOffset = $offsetParent.offset();
|
|
4527
|
+
}
|
|
4282
4528
|
|
|
4283
4529
|
css.top -= parentOffset.top;
|
|
4284
4530
|
css.left -= parentOffset.left;
|
|
@@ -4375,8 +4621,8 @@ S2.define('select2/dropdown/minimumResultsForSearch',[
|
|
|
4375
4621
|
});
|
|
4376
4622
|
|
|
4377
4623
|
S2.define('select2/dropdown/selectOnClose',[
|
|
4378
|
-
|
|
4379
|
-
], function () {
|
|
4624
|
+
'../utils'
|
|
4625
|
+
], function (Utils) {
|
|
4380
4626
|
function SelectOnClose () { }
|
|
4381
4627
|
|
|
4382
4628
|
SelectOnClose.prototype.bind = function (decorated, container, $container) {
|
|
@@ -4407,7 +4653,7 @@ S2.define('select2/dropdown/selectOnClose',[
|
|
|
4407
4653
|
return;
|
|
4408
4654
|
}
|
|
4409
4655
|
|
|
4410
|
-
var data = $highlightedResults
|
|
4656
|
+
var data = Utils.GetData($highlightedResults[0], 'data');
|
|
4411
4657
|
|
|
4412
4658
|
// Don't re-select already selected resulte
|
|
4413
4659
|
if (
|
|
@@ -4448,7 +4694,7 @@ S2.define('select2/dropdown/closeOnSelect',[
|
|
|
4448
4694
|
var originalEvent = evt.originalEvent;
|
|
4449
4695
|
|
|
4450
4696
|
// Don't close if the control key is being held
|
|
4451
|
-
if (originalEvent && originalEvent.ctrlKey) {
|
|
4697
|
+
if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
|
|
4452
4698
|
return;
|
|
4453
4699
|
}
|
|
4454
4700
|
|
|
@@ -4502,6 +4748,9 @@ S2.define('select2/i18n/en',[],function () {
|
|
|
4502
4748
|
},
|
|
4503
4749
|
searching: function () {
|
|
4504
4750
|
return 'Searching…';
|
|
4751
|
+
},
|
|
4752
|
+
removeAllItems: function () {
|
|
4753
|
+
return 'Remove all items';
|
|
4505
4754
|
}
|
|
4506
4755
|
};
|
|
4507
4756
|
});
|
|
@@ -4740,66 +4989,29 @@ S2.define('select2/defaults',[
|
|
|
4740
4989
|
);
|
|
4741
4990
|
}
|
|
4742
4991
|
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
|
|
4746
|
-
// Extract the region information if it is included
|
|
4747
|
-
var languageParts = options.language.split('-');
|
|
4748
|
-
var baseLanguage = languageParts[0];
|
|
4749
|
-
|
|
4750
|
-
options.language = [options.language, baseLanguage];
|
|
4751
|
-
} else {
|
|
4752
|
-
options.language = [options.language];
|
|
4753
|
-
}
|
|
4754
|
-
}
|
|
4992
|
+
// If the defaults were not previously applied from an element, it is
|
|
4993
|
+
// possible for the language option to have not been resolved
|
|
4994
|
+
options.language = this._resolveLanguage(options.language);
|
|
4755
4995
|
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
options.language.push('en');
|
|
4996
|
+
// Always fall back to English since it will always be complete
|
|
4997
|
+
options.language.push('en');
|
|
4759
4998
|
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
for (var l = 0; l < languageNames.length; l++) {
|
|
4763
|
-
var name = languageNames[l];
|
|
4764
|
-
var language = {};
|
|
4765
|
-
|
|
4766
|
-
try {
|
|
4767
|
-
// Try to load it with the original name
|
|
4768
|
-
language = Translation.loadPath(name);
|
|
4769
|
-
} catch (e) {
|
|
4770
|
-
try {
|
|
4771
|
-
// If we couldn't load it, check if it wasn't the full path
|
|
4772
|
-
name = this.defaults.amdLanguageBase + name;
|
|
4773
|
-
language = Translation.loadPath(name);
|
|
4774
|
-
} catch (ex) {
|
|
4775
|
-
// The translation could not be loaded at all. Sometimes this is
|
|
4776
|
-
// because of a configuration problem, other times this can be
|
|
4777
|
-
// because of how Select2 helps load all possible translation files.
|
|
4778
|
-
if (options.debug && window.console && console.warn) {
|
|
4779
|
-
console.warn(
|
|
4780
|
-
'Select2: The language file for "' + name + '" could not be ' +
|
|
4781
|
-
'automatically loaded. A fallback will be used instead.'
|
|
4782
|
-
);
|
|
4783
|
-
}
|
|
4999
|
+
var uniqueLanguages = [];
|
|
4784
5000
|
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
}
|
|
5001
|
+
for (var l = 0; l < options.language.length; l++) {
|
|
5002
|
+
var language = options.language[l];
|
|
4788
5003
|
|
|
4789
|
-
|
|
5004
|
+
if (uniqueLanguages.indexOf(language) === -1) {
|
|
5005
|
+
uniqueLanguages.push(language);
|
|
4790
5006
|
}
|
|
5007
|
+
}
|
|
4791
5008
|
|
|
4792
|
-
|
|
4793
|
-
} else {
|
|
4794
|
-
var baseTranslation = Translation.loadPath(
|
|
4795
|
-
this.defaults.amdLanguageBase + 'en'
|
|
4796
|
-
);
|
|
4797
|
-
var customTranslation = new Translation(options.language);
|
|
4798
|
-
|
|
4799
|
-
customTranslation.extend(baseTranslation);
|
|
5009
|
+
options.language = uniqueLanguages;
|
|
4800
5010
|
|
|
4801
|
-
|
|
4802
|
-
|
|
5011
|
+
options.translations = this._processTranslations(
|
|
5012
|
+
options.language,
|
|
5013
|
+
options.debug
|
|
5014
|
+
);
|
|
4803
5015
|
|
|
4804
5016
|
return options;
|
|
4805
5017
|
};
|
|
@@ -4866,13 +5078,14 @@ S2.define('select2/defaults',[
|
|
|
4866
5078
|
debug: false,
|
|
4867
5079
|
dropdownAutoWidth: false,
|
|
4868
5080
|
escapeMarkup: Utils.escapeMarkup,
|
|
4869
|
-
language:
|
|
5081
|
+
language: {},
|
|
4870
5082
|
matcher: matcher,
|
|
4871
5083
|
minimumInputLength: 0,
|
|
4872
5084
|
maximumInputLength: 0,
|
|
4873
5085
|
maximumSelectionLength: 0,
|
|
4874
5086
|
minimumResultsForSearch: 0,
|
|
4875
5087
|
selectOnClose: false,
|
|
5088
|
+
scrollAfterSelect: false,
|
|
4876
5089
|
sorter: function (data) {
|
|
4877
5090
|
return data;
|
|
4878
5091
|
},
|
|
@@ -4887,6 +5100,103 @@ S2.define('select2/defaults',[
|
|
|
4887
5100
|
};
|
|
4888
5101
|
};
|
|
4889
5102
|
|
|
5103
|
+
Defaults.prototype.applyFromElement = function (options, $element) {
|
|
5104
|
+
var optionLanguage = options.language;
|
|
5105
|
+
var defaultLanguage = this.defaults.language;
|
|
5106
|
+
var elementLanguage = $element.prop('lang');
|
|
5107
|
+
var parentLanguage = $element.closest('[lang]').prop('lang');
|
|
5108
|
+
|
|
5109
|
+
var languages = Array.prototype.concat.call(
|
|
5110
|
+
this._resolveLanguage(elementLanguage),
|
|
5111
|
+
this._resolveLanguage(optionLanguage),
|
|
5112
|
+
this._resolveLanguage(defaultLanguage),
|
|
5113
|
+
this._resolveLanguage(parentLanguage)
|
|
5114
|
+
);
|
|
5115
|
+
|
|
5116
|
+
options.language = languages;
|
|
5117
|
+
|
|
5118
|
+
return options;
|
|
5119
|
+
};
|
|
5120
|
+
|
|
5121
|
+
Defaults.prototype._resolveLanguage = function (language) {
|
|
5122
|
+
if (!language) {
|
|
5123
|
+
return [];
|
|
5124
|
+
}
|
|
5125
|
+
|
|
5126
|
+
if ($.isEmptyObject(language)) {
|
|
5127
|
+
return [];
|
|
5128
|
+
}
|
|
5129
|
+
|
|
5130
|
+
if ($.isPlainObject(language)) {
|
|
5131
|
+
return [language];
|
|
5132
|
+
}
|
|
5133
|
+
|
|
5134
|
+
var languages;
|
|
5135
|
+
|
|
5136
|
+
if (!$.isArray(language)) {
|
|
5137
|
+
languages = [language];
|
|
5138
|
+
} else {
|
|
5139
|
+
languages = language;
|
|
5140
|
+
}
|
|
5141
|
+
|
|
5142
|
+
var resolvedLanguages = [];
|
|
5143
|
+
|
|
5144
|
+
for (var l = 0; l < languages.length; l++) {
|
|
5145
|
+
resolvedLanguages.push(languages[l]);
|
|
5146
|
+
|
|
5147
|
+
if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {
|
|
5148
|
+
// Extract the region information if it is included
|
|
5149
|
+
var languageParts = languages[l].split('-');
|
|
5150
|
+
var baseLanguage = languageParts[0];
|
|
5151
|
+
|
|
5152
|
+
resolvedLanguages.push(baseLanguage);
|
|
5153
|
+
}
|
|
5154
|
+
}
|
|
5155
|
+
|
|
5156
|
+
return resolvedLanguages;
|
|
5157
|
+
};
|
|
5158
|
+
|
|
5159
|
+
Defaults.prototype._processTranslations = function (languages, debug) {
|
|
5160
|
+
var translations = new Translation();
|
|
5161
|
+
|
|
5162
|
+
for (var l = 0; l < languages.length; l++) {
|
|
5163
|
+
var languageData = new Translation();
|
|
5164
|
+
|
|
5165
|
+
var language = languages[l];
|
|
5166
|
+
|
|
5167
|
+
if (typeof language === 'string') {
|
|
5168
|
+
try {
|
|
5169
|
+
// Try to load it with the original name
|
|
5170
|
+
languageData = Translation.loadPath(language);
|
|
5171
|
+
} catch (e) {
|
|
5172
|
+
try {
|
|
5173
|
+
// If we couldn't load it, check if it wasn't the full path
|
|
5174
|
+
language = this.defaults.amdLanguageBase + language;
|
|
5175
|
+
languageData = Translation.loadPath(language);
|
|
5176
|
+
} catch (ex) {
|
|
5177
|
+
// The translation could not be loaded at all. Sometimes this is
|
|
5178
|
+
// because of a configuration problem, other times this can be
|
|
5179
|
+
// because of how Select2 helps load all possible translation files
|
|
5180
|
+
if (debug && window.console && console.warn) {
|
|
5181
|
+
console.warn(
|
|
5182
|
+
'Select2: The language file for "' + language + '" could ' +
|
|
5183
|
+
'not be automatically loaded. A fallback will be used instead.'
|
|
5184
|
+
);
|
|
5185
|
+
}
|
|
5186
|
+
}
|
|
5187
|
+
}
|
|
5188
|
+
} else if ($.isPlainObject(language)) {
|
|
5189
|
+
languageData = new Translation(language);
|
|
5190
|
+
} else {
|
|
5191
|
+
languageData = language;
|
|
5192
|
+
}
|
|
5193
|
+
|
|
5194
|
+
translations.extend(languageData);
|
|
5195
|
+
}
|
|
5196
|
+
|
|
5197
|
+
return translations;
|
|
5198
|
+
};
|
|
5199
|
+
|
|
4890
5200
|
Defaults.prototype.set = function (key, value) {
|
|
4891
5201
|
var camelKey = $.camelCase(key);
|
|
4892
5202
|
|
|
@@ -4895,7 +5205,7 @@ S2.define('select2/defaults',[
|
|
|
4895
5205
|
|
|
4896
5206
|
var convertedData = Utils._convertData(data);
|
|
4897
5207
|
|
|
4898
|
-
$.extend(this.defaults, convertedData);
|
|
5208
|
+
$.extend(true, this.defaults, convertedData);
|
|
4899
5209
|
};
|
|
4900
5210
|
|
|
4901
5211
|
var defaults = new Defaults();
|
|
@@ -4916,6 +5226,10 @@ S2.define('select2/options',[
|
|
|
4916
5226
|
this.fromElement($element);
|
|
4917
5227
|
}
|
|
4918
5228
|
|
|
5229
|
+
if ($element != null) {
|
|
5230
|
+
this.options = Defaults.applyFromElement(this.options, $element);
|
|
5231
|
+
}
|
|
5232
|
+
|
|
4919
5233
|
this.options = Defaults.apply(this.options);
|
|
4920
5234
|
|
|
4921
5235
|
if ($element && $element.is('input')) {
|
|
@@ -4939,14 +5253,6 @@ S2.define('select2/options',[
|
|
|
4939
5253
|
this.options.disabled = $e.prop('disabled');
|
|
4940
5254
|
}
|
|
4941
5255
|
|
|
4942
|
-
if (this.options.language == null) {
|
|
4943
|
-
if ($e.prop('lang')) {
|
|
4944
|
-
this.options.language = $e.prop('lang').toLowerCase();
|
|
4945
|
-
} else if ($e.closest('[lang]').prop('lang')) {
|
|
4946
|
-
this.options.language = $e.closest('[lang]').prop('lang');
|
|
4947
|
-
}
|
|
4948
|
-
}
|
|
4949
|
-
|
|
4950
5256
|
if (this.options.dir == null) {
|
|
4951
5257
|
if ($e.prop('dir')) {
|
|
4952
5258
|
this.options.dir = $e.prop('dir');
|
|
@@ -4960,7 +5266,7 @@ S2.define('select2/options',[
|
|
|
4960
5266
|
$e.prop('disabled', this.options.disabled);
|
|
4961
5267
|
$e.prop('multiple', this.options.multiple);
|
|
4962
5268
|
|
|
4963
|
-
if ($e
|
|
5269
|
+
if (Utils.GetData($e[0], 'select2Tags')) {
|
|
4964
5270
|
if (this.options.debug && window.console && console.warn) {
|
|
4965
5271
|
console.warn(
|
|
4966
5272
|
'Select2: The `data-select2-tags` attribute has been changed to ' +
|
|
@@ -4969,11 +5275,11 @@ S2.define('select2/options',[
|
|
|
4969
5275
|
);
|
|
4970
5276
|
}
|
|
4971
5277
|
|
|
4972
|
-
$e
|
|
4973
|
-
$e
|
|
5278
|
+
Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
|
|
5279
|
+
Utils.StoreData($e[0], 'tags', true);
|
|
4974
5280
|
}
|
|
4975
5281
|
|
|
4976
|
-
if ($e
|
|
5282
|
+
if (Utils.GetData($e[0], 'ajaxUrl')) {
|
|
4977
5283
|
if (this.options.debug && window.console && console.warn) {
|
|
4978
5284
|
console.warn(
|
|
4979
5285
|
'Select2: The `data-ajax-url` attribute has been changed to ' +
|
|
@@ -4982,21 +5288,45 @@ S2.define('select2/options',[
|
|
|
4982
5288
|
);
|
|
4983
5289
|
}
|
|
4984
5290
|
|
|
4985
|
-
$e.attr('ajax--url', $e
|
|
4986
|
-
$e
|
|
5291
|
+
$e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
|
|
5292
|
+
Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
|
|
4987
5293
|
}
|
|
4988
5294
|
|
|
4989
5295
|
var dataset = {};
|
|
4990
5296
|
|
|
5297
|
+
function upperCaseLetter(_, letter) {
|
|
5298
|
+
return letter.toUpperCase();
|
|
5299
|
+
}
|
|
5300
|
+
|
|
5301
|
+
// Pre-load all of the attributes which are prefixed with `data-`
|
|
5302
|
+
for (var attr = 0; attr < $e[0].attributes.length; attr++) {
|
|
5303
|
+
var attributeName = $e[0].attributes[attr].name;
|
|
5304
|
+
var prefix = 'data-';
|
|
5305
|
+
|
|
5306
|
+
if (attributeName.substr(0, prefix.length) == prefix) {
|
|
5307
|
+
// Get the contents of the attribute after `data-`
|
|
5308
|
+
var dataName = attributeName.substring(prefix.length);
|
|
5309
|
+
|
|
5310
|
+
// Get the data contents from the consistent source
|
|
5311
|
+
// This is more than likely the jQuery data helper
|
|
5312
|
+
var dataValue = Utils.GetData($e[0], dataName);
|
|
5313
|
+
|
|
5314
|
+
// camelCase the attribute name to match the spec
|
|
5315
|
+
var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
|
|
5316
|
+
|
|
5317
|
+
// Store the data attribute contents into the dataset since
|
|
5318
|
+
dataset[camelDataName] = dataValue;
|
|
5319
|
+
}
|
|
5320
|
+
}
|
|
5321
|
+
|
|
4991
5322
|
// Prefer the element's `dataset` attribute if it exists
|
|
4992
5323
|
// jQuery 1.x does not correctly handle data attributes with multiple dashes
|
|
4993
5324
|
if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
|
|
4994
|
-
dataset = $.extend(true, {}, $e[0].dataset,
|
|
4995
|
-
} else {
|
|
4996
|
-
dataset = $e.data();
|
|
5325
|
+
dataset = $.extend(true, {}, $e[0].dataset, dataset);
|
|
4997
5326
|
}
|
|
4998
5327
|
|
|
4999
|
-
|
|
5328
|
+
// Prefer our internal data cache if it exists
|
|
5329
|
+
var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
|
|
5000
5330
|
|
|
5001
5331
|
data = Utils._convertData(data);
|
|
5002
5332
|
|
|
@@ -5033,8 +5363,8 @@ S2.define('select2/core',[
|
|
|
5033
5363
|
'./keys'
|
|
5034
5364
|
], function ($, Options, Utils, KEYS) {
|
|
5035
5365
|
var Select2 = function ($element, options) {
|
|
5036
|
-
if ($element
|
|
5037
|
-
$element
|
|
5366
|
+
if (Utils.GetData($element[0], 'select2') != null) {
|
|
5367
|
+
Utils.GetData($element[0], 'select2').destroy();
|
|
5038
5368
|
}
|
|
5039
5369
|
|
|
5040
5370
|
this.$element = $element;
|
|
@@ -5050,7 +5380,7 @@ S2.define('select2/core',[
|
|
|
5050
5380
|
// Set up the tabindex
|
|
5051
5381
|
|
|
5052
5382
|
var tabindex = $element.attr('tabindex') || 0;
|
|
5053
|
-
$element
|
|
5383
|
+
Utils.StoreData($element[0], 'old-tabindex', tabindex);
|
|
5054
5384
|
$element.attr('tabindex', '-1');
|
|
5055
5385
|
|
|
5056
5386
|
// Set up containers and adapters
|
|
@@ -5111,6 +5441,9 @@ S2.define('select2/core',[
|
|
|
5111
5441
|
// Synchronize any monitored attributes
|
|
5112
5442
|
this._syncAttributes();
|
|
5113
5443
|
|
|
5444
|
+
Utils.StoreData($element[0], 'select2', this);
|
|
5445
|
+
|
|
5446
|
+
// Ensure backwards compatibility with $element.data('select2').
|
|
5114
5447
|
$element.data('select2', this);
|
|
5115
5448
|
};
|
|
5116
5449
|
|
|
@@ -5187,6 +5520,12 @@ S2.define('select2/core',[
|
|
|
5187
5520
|
return null;
|
|
5188
5521
|
}
|
|
5189
5522
|
|
|
5523
|
+
if (method == 'computedstyle') {
|
|
5524
|
+
var computedStyle = window.getComputedStyle($element[0]);
|
|
5525
|
+
|
|
5526
|
+
return computedStyle.width;
|
|
5527
|
+
}
|
|
5528
|
+
|
|
5190
5529
|
return method;
|
|
5191
5530
|
};
|
|
5192
5531
|
|
|
@@ -5227,8 +5566,8 @@ S2.define('select2/core',[
|
|
|
5227
5566
|
|
|
5228
5567
|
if (observer != null) {
|
|
5229
5568
|
this._observer = new observer(function (mutations) {
|
|
5230
|
-
|
|
5231
|
-
|
|
5569
|
+
self._syncA();
|
|
5570
|
+
self._syncS(null, mutations);
|
|
5232
5571
|
});
|
|
5233
5572
|
this._observer.observe(this.$element[0], {
|
|
5234
5573
|
attributes: true,
|
|
@@ -5350,7 +5689,7 @@ S2.define('select2/core',[
|
|
|
5350
5689
|
if (self.isOpen()) {
|
|
5351
5690
|
if (key === KEYS.ESC || key === KEYS.TAB ||
|
|
5352
5691
|
(key === KEYS.UP && evt.altKey)) {
|
|
5353
|
-
self.close();
|
|
5692
|
+
self.close(evt);
|
|
5354
5693
|
|
|
5355
5694
|
evt.preventDefault();
|
|
5356
5695
|
} else if (key === KEYS.ENTER) {
|
|
@@ -5384,7 +5723,7 @@ S2.define('select2/core',[
|
|
|
5384
5723
|
Select2.prototype._syncAttributes = function () {
|
|
5385
5724
|
this.options.set('disabled', this.$element.prop('disabled'));
|
|
5386
5725
|
|
|
5387
|
-
if (this.
|
|
5726
|
+
if (this.isDisabled()) {
|
|
5388
5727
|
if (this.isOpen()) {
|
|
5389
5728
|
this.close();
|
|
5390
5729
|
}
|
|
@@ -5395,7 +5734,7 @@ S2.define('select2/core',[
|
|
|
5395
5734
|
}
|
|
5396
5735
|
};
|
|
5397
5736
|
|
|
5398
|
-
Select2.prototype.
|
|
5737
|
+
Select2.prototype._isChangeMutation = function (evt, mutations) {
|
|
5399
5738
|
var changed = false;
|
|
5400
5739
|
var self = this;
|
|
5401
5740
|
|
|
@@ -5423,7 +5762,22 @@ S2.define('select2/core',[
|
|
|
5423
5762
|
}
|
|
5424
5763
|
} else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
|
|
5425
5764
|
changed = true;
|
|
5765
|
+
} else if ($.isArray(mutations)) {
|
|
5766
|
+
$.each(mutations, function(evt, mutation) {
|
|
5767
|
+
if (self._isChangeMutation(evt, mutation)) {
|
|
5768
|
+
// We've found a change mutation.
|
|
5769
|
+
// Let's escape from the loop and continue
|
|
5770
|
+
changed = true;
|
|
5771
|
+
return false;
|
|
5772
|
+
}
|
|
5773
|
+
});
|
|
5426
5774
|
}
|
|
5775
|
+
return changed;
|
|
5776
|
+
};
|
|
5777
|
+
|
|
5778
|
+
Select2.prototype._syncSubtree = function (evt, mutations) {
|
|
5779
|
+
var changed = this._isChangeMutation(evt, mutations);
|
|
5780
|
+
var self = this;
|
|
5427
5781
|
|
|
5428
5782
|
// Only re-pull the data if we think there is a change
|
|
5429
5783
|
if (changed) {
|
|
@@ -5445,7 +5799,8 @@ S2.define('select2/core',[
|
|
|
5445
5799
|
'open': 'opening',
|
|
5446
5800
|
'close': 'closing',
|
|
5447
5801
|
'select': 'selecting',
|
|
5448
|
-
'unselect': 'unselecting'
|
|
5802
|
+
'unselect': 'unselecting',
|
|
5803
|
+
'clear': 'clearing'
|
|
5449
5804
|
};
|
|
5450
5805
|
|
|
5451
5806
|
if (args === undefined) {
|
|
@@ -5473,7 +5828,7 @@ S2.define('select2/core',[
|
|
|
5473
5828
|
};
|
|
5474
5829
|
|
|
5475
5830
|
Select2.prototype.toggleDropdown = function () {
|
|
5476
|
-
if (this.
|
|
5831
|
+
if (this.isDisabled()) {
|
|
5477
5832
|
return;
|
|
5478
5833
|
}
|
|
5479
5834
|
|
|
@@ -5489,15 +5844,40 @@ S2.define('select2/core',[
|
|
|
5489
5844
|
return;
|
|
5490
5845
|
}
|
|
5491
5846
|
|
|
5847
|
+
if (this.isDisabled()) {
|
|
5848
|
+
return;
|
|
5849
|
+
}
|
|
5850
|
+
|
|
5492
5851
|
this.trigger('query', {});
|
|
5493
5852
|
};
|
|
5494
5853
|
|
|
5495
|
-
Select2.prototype.close = function () {
|
|
5854
|
+
Select2.prototype.close = function (evt) {
|
|
5496
5855
|
if (!this.isOpen()) {
|
|
5497
5856
|
return;
|
|
5498
5857
|
}
|
|
5499
5858
|
|
|
5500
|
-
this.trigger('close', {});
|
|
5859
|
+
this.trigger('close', { originalEvent : evt });
|
|
5860
|
+
};
|
|
5861
|
+
|
|
5862
|
+
/**
|
|
5863
|
+
* Helper method to abstract the "enabled" (not "disabled") state of this
|
|
5864
|
+
* object.
|
|
5865
|
+
*
|
|
5866
|
+
* @return {true} if the instance is not disabled.
|
|
5867
|
+
* @return {false} if the instance is disabled.
|
|
5868
|
+
*/
|
|
5869
|
+
Select2.prototype.isEnabled = function () {
|
|
5870
|
+
return !this.isDisabled();
|
|
5871
|
+
};
|
|
5872
|
+
|
|
5873
|
+
/**
|
|
5874
|
+
* Helper method to abstract the "disabled" state of this object.
|
|
5875
|
+
*
|
|
5876
|
+
* @return {true} if the disabled option is true.
|
|
5877
|
+
* @return {false} if the disabled option is false.
|
|
5878
|
+
*/
|
|
5879
|
+
Select2.prototype.isDisabled = function () {
|
|
5880
|
+
return this.options.get('disabled');
|
|
5501
5881
|
};
|
|
5502
5882
|
|
|
5503
5883
|
Select2.prototype.isOpen = function () {
|
|
@@ -5574,7 +5954,7 @@ S2.define('select2/core',[
|
|
|
5574
5954
|
});
|
|
5575
5955
|
}
|
|
5576
5956
|
|
|
5577
|
-
this.$element.val(newVal).trigger('change');
|
|
5957
|
+
this.$element.val(newVal).trigger('input').trigger('change');
|
|
5578
5958
|
};
|
|
5579
5959
|
|
|
5580
5960
|
Select2.prototype.destroy = function () {
|
|
@@ -5600,10 +5980,12 @@ S2.define('select2/core',[
|
|
|
5600
5980
|
this._syncS = null;
|
|
5601
5981
|
|
|
5602
5982
|
this.$element.off('.select2');
|
|
5603
|
-
this.$element.attr('tabindex',
|
|
5983
|
+
this.$element.attr('tabindex',
|
|
5984
|
+
Utils.GetData(this.$element[0], 'old-tabindex'));
|
|
5604
5985
|
|
|
5605
5986
|
this.$element.removeClass('select2-hidden-accessible');
|
|
5606
5987
|
this.$element.attr('aria-hidden', 'false');
|
|
5988
|
+
Utils.RemoveData(this.$element[0]);
|
|
5607
5989
|
this.$element.removeData('select2');
|
|
5608
5990
|
|
|
5609
5991
|
this.dataAdapter.destroy();
|
|
@@ -5631,7 +6013,7 @@ S2.define('select2/core',[
|
|
|
5631
6013
|
|
|
5632
6014
|
this.$container.addClass('select2-container--' + this.options.get('theme'));
|
|
5633
6015
|
|
|
5634
|
-
$container
|
|
6016
|
+
Utils.StoreData($container[0], 'element', this.$element);
|
|
5635
6017
|
|
|
5636
6018
|
return $container;
|
|
5637
6019
|
};
|
|
@@ -5841,8 +6223,9 @@ S2.define('select2/compat/initSelection',[
|
|
|
5841
6223
|
});
|
|
5842
6224
|
|
|
5843
6225
|
S2.define('select2/compat/inputData',[
|
|
5844
|
-
'jquery'
|
|
5845
|
-
|
|
6226
|
+
'jquery',
|
|
6227
|
+
'../utils'
|
|
6228
|
+
], function ($, Utils) {
|
|
5846
6229
|
function InputData (decorated, $element, options) {
|
|
5847
6230
|
this._currentData = [];
|
|
5848
6231
|
this._valueSeparator = options.get('valueSeparator') || ',';
|
|
@@ -5906,13 +6289,13 @@ S2.define('select2/compat/inputData',[
|
|
|
5906
6289
|
});
|
|
5907
6290
|
|
|
5908
6291
|
this.$element.val(data.id);
|
|
5909
|
-
this.$element.trigger('change');
|
|
6292
|
+
this.$element.trigger('input').trigger('change');
|
|
5910
6293
|
} else {
|
|
5911
6294
|
var value = this.$element.val();
|
|
5912
6295
|
value += this._valueSeparator + data.id;
|
|
5913
6296
|
|
|
5914
6297
|
this.$element.val(value);
|
|
5915
|
-
this.$element.trigger('change');
|
|
6298
|
+
this.$element.trigger('input').trigger('change');
|
|
5916
6299
|
}
|
|
5917
6300
|
};
|
|
5918
6301
|
|
|
@@ -5935,7 +6318,7 @@ S2.define('select2/compat/inputData',[
|
|
|
5935
6318
|
}
|
|
5936
6319
|
|
|
5937
6320
|
self.$element.val(values.join(self._valueSeparator));
|
|
5938
|
-
self.$element.trigger('change');
|
|
6321
|
+
self.$element.trigger('input').trigger('change');
|
|
5939
6322
|
});
|
|
5940
6323
|
};
|
|
5941
6324
|
|
|
@@ -5959,7 +6342,7 @@ S2.define('select2/compat/inputData',[
|
|
|
5959
6342
|
|
|
5960
6343
|
InputData.prototype.addOptions = function (_, $options) {
|
|
5961
6344
|
var options = $.map($options, function ($option) {
|
|
5962
|
-
return
|
|
6345
|
+
return Utils.GetData($option[0], 'data');
|
|
5963
6346
|
});
|
|
5964
6347
|
|
|
5965
6348
|
this._currentData.push.apply(this._currentData, options);
|
|
@@ -6362,8 +6745,9 @@ S2.define('jquery.select2',[
|
|
|
6362
6745
|
'jquery-mousewheel',
|
|
6363
6746
|
|
|
6364
6747
|
'./select2/core',
|
|
6365
|
-
'./select2/defaults'
|
|
6366
|
-
|
|
6748
|
+
'./select2/defaults',
|
|
6749
|
+
'./select2/utils'
|
|
6750
|
+
], function ($, _, Select2, Defaults, Utils) {
|
|
6367
6751
|
if ($.fn.select2 == null) {
|
|
6368
6752
|
// All methods that should return the element
|
|
6369
6753
|
var thisMethods = ['open', 'close', 'destroy'];
|
|
@@ -6384,7 +6768,7 @@ S2.define('jquery.select2',[
|
|
|
6384
6768
|
var args = Array.prototype.slice.call(arguments, 1);
|
|
6385
6769
|
|
|
6386
6770
|
this.each(function () {
|
|
6387
|
-
var instance =
|
|
6771
|
+
var instance = Utils.GetData(this, 'select2');
|
|
6388
6772
|
|
|
6389
6773
|
if (instance == null && window.console && console.error) {
|
|
6390
6774
|
console.error(
|