select2-rails 0.0.5 → 0.0.6
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.
- data/lib/select2-rails/version.rb +1 -1
- data/vendor/assets/javascripts/select2.js +261 -109
- data/vendor/assets/stylesheets/select2.css.sass +10 -2
- metadata +10 -10
|
@@ -12,6 +12,26 @@
|
|
|
12
12
|
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
13
|
See the License for the specific language governing permissions and limitations under the License.
|
|
14
14
|
*/
|
|
15
|
+
(function ($) {
|
|
16
|
+
if(typeof $.fn.each2 == "undefined"){
|
|
17
|
+
$.fn.extend({
|
|
18
|
+
/*
|
|
19
|
+
* 4-10 times faster .each replacement
|
|
20
|
+
* use it carefully, as it overrides jQuery context of element on each iteration
|
|
21
|
+
*/
|
|
22
|
+
each2 : function (c) {
|
|
23
|
+
var j = $([0]), i = -1, l = this.length;
|
|
24
|
+
while (
|
|
25
|
+
++i < l
|
|
26
|
+
&& (j.context = j[0] = this[i])
|
|
27
|
+
&& c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object
|
|
28
|
+
);
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
})(jQuery);
|
|
34
|
+
|
|
15
35
|
(function ($, undefined) {
|
|
16
36
|
"use strict";
|
|
17
37
|
/*global document, window, jQuery, console */
|
|
@@ -20,7 +40,7 @@
|
|
|
20
40
|
return;
|
|
21
41
|
}
|
|
22
42
|
|
|
23
|
-
var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid;
|
|
43
|
+
var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer;
|
|
24
44
|
|
|
25
45
|
KEY = {
|
|
26
46
|
TAB: 9,
|
|
@@ -134,17 +154,18 @@
|
|
|
134
154
|
});
|
|
135
155
|
}
|
|
136
156
|
|
|
157
|
+
$(document).delegate("*", "mousemove", function (e) {
|
|
158
|
+
$(document).data("select2-lastpos", {x: e.pageX, y: e.pageY});
|
|
159
|
+
});
|
|
160
|
+
|
|
137
161
|
/**
|
|
138
162
|
* filters mouse events so an event is fired only if the mouse moved.
|
|
139
163
|
*
|
|
140
164
|
* filters out mouse events that occur when mouse is stationary but
|
|
141
165
|
* the elements under the pointer are scrolled.
|
|
142
|
-
*/
|
|
143
|
-
$(document).delegate("*", "mousemove", function (e) {
|
|
144
|
-
$(document).data("select2-lastpos", {x: e.pageX, y: e.pageY});
|
|
145
|
-
});
|
|
166
|
+
*/
|
|
146
167
|
function installFilteredMouseMove(element) {
|
|
147
|
-
|
|
168
|
+
element.bind("mousemove", function (e) {
|
|
148
169
|
var lastpos = $(document).data("select2-lastpos");
|
|
149
170
|
if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {
|
|
150
171
|
$(e.target).trigger("mousemove-filtered", e);
|
|
@@ -180,26 +201,42 @@
|
|
|
180
201
|
event.stopPropagation();
|
|
181
202
|
}
|
|
182
203
|
|
|
183
|
-
function measureTextWidth(e) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
sizer.
|
|
202
|
-
return width;
|
|
204
|
+
function measureTextWidth(e) {
|
|
205
|
+
if (!sizer){
|
|
206
|
+
var style = e[0].currentStyle || window.getComputedStyle(e[0], null);
|
|
207
|
+
sizer = $("<div></div>").css({
|
|
208
|
+
position: "absolute",
|
|
209
|
+
left: "-1000px",
|
|
210
|
+
top: "-1000px",
|
|
211
|
+
display: "none",
|
|
212
|
+
fontSize: style.fontSize,
|
|
213
|
+
fontFamily: style.fontFamily,
|
|
214
|
+
fontStyle: style.fontStyle,
|
|
215
|
+
fontWeight: style.fontWeight,
|
|
216
|
+
letterSpacing: style.letterSpacing,
|
|
217
|
+
textTransform: style.textTransform,
|
|
218
|
+
whiteSpace: "nowrap"
|
|
219
|
+
});
|
|
220
|
+
$("body").append(sizer);
|
|
221
|
+
}
|
|
222
|
+
sizer.text(e.val());
|
|
223
|
+
return sizer.width();
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function markMatch(text, term, markup) {
|
|
227
|
+
var match=text.toUpperCase().indexOf(term.toUpperCase()),
|
|
228
|
+
tl=term.length;
|
|
229
|
+
|
|
230
|
+
if (match<0) {
|
|
231
|
+
markup.push(text);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
markup.push(text.substring(0, match));
|
|
236
|
+
markup.push("<span class='select2-match'>");
|
|
237
|
+
markup.push(text.substring(match, match + tl));
|
|
238
|
+
markup.push("</span>");
|
|
239
|
+
markup.push(text.substring(match + tl, text.length));
|
|
203
240
|
}
|
|
204
241
|
|
|
205
242
|
/**
|
|
@@ -229,17 +266,18 @@
|
|
|
229
266
|
requestSequence += 1; // increment the sequence
|
|
230
267
|
var requestNumber = requestSequence, // this request's sequence number
|
|
231
268
|
data = options.data, // ajax data function
|
|
232
|
-
transport = options.transport || $.ajax
|
|
233
|
-
|
|
269
|
+
transport = options.transport || $.ajax,
|
|
270
|
+
type = options.type || 'GET'; // set type of request (GET or POST)
|
|
271
|
+
|
|
234
272
|
data = data.call(this, query.term, query.page, query.context);
|
|
235
273
|
|
|
236
|
-
if( null !== handler){
|
|
237
|
-
|
|
238
|
-
}
|
|
274
|
+
if( null !== handler) { handler.abort(); }
|
|
275
|
+
|
|
239
276
|
handler = transport.call(null, {
|
|
240
277
|
url: options.url,
|
|
241
278
|
dataType: options.dataType,
|
|
242
279
|
data: data,
|
|
280
|
+
type: type,
|
|
243
281
|
success: function (data) {
|
|
244
282
|
if (requestNumber < requestSequence) {
|
|
245
283
|
return;
|
|
@@ -337,6 +375,10 @@
|
|
|
337
375
|
});
|
|
338
376
|
});
|
|
339
377
|
|
|
378
|
+
function evaluate(val) {
|
|
379
|
+
return $.isFunction(val) ? val() : val;
|
|
380
|
+
}
|
|
381
|
+
|
|
340
382
|
/**
|
|
341
383
|
* Creates a new class
|
|
342
384
|
*
|
|
@@ -354,6 +396,7 @@
|
|
|
354
396
|
|
|
355
397
|
AbstractSelect2 = clazz(Object, {
|
|
356
398
|
|
|
399
|
+
// abstract
|
|
357
400
|
bind: function (func) {
|
|
358
401
|
var self = this;
|
|
359
402
|
return function () {
|
|
@@ -361,6 +404,7 @@
|
|
|
361
404
|
};
|
|
362
405
|
},
|
|
363
406
|
|
|
407
|
+
// abstract
|
|
364
408
|
init: function (opts) {
|
|
365
409
|
var results, search, resultsSelector = ".select2-results";
|
|
366
410
|
|
|
@@ -377,11 +421,15 @@
|
|
|
377
421
|
|
|
378
422
|
this.enabled=true;
|
|
379
423
|
this.container = this.createContainer();
|
|
424
|
+
this.body = opts.element.closest("body"); // cache for future access
|
|
380
425
|
|
|
381
426
|
if (opts.element.attr("class") !== undefined) {
|
|
382
427
|
this.container.addClass(opts.element.attr("class"));
|
|
383
428
|
}
|
|
384
429
|
|
|
430
|
+
this.container.css(evaluate(opts.containerCss));
|
|
431
|
+
this.container.addClass(evaluate(opts.containerCssClass));
|
|
432
|
+
|
|
385
433
|
// swap container for the element
|
|
386
434
|
this.opts.element
|
|
387
435
|
.data("select2", this)
|
|
@@ -390,10 +438,12 @@
|
|
|
390
438
|
this.container.data("select2", this);
|
|
391
439
|
|
|
392
440
|
this.dropdown = this.container.find(".select2-drop");
|
|
441
|
+
this.dropdown.css(evaluate(opts.dropdownCss));
|
|
442
|
+
this.dropdown.addClass(evaluate(opts.dropdownCssClass));
|
|
393
443
|
this.dropdown.data("select2", this);
|
|
394
444
|
|
|
395
445
|
this.results = results = this.container.find(resultsSelector);
|
|
396
|
-
this.search = search = this.container.find("input
|
|
446
|
+
this.search = search = this.container.find("input.select2-input");
|
|
397
447
|
|
|
398
448
|
this.resultsPage = 0;
|
|
399
449
|
this.context = null;
|
|
@@ -448,6 +498,7 @@
|
|
|
448
498
|
if (opts.element.is(":disabled")) this.disable();
|
|
449
499
|
},
|
|
450
500
|
|
|
501
|
+
// abstract
|
|
451
502
|
destroy: function () {
|
|
452
503
|
var select2 = this.opts.element.data("select2");
|
|
453
504
|
if (select2 !== undefined) {
|
|
@@ -456,13 +507,14 @@
|
|
|
456
507
|
select2.opts.element
|
|
457
508
|
.removeData("select2")
|
|
458
509
|
.unbind(".select2")
|
|
459
|
-
.show();
|
|
510
|
+
.show();
|
|
460
511
|
}
|
|
461
512
|
},
|
|
462
513
|
|
|
514
|
+
// abstract
|
|
463
515
|
prepareOpts: function (opts) {
|
|
464
516
|
var element, select, idKey;
|
|
465
|
-
|
|
517
|
+
|
|
466
518
|
element = opts.element;
|
|
467
519
|
|
|
468
520
|
if (element.get(0).tagName.toLowerCase() === "select") {
|
|
@@ -479,8 +531,12 @@
|
|
|
479
531
|
}
|
|
480
532
|
|
|
481
533
|
opts = $.extend({}, {
|
|
482
|
-
|
|
483
|
-
|
|
534
|
+
containerCss: {},
|
|
535
|
+
dropdownCss: {},
|
|
536
|
+
containerCssClass: "",
|
|
537
|
+
dropdownCssClass: "",
|
|
538
|
+
populateResults: function(container, results, query) {
|
|
539
|
+
var uidToData={}, populate, markup=[], uid, data, result, children, formatted;
|
|
484
540
|
|
|
485
541
|
populate=function(results, depth) {
|
|
486
542
|
|
|
@@ -503,7 +559,13 @@
|
|
|
503
559
|
uidToData[uid]=result;
|
|
504
560
|
}
|
|
505
561
|
|
|
506
|
-
markup.push("><div class='select2-result-label'>"
|
|
562
|
+
markup.push("><div class='select2-result-label'>");
|
|
563
|
+
formatted=opts.formatResult(result, query, markup);
|
|
564
|
+
// for backwards compat with <3.0 versions
|
|
565
|
+
if (formatted!==undefined) {
|
|
566
|
+
markup.push(formatted);
|
|
567
|
+
}
|
|
568
|
+
markup.push("</div>");
|
|
507
569
|
|
|
508
570
|
if (compound) {
|
|
509
571
|
markup.push("<ul class='select2-result-sub'>");
|
|
@@ -525,22 +587,19 @@
|
|
|
525
587
|
}
|
|
526
588
|
|
|
527
589
|
for (uid in uidToData) {
|
|
528
|
-
$("#select2-result-"+uid).data("select2-data", uidToData[uid]);
|
|
590
|
+
$("#select2-result-"+uid, container).data("select2-data", uidToData[uid]);
|
|
529
591
|
}
|
|
530
592
|
|
|
531
593
|
},
|
|
532
|
-
formatResult: function(result) {
|
|
533
|
-
|
|
594
|
+
formatResult: function(result, query, markup) {
|
|
595
|
+
markMatch(result.text, query.term, markup);
|
|
534
596
|
},
|
|
535
597
|
formatSelection: function (data) {
|
|
536
|
-
|
|
537
|
-
return data.fullText;
|
|
538
|
-
} else {
|
|
539
|
-
return data.text;
|
|
540
|
-
}
|
|
598
|
+
return data.fullText || data.text;
|
|
541
599
|
},
|
|
542
600
|
formatNoMatches: function () { return "No matches found"; },
|
|
543
601
|
formatInputTooShort: function (input, min) { return "Please enter " + (min - input.length) + " more characters"; },
|
|
602
|
+
formatLoadMore: function (pageNumber) { return "Loading more results..."; },
|
|
544
603
|
minimumResultsForSearch: 0,
|
|
545
604
|
minimumInputLength: 0,
|
|
546
605
|
id: function (e) { return e.id; },
|
|
@@ -558,7 +617,7 @@
|
|
|
558
617
|
opts.query = this.bind(function (query) {
|
|
559
618
|
var data = { results: [], more: false },
|
|
560
619
|
term = query.term,
|
|
561
|
-
process;
|
|
620
|
+
children, firstChild, process;
|
|
562
621
|
|
|
563
622
|
process=function(element, collection) {
|
|
564
623
|
var group;
|
|
@@ -568,14 +627,24 @@
|
|
|
568
627
|
}
|
|
569
628
|
} else if (element.is("optgroup")) {
|
|
570
629
|
group={text:element.attr("label"), children:[]};
|
|
571
|
-
element.children().
|
|
630
|
+
element.children().each2(function(i, elm) { process(elm, group.children); });
|
|
572
631
|
if (group.children.length>0) {
|
|
573
632
|
collection.push(group);
|
|
574
633
|
}
|
|
575
634
|
}
|
|
576
635
|
};
|
|
577
636
|
|
|
578
|
-
element.children()
|
|
637
|
+
children=element.children();
|
|
638
|
+
|
|
639
|
+
// ignore the placeholder option if there is one
|
|
640
|
+
if (this.getPlaceholder() !== undefined && children.length > 0) {
|
|
641
|
+
firstChild = children[0];
|
|
642
|
+
if ($(firstChild).text() === "") {
|
|
643
|
+
children=children.not(firstChild);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
children.each2(function(i, elm) { process(elm, data.results); });
|
|
579
648
|
|
|
580
649
|
query.callback(data);
|
|
581
650
|
});
|
|
@@ -610,6 +679,7 @@
|
|
|
610
679
|
/**
|
|
611
680
|
* Monitor the original element for changes and update select2 accordingly
|
|
612
681
|
*/
|
|
682
|
+
// abstract
|
|
613
683
|
monitorSource: function () {
|
|
614
684
|
this.opts.element.bind("change.select2", this.bind(function (e) {
|
|
615
685
|
if (this.opts.element.data("select2-change-triggered") !== true) {
|
|
@@ -621,14 +691,19 @@
|
|
|
621
691
|
/**
|
|
622
692
|
* Triggers the change event on the source element
|
|
623
693
|
*/
|
|
624
|
-
|
|
625
|
-
|
|
694
|
+
// abstract
|
|
695
|
+
triggerChange: function (details) {
|
|
696
|
+
|
|
697
|
+
details = details || {};
|
|
698
|
+
details= $.extend({}, details, { type: "change", val: this.val() });
|
|
699
|
+
// prevents recursive triggering
|
|
626
700
|
this.opts.element.data("select2-change-triggered", true);
|
|
627
|
-
this.opts.element.trigger(
|
|
701
|
+
this.opts.element.trigger(details);
|
|
628
702
|
this.opts.element.data("select2-change-triggered", false);
|
|
629
703
|
},
|
|
630
704
|
|
|
631
705
|
|
|
706
|
+
// abstract
|
|
632
707
|
enable: function() {
|
|
633
708
|
if (this.enabled) return;
|
|
634
709
|
|
|
@@ -636,6 +711,7 @@
|
|
|
636
711
|
this.container.removeClass("select2-container-disabled");
|
|
637
712
|
},
|
|
638
713
|
|
|
714
|
+
// abstract
|
|
639
715
|
disable: function() {
|
|
640
716
|
if (!this.enabled) return;
|
|
641
717
|
|
|
@@ -645,10 +721,12 @@
|
|
|
645
721
|
this.container.addClass("select2-container-disabled");
|
|
646
722
|
},
|
|
647
723
|
|
|
724
|
+
// abstract
|
|
648
725
|
opened: function () {
|
|
649
726
|
return this.container.hasClass("select2-dropdown-open");
|
|
650
727
|
},
|
|
651
728
|
|
|
729
|
+
// abstract
|
|
652
730
|
positionDropdown: function() {
|
|
653
731
|
var offset = this.container.offset();
|
|
654
732
|
var height = this.container.outerHeight();
|
|
@@ -658,17 +736,20 @@
|
|
|
658
736
|
left: offset.left,
|
|
659
737
|
width: width
|
|
660
738
|
}
|
|
661
|
-
if (this.opts.dropdownZIndex !== undefined) {
|
|
662
|
-
css["z-index"] = this.opts.dropdownZIndex;
|
|
663
|
-
}
|
|
664
739
|
this.dropdown.css(css);
|
|
665
740
|
},
|
|
666
741
|
|
|
742
|
+
// abstract
|
|
667
743
|
open: function () {
|
|
668
744
|
if (this.opened()) return;
|
|
669
745
|
|
|
670
746
|
this.container.addClass("select2-dropdown-open").addClass("select2-container-active");
|
|
671
|
-
this.dropdown.
|
|
747
|
+
if(this.dropdown[0] !== this.body.children().last()[0]) {
|
|
748
|
+
// ensure the dropdown is the last child of body, so the z-index is always respected correctly
|
|
749
|
+
this.dropdown.detach().appendTo(this.body);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
this.dropdown.addClass("select2-drop-active");
|
|
672
753
|
|
|
673
754
|
this.positionDropdown();
|
|
674
755
|
|
|
@@ -678,6 +759,7 @@
|
|
|
678
759
|
this.focusSearch();
|
|
679
760
|
},
|
|
680
761
|
|
|
762
|
+
// abstract
|
|
681
763
|
close: function () {
|
|
682
764
|
if (!this.opened()) return;
|
|
683
765
|
|
|
@@ -687,17 +769,20 @@
|
|
|
687
769
|
this.clearSearch();
|
|
688
770
|
},
|
|
689
771
|
|
|
772
|
+
// abstract
|
|
690
773
|
clearSearch: function () {
|
|
691
774
|
|
|
692
775
|
},
|
|
693
776
|
|
|
777
|
+
// abstract
|
|
694
778
|
ensureHighlightVisible: function () {
|
|
695
779
|
var results = this.results, children, index, child, hb, rb, y, more;
|
|
696
|
-
|
|
697
|
-
children = results.find(".select2-result");
|
|
780
|
+
|
|
698
781
|
index = this.highlight();
|
|
699
782
|
|
|
700
783
|
if (index < 0) return;
|
|
784
|
+
|
|
785
|
+
children = results.find(".select2-result");
|
|
701
786
|
|
|
702
787
|
child = $(children[index]);
|
|
703
788
|
|
|
@@ -723,6 +808,7 @@
|
|
|
723
808
|
}
|
|
724
809
|
},
|
|
725
810
|
|
|
811
|
+
// abstract
|
|
726
812
|
moveHighlight: function (delta) {
|
|
727
813
|
var choices = this.results.find(".select2-result"),
|
|
728
814
|
index = this.highlight();
|
|
@@ -736,6 +822,7 @@
|
|
|
736
822
|
}
|
|
737
823
|
},
|
|
738
824
|
|
|
825
|
+
// abstract
|
|
739
826
|
highlight: function (index) {
|
|
740
827
|
var choices = this.results.find(".select2-result .select2-result-label");
|
|
741
828
|
|
|
@@ -755,24 +842,28 @@
|
|
|
755
842
|
$(choices[index]).addClass("select2-highlighted");
|
|
756
843
|
this.ensureHighlightVisible();
|
|
757
844
|
|
|
758
|
-
if (this.opened()) this.focusSearch();
|
|
845
|
+
//if (this.opened()) this.focusSearch();
|
|
759
846
|
},
|
|
760
847
|
|
|
848
|
+
// abstract
|
|
761
849
|
highlightUnderEvent: function (event) {
|
|
762
|
-
var el = $(event.target).closest(".select2-result");
|
|
763
|
-
|
|
764
|
-
|
|
850
|
+
var el = $(event.target).closest(".select2-result");
|
|
851
|
+
if (el.length > 0 && !el.is(".select2-highlighted")) {
|
|
852
|
+
var choices = this.results.find('.select2-result');
|
|
765
853
|
this.highlight(choices.index(el));
|
|
766
854
|
}
|
|
767
855
|
},
|
|
768
856
|
|
|
857
|
+
// abstract
|
|
769
858
|
loadMoreIfNeeded: function () {
|
|
770
859
|
var results = this.results,
|
|
771
860
|
more = results.find("li.select2-more-results"),
|
|
772
861
|
below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible
|
|
773
862
|
offset = -1, // index of first element without data
|
|
774
863
|
page = this.resultsPage + 1,
|
|
775
|
-
self=this
|
|
864
|
+
self=this,
|
|
865
|
+
term=this.search.val(),
|
|
866
|
+
context=this.context;
|
|
776
867
|
|
|
777
868
|
if (more.length === 0) return;
|
|
778
869
|
below = more.offset().top - results.offset().top - results.height();
|
|
@@ -780,14 +871,13 @@
|
|
|
780
871
|
if (below <= 0) {
|
|
781
872
|
more.addClass("select2-active");
|
|
782
873
|
this.opts.query({
|
|
783
|
-
term:
|
|
874
|
+
term: term,
|
|
784
875
|
page: page,
|
|
785
|
-
context:
|
|
876
|
+
context: context,
|
|
786
877
|
matcher: this.opts.matcher,
|
|
787
878
|
callback: this.bind(function (data) {
|
|
788
|
-
console.log("load more callback", data);
|
|
789
879
|
|
|
790
|
-
self.opts.populateResults(results, data.results);
|
|
880
|
+
self.opts.populateResults(results, data.results, {term: term, page: page, context:context});
|
|
791
881
|
|
|
792
882
|
if (data.more===true) {
|
|
793
883
|
more.detach();
|
|
@@ -804,6 +894,7 @@
|
|
|
804
894
|
/**
|
|
805
895
|
* @param initial whether or not this is the call to this method right after the dropdown has been opened
|
|
806
896
|
*/
|
|
897
|
+
// abstract
|
|
807
898
|
updateResults: function (initial) {
|
|
808
899
|
var search = this.search, results = this.results, opts = this.opts, self=this;
|
|
809
900
|
|
|
@@ -860,34 +951,33 @@
|
|
|
860
951
|
}
|
|
861
952
|
|
|
862
953
|
results.empty();
|
|
863
|
-
self.opts.populateResults(results, data.results);
|
|
954
|
+
self.opts.populateResults(results, data.results, {term: search.val(), page: this.resultsPage, context:null});
|
|
864
955
|
postRender();
|
|
865
956
|
|
|
866
957
|
if (data.more === true) {
|
|
867
|
-
results.children().filter(":last").append("<li class='select2-more-results'>
|
|
958
|
+
results.children().filter(":last").append("<li class='select2-more-results'>" + opts.formatLoadMore(this.resultsPage) + "</li>");
|
|
868
959
|
}
|
|
869
960
|
|
|
870
961
|
this.postprocessResults(data, initial);
|
|
871
962
|
})});
|
|
872
963
|
},
|
|
873
964
|
|
|
965
|
+
// abstract
|
|
874
966
|
cancel: function () {
|
|
875
967
|
this.close();
|
|
876
968
|
},
|
|
877
969
|
|
|
970
|
+
// abstract
|
|
878
971
|
blur: function () {
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
this.clearSearch();
|
|
886
|
-
this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
|
|
887
|
-
this.search.blur();
|
|
888
|
-
}), 10);
|
|
972
|
+
this.close();
|
|
973
|
+
this.container.removeClass("select2-container-active");
|
|
974
|
+
this.dropdown.removeClass("select2-drop-active");
|
|
975
|
+
if (this.search.is(":focus")) { this.search.blur(); }
|
|
976
|
+
this.clearSearch();
|
|
977
|
+
this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
|
|
889
978
|
},
|
|
890
979
|
|
|
980
|
+
// abstract
|
|
891
981
|
focusSearch: function () {
|
|
892
982
|
/* we do this in a timeout so that current event processing can complete before this code is executed.
|
|
893
983
|
this makes sure the search field is focussed even if the current event would blur it */
|
|
@@ -896,6 +986,7 @@
|
|
|
896
986
|
}), 10);
|
|
897
987
|
},
|
|
898
988
|
|
|
989
|
+
// abstract
|
|
899
990
|
selectHighlighted: function () {
|
|
900
991
|
var data = this.results.find(".select2-highlighted").not(".select2-disabled").closest('.select2-result').not('.select2-result-unselectable').data("select2-data");
|
|
901
992
|
if (data) {
|
|
@@ -903,6 +994,7 @@
|
|
|
903
994
|
}
|
|
904
995
|
},
|
|
905
996
|
|
|
997
|
+
// abstract
|
|
906
998
|
getPlaceholder: function () {
|
|
907
999
|
return this.opts.element.attr("placeholder") || this.opts.element.data("placeholder") || this.opts.placeholder;
|
|
908
1000
|
},
|
|
@@ -915,6 +1007,7 @@
|
|
|
915
1007
|
*
|
|
916
1008
|
* @returns The width string (with units) for the container.
|
|
917
1009
|
*/
|
|
1010
|
+
// abstract
|
|
918
1011
|
getContainerWidth: function () {
|
|
919
1012
|
var style, attrs, matches, i, l;
|
|
920
1013
|
if (this.opts.width !== undefined)
|
|
@@ -936,24 +1029,26 @@
|
|
|
936
1029
|
|
|
937
1030
|
SingleSelect2 = clazz(AbstractSelect2, {
|
|
938
1031
|
|
|
1032
|
+
// single
|
|
939
1033
|
createContainer: function () {
|
|
940
1034
|
return $("<div></div>", {
|
|
941
1035
|
"class": "select2-container",
|
|
942
1036
|
"style": "width: " + this.getContainerWidth()
|
|
943
1037
|
}).html([
|
|
944
|
-
" <a href='javascript:void(0)' class='select2-choice'
|
|
1038
|
+
" <a href='javascript:void(0)' class='select2-choice'><input type='text' class='select2-offscreen select2-focusser'/>",
|
|
945
1039
|
" <span></span><abbr class='select2-search-choice-close' style='display:none;'></abbr>",
|
|
946
1040
|
" <div><b></b></div>" ,
|
|
947
1041
|
"</a>",
|
|
948
1042
|
" <div class='select2-drop' style='display:none;'>" ,
|
|
949
1043
|
" <div class='select2-search'>" ,
|
|
950
|
-
" <input type='text' autocomplete='off'/>" ,
|
|
1044
|
+
" <input type='text' autocomplete='off' class='select2-input'/>" ,
|
|
951
1045
|
" </div>" ,
|
|
952
1046
|
" <ul class='select2-results'>" ,
|
|
953
1047
|
" </ul>" ,
|
|
954
1048
|
"</div>"].join(""));
|
|
955
1049
|
},
|
|
956
1050
|
|
|
1051
|
+
// single
|
|
957
1052
|
open: function () {
|
|
958
1053
|
|
|
959
1054
|
if (this.opened()) return;
|
|
@@ -962,25 +1057,30 @@
|
|
|
962
1057
|
|
|
963
1058
|
},
|
|
964
1059
|
|
|
1060
|
+
// single
|
|
965
1061
|
close: function () {
|
|
966
1062
|
if (!this.opened()) return;
|
|
967
1063
|
this.parent.close.apply(this, arguments);
|
|
968
1064
|
},
|
|
969
1065
|
|
|
1066
|
+
// single
|
|
970
1067
|
focus: function () {
|
|
971
1068
|
this.close();
|
|
972
1069
|
this.selection.focus();
|
|
973
1070
|
},
|
|
974
1071
|
|
|
1072
|
+
// single
|
|
975
1073
|
isFocused: function () {
|
|
976
1074
|
return this.selection.is(":focus");
|
|
977
1075
|
},
|
|
978
1076
|
|
|
1077
|
+
// single
|
|
979
1078
|
cancel: function () {
|
|
980
1079
|
this.parent.cancel.apply(this, arguments);
|
|
981
1080
|
this.selection.focus();
|
|
982
1081
|
},
|
|
983
1082
|
|
|
1083
|
+
// single
|
|
984
1084
|
initContainer: function () {
|
|
985
1085
|
|
|
986
1086
|
var selection,
|
|
@@ -988,7 +1088,8 @@
|
|
|
988
1088
|
dropdown = this.dropdown,
|
|
989
1089
|
containers = $([this.container.get(0), this.dropdown.get(0)]),
|
|
990
1090
|
clickingInside = false,
|
|
991
|
-
selector = ".select2-choice"
|
|
1091
|
+
selector = ".select2-choice",
|
|
1092
|
+
focusser=container.find("input.select2-focusser");
|
|
992
1093
|
|
|
993
1094
|
this.selection = selection = container.find(selector);
|
|
994
1095
|
|
|
@@ -1006,7 +1107,7 @@
|
|
|
1006
1107
|
return;
|
|
1007
1108
|
case KEY.ESC:
|
|
1008
1109
|
this.cancel(e);
|
|
1009
|
-
e
|
|
1110
|
+
killEvent(e);
|
|
1010
1111
|
return;
|
|
1011
1112
|
}
|
|
1012
1113
|
}));
|
|
@@ -1039,9 +1140,10 @@
|
|
|
1039
1140
|
}
|
|
1040
1141
|
}));
|
|
1041
1142
|
containers.delegate(selector, "focus", function () { if (this.enabled) { containers.addClass("select2-container-active"); dropdown.addClass("select2-drop-active"); }});
|
|
1042
|
-
containers.delegate(selector, "blur", this.bind(function () {
|
|
1143
|
+
containers.delegate(selector, "blur", this.bind(function (e) {
|
|
1043
1144
|
if (clickingInside) return;
|
|
1044
|
-
if (
|
|
1145
|
+
if (e.target===focusser.get(0)) return; // ignore blurs from focusser
|
|
1146
|
+
if (!this.opened()) { this.blur(); }
|
|
1045
1147
|
}));
|
|
1046
1148
|
|
|
1047
1149
|
selection.delegate("abbr", "click", this.bind(function (e) {
|
|
@@ -1050,14 +1152,24 @@
|
|
|
1050
1152
|
killEvent(e);
|
|
1051
1153
|
this.close();
|
|
1052
1154
|
this.triggerChange();
|
|
1155
|
+
selection.focus();
|
|
1053
1156
|
}));
|
|
1054
1157
|
|
|
1055
1158
|
this.setPlaceholder();
|
|
1159
|
+
|
|
1160
|
+
focusser.bind("focus", function() { selection.focus(); });
|
|
1161
|
+
selection.bind("focus", this.bind(function() {
|
|
1162
|
+
focusser.hide();
|
|
1163
|
+
this.container.addClass("select2-container-active");
|
|
1164
|
+
}));
|
|
1165
|
+
selection.bind("blur", function() { focusser.show(); });
|
|
1166
|
+
this.opts.element.bind("open", function() { focusser.hide(); });
|
|
1056
1167
|
},
|
|
1057
1168
|
|
|
1058
1169
|
/**
|
|
1059
1170
|
* Sets selection based on source element's value
|
|
1060
1171
|
*/
|
|
1172
|
+
// single
|
|
1061
1173
|
initSelection: function () {
|
|
1062
1174
|
var selected;
|
|
1063
1175
|
if (this.opts.element.val() === "") {
|
|
@@ -1073,6 +1185,7 @@
|
|
|
1073
1185
|
this.setPlaceholder();
|
|
1074
1186
|
},
|
|
1075
1187
|
|
|
1188
|
+
// single
|
|
1076
1189
|
prepareOpts: function () {
|
|
1077
1190
|
var opts = this.parent.prepareOpts.apply(this, arguments);
|
|
1078
1191
|
|
|
@@ -1088,6 +1201,7 @@
|
|
|
1088
1201
|
return opts;
|
|
1089
1202
|
},
|
|
1090
1203
|
|
|
1204
|
+
// single
|
|
1091
1205
|
setPlaceholder: function () {
|
|
1092
1206
|
var placeholder = this.getPlaceholder();
|
|
1093
1207
|
|
|
@@ -1107,13 +1221,14 @@
|
|
|
1107
1221
|
}
|
|
1108
1222
|
},
|
|
1109
1223
|
|
|
1224
|
+
// single
|
|
1110
1225
|
postprocessResults: function (data, initial) {
|
|
1111
1226
|
var selected = 0, self = this, showSearchInput = true;
|
|
1112
1227
|
|
|
1113
1228
|
// find the selected element in the result list
|
|
1114
1229
|
|
|
1115
|
-
this.results.find(".select2-result").
|
|
1116
|
-
if (equal(self.id(
|
|
1230
|
+
this.results.find(".select2-result").each2(function (i, elm) {
|
|
1231
|
+
if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
|
|
1117
1232
|
selected = i;
|
|
1118
1233
|
return false;
|
|
1119
1234
|
}
|
|
@@ -1126,15 +1241,18 @@
|
|
|
1126
1241
|
// hide the search box if this is the first we got the results and there are a few of them
|
|
1127
1242
|
|
|
1128
1243
|
if (initial === true) {
|
|
1244
|
+
// TODO below we use data.results.length, but what we really need is something recursive to calc the length
|
|
1245
|
+
// TODO in case there are optgroups
|
|
1129
1246
|
showSearchInput = this.showSearchInput = data.results.length >= this.opts.minimumResultsForSearch;
|
|
1130
|
-
this.
|
|
1247
|
+
this.dropdown.find(".select2-search")[showSearchInput ? "removeClass" : "addClass"]("select2-search-hidden");
|
|
1131
1248
|
|
|
1132
1249
|
//add "select2-with-searchbox" to the container if search box is shown
|
|
1133
|
-
this.container[showSearchInput ? "addClass" : "removeClass"]("select2-with-searchbox");
|
|
1250
|
+
$(this.dropdown, this.container)[showSearchInput ? "addClass" : "removeClass"]("select2-with-searchbox");
|
|
1134
1251
|
}
|
|
1135
1252
|
|
|
1136
1253
|
},
|
|
1137
1254
|
|
|
1255
|
+
// single
|
|
1138
1256
|
onSelect: function (data) {
|
|
1139
1257
|
var old = this.opts.element.val();
|
|
1140
1258
|
|
|
@@ -1146,6 +1264,7 @@
|
|
|
1146
1264
|
if (!equal(old, this.id(data))) { this.triggerChange(); }
|
|
1147
1265
|
},
|
|
1148
1266
|
|
|
1267
|
+
// single
|
|
1149
1268
|
updateSelection: function (data) {
|
|
1150
1269
|
this.selection
|
|
1151
1270
|
.find("span")
|
|
@@ -1158,6 +1277,7 @@
|
|
|
1158
1277
|
}
|
|
1159
1278
|
},
|
|
1160
1279
|
|
|
1280
|
+
// single
|
|
1161
1281
|
val: function () {
|
|
1162
1282
|
var val, data = null;
|
|
1163
1283
|
|
|
@@ -1171,8 +1291,8 @@
|
|
|
1171
1291
|
// val is an id
|
|
1172
1292
|
this.select
|
|
1173
1293
|
.val(val)
|
|
1174
|
-
.find(":selected").
|
|
1175
|
-
data = {id:
|
|
1294
|
+
.find(":selected").each2(function (i, elm) {
|
|
1295
|
+
data = {id: elm.attr("value"), text: elm.text()};
|
|
1176
1296
|
return false;
|
|
1177
1297
|
});
|
|
1178
1298
|
this.updateSelection(data);
|
|
@@ -1185,6 +1305,7 @@
|
|
|
1185
1305
|
|
|
1186
1306
|
},
|
|
1187
1307
|
|
|
1308
|
+
// single
|
|
1188
1309
|
clearSearch: function () {
|
|
1189
1310
|
this.search.val("");
|
|
1190
1311
|
}
|
|
@@ -1192,6 +1313,7 @@
|
|
|
1192
1313
|
|
|
1193
1314
|
MultiSelect2 = clazz(AbstractSelect2, {
|
|
1194
1315
|
|
|
1316
|
+
// multi
|
|
1195
1317
|
createContainer: function () {
|
|
1196
1318
|
return $("<div></div>", {
|
|
1197
1319
|
"class": "select2-container select2-container-multi",
|
|
@@ -1200,7 +1322,7 @@
|
|
|
1200
1322
|
" <ul class='select2-choices'>",
|
|
1201
1323
|
//"<li class='select2-search-choice'><span>California</span><a href="javascript:void(0)" class="select2-search-choice-close"></a></li>" ,
|
|
1202
1324
|
" <li class='select2-search-field'>" ,
|
|
1203
|
-
" <input type='text' autocomplete='off' style='width: 25px;'>" ,
|
|
1325
|
+
" <input type='text' autocomplete='off' style='width: 25px;' class='select2-input'>" ,
|
|
1204
1326
|
" </li>" ,
|
|
1205
1327
|
"</ul>" ,
|
|
1206
1328
|
"<div class='select2-drop select2-drop-multi' style='display:none;'>" ,
|
|
@@ -1209,6 +1331,7 @@
|
|
|
1209
1331
|
"</div>"].join(""));
|
|
1210
1332
|
},
|
|
1211
1333
|
|
|
1334
|
+
// multi
|
|
1212
1335
|
prepareOpts: function () {
|
|
1213
1336
|
var opts = this.parent.prepareOpts.apply(this, arguments);
|
|
1214
1337
|
|
|
@@ -1219,11 +1342,11 @@
|
|
|
1219
1342
|
// TODO validate placeholder is a string if specified
|
|
1220
1343
|
|
|
1221
1344
|
if (opts.element.get(0).tagName.toLowerCase() === "select") {
|
|
1222
|
-
// install
|
|
1345
|
+
// install the selection initializer
|
|
1223
1346
|
opts.initSelection = function (element) {
|
|
1224
1347
|
var data = [];
|
|
1225
|
-
element.find(":selected").
|
|
1226
|
-
data.push({id:
|
|
1348
|
+
element.find(":selected").each2(function (i, elm) {
|
|
1349
|
+
data.push({id: elm.attr("value"), text: elm.text()});
|
|
1227
1350
|
});
|
|
1228
1351
|
return data;
|
|
1229
1352
|
};
|
|
@@ -1232,6 +1355,7 @@
|
|
|
1232
1355
|
return opts;
|
|
1233
1356
|
},
|
|
1234
1357
|
|
|
1358
|
+
// multi
|
|
1235
1359
|
initContainer: function () {
|
|
1236
1360
|
|
|
1237
1361
|
var selector = ".select2-choices", selection;
|
|
@@ -1276,7 +1400,7 @@
|
|
|
1276
1400
|
return;
|
|
1277
1401
|
case KEY.ESC:
|
|
1278
1402
|
this.cancel(e);
|
|
1279
|
-
e
|
|
1403
|
+
killEvent(e);
|
|
1280
1404
|
return;
|
|
1281
1405
|
}
|
|
1282
1406
|
}
|
|
@@ -1313,6 +1437,7 @@
|
|
|
1313
1437
|
this.clearSearch();
|
|
1314
1438
|
},
|
|
1315
1439
|
|
|
1440
|
+
// multi
|
|
1316
1441
|
enable: function() {
|
|
1317
1442
|
if (this.enabled) return;
|
|
1318
1443
|
|
|
@@ -1321,6 +1446,7 @@
|
|
|
1321
1446
|
this.search.show();
|
|
1322
1447
|
},
|
|
1323
1448
|
|
|
1449
|
+
// multi
|
|
1324
1450
|
disable: function() {
|
|
1325
1451
|
if (!this.enabled) return;
|
|
1326
1452
|
|
|
@@ -1329,6 +1455,7 @@
|
|
|
1329
1455
|
this.search.hide();
|
|
1330
1456
|
},
|
|
1331
1457
|
|
|
1458
|
+
// multi
|
|
1332
1459
|
initSelection: function () {
|
|
1333
1460
|
var data;
|
|
1334
1461
|
if (this.opts.element.val() === "") {
|
|
@@ -1347,11 +1474,11 @@
|
|
|
1347
1474
|
this.clearSearch();
|
|
1348
1475
|
},
|
|
1349
1476
|
|
|
1477
|
+
// multi
|
|
1350
1478
|
clearSearch: function () {
|
|
1351
1479
|
var placeholder = this.getPlaceholder();
|
|
1352
1480
|
|
|
1353
1481
|
if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) {
|
|
1354
|
-
|
|
1355
1482
|
this.search.val(placeholder).addClass("select2-default");
|
|
1356
1483
|
// stretch the search box to full width of the container so as much of the placeholder is visible as possible
|
|
1357
1484
|
this.search.width(this.getContainerWidth());
|
|
@@ -1360,33 +1487,40 @@
|
|
|
1360
1487
|
}
|
|
1361
1488
|
},
|
|
1362
1489
|
|
|
1490
|
+
// multi
|
|
1363
1491
|
clearPlaceholder: function () {
|
|
1364
1492
|
if (this.search.hasClass("select2-default")) {
|
|
1365
1493
|
this.search.val("").removeClass("select2-default");
|
|
1366
1494
|
}
|
|
1367
1495
|
},
|
|
1368
1496
|
|
|
1497
|
+
// multi
|
|
1369
1498
|
open: function () {
|
|
1370
1499
|
if (this.opened()) return;
|
|
1371
1500
|
this.parent.open.apply(this, arguments);
|
|
1372
|
-
|
|
1501
|
+
this.clearPlaceholder();
|
|
1502
|
+
this.resizeSearch();
|
|
1373
1503
|
this.focusSearch();
|
|
1374
1504
|
},
|
|
1375
1505
|
|
|
1506
|
+
// multi
|
|
1376
1507
|
close: function () {
|
|
1377
1508
|
if (!this.opened()) return;
|
|
1378
1509
|
this.parent.close.apply(this, arguments);
|
|
1379
1510
|
},
|
|
1380
1511
|
|
|
1512
|
+
// multi
|
|
1381
1513
|
focus: function () {
|
|
1382
1514
|
this.close();
|
|
1383
1515
|
this.search.focus();
|
|
1384
1516
|
},
|
|
1385
1517
|
|
|
1518
|
+
// multi
|
|
1386
1519
|
isFocused: function () {
|
|
1387
1520
|
return this.search.hasClass("select2-focused");
|
|
1388
1521
|
},
|
|
1389
1522
|
|
|
1523
|
+
// multi
|
|
1390
1524
|
updateSelection: function (data) {
|
|
1391
1525
|
var ids = [], filtered = [], self = this;
|
|
1392
1526
|
|
|
@@ -1406,6 +1540,7 @@
|
|
|
1406
1540
|
self.postprocessResults();
|
|
1407
1541
|
},
|
|
1408
1542
|
|
|
1543
|
+
// multi
|
|
1409
1544
|
onSelect: function (data) {
|
|
1410
1545
|
this.addSelectedChoice(data);
|
|
1411
1546
|
if (this.select) { this.postprocessResults(); }
|
|
@@ -1420,16 +1555,18 @@
|
|
|
1420
1555
|
|
|
1421
1556
|
// since its not possible to select an element that has already been
|
|
1422
1557
|
// added we do not need to check if this is a new element before firing change
|
|
1423
|
-
this.triggerChange();
|
|
1558
|
+
this.triggerChange({ added: data });
|
|
1424
1559
|
|
|
1425
1560
|
this.focusSearch();
|
|
1426
1561
|
},
|
|
1427
1562
|
|
|
1563
|
+
// multi
|
|
1428
1564
|
cancel: function () {
|
|
1429
1565
|
this.close();
|
|
1430
1566
|
this.focusSearch();
|
|
1431
1567
|
},
|
|
1432
1568
|
|
|
1569
|
+
// multi
|
|
1433
1570
|
addSelectedChoice: function (data) {
|
|
1434
1571
|
var choice,
|
|
1435
1572
|
id = this.id(data),
|
|
@@ -1465,8 +1602,10 @@
|
|
|
1465
1602
|
this.setVal(val);
|
|
1466
1603
|
},
|
|
1467
1604
|
|
|
1605
|
+
// multi
|
|
1468
1606
|
unselect: function (selected) {
|
|
1469
1607
|
var val = this.getVal(),
|
|
1608
|
+
data,
|
|
1470
1609
|
index;
|
|
1471
1610
|
|
|
1472
1611
|
selected = selected.closest(".select2-search-choice");
|
|
@@ -1475,7 +1614,9 @@
|
|
|
1475
1614
|
throw "Invalid argument: " + selected + ". Must be .select2-search-choice";
|
|
1476
1615
|
}
|
|
1477
1616
|
|
|
1478
|
-
|
|
1617
|
+
data = selected.data("select2-data");
|
|
1618
|
+
|
|
1619
|
+
index = indexOf(this.id(data), val);
|
|
1479
1620
|
|
|
1480
1621
|
if (index >= 0) {
|
|
1481
1622
|
val.splice(index, 1);
|
|
@@ -1483,16 +1624,17 @@
|
|
|
1483
1624
|
if (this.select) this.postprocessResults();
|
|
1484
1625
|
}
|
|
1485
1626
|
selected.remove();
|
|
1486
|
-
this.triggerChange();
|
|
1627
|
+
this.triggerChange({ removed: data });
|
|
1487
1628
|
},
|
|
1488
1629
|
|
|
1630
|
+
// multi
|
|
1489
1631
|
postprocessResults: function () {
|
|
1490
1632
|
var val = this.getVal(),
|
|
1491
1633
|
choices = this.results.find(".select2-result"),
|
|
1492
1634
|
self = this;
|
|
1493
1635
|
|
|
1494
|
-
choices.
|
|
1495
|
-
var
|
|
1636
|
+
choices.each2(function (i, choice) {
|
|
1637
|
+
var id = self.id(choice.data("select2-data"));
|
|
1496
1638
|
if (indexOf(id, val) >= 0) {
|
|
1497
1639
|
choice.addClass("select2-disabled");
|
|
1498
1640
|
} else {
|
|
@@ -1500,8 +1642,8 @@
|
|
|
1500
1642
|
}
|
|
1501
1643
|
});
|
|
1502
1644
|
|
|
1503
|
-
choices.
|
|
1504
|
-
if (
|
|
1645
|
+
choices.each2(function (i, choice) {
|
|
1646
|
+
if (!choice.hasClass("select2-disabled")) {
|
|
1505
1647
|
self.highlight(i);
|
|
1506
1648
|
return false;
|
|
1507
1649
|
}
|
|
@@ -1509,9 +1651,11 @@
|
|
|
1509
1651
|
|
|
1510
1652
|
},
|
|
1511
1653
|
|
|
1654
|
+
// multi
|
|
1512
1655
|
resizeSearch: function () {
|
|
1513
1656
|
|
|
1514
|
-
var minimumWidth, left, maxWidth, containerLeft, searchWidth
|
|
1657
|
+
var minimumWidth, left, maxWidth, containerLeft, searchWidth,
|
|
1658
|
+
sideBorderPadding = getSideBorderPadding(this.search);
|
|
1515
1659
|
|
|
1516
1660
|
minimumWidth = measureTextWidth(this.search) + 10;
|
|
1517
1661
|
|
|
@@ -1520,18 +1664,19 @@
|
|
|
1520
1664
|
maxWidth = this.selection.width();
|
|
1521
1665
|
containerLeft = this.selection.offset().left;
|
|
1522
1666
|
|
|
1523
|
-
searchWidth = maxWidth - (left - containerLeft) -
|
|
1667
|
+
searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;
|
|
1524
1668
|
|
|
1525
1669
|
if (searchWidth < minimumWidth) {
|
|
1526
|
-
searchWidth = maxWidth -
|
|
1670
|
+
searchWidth = maxWidth - sideBorderPadding;
|
|
1527
1671
|
}
|
|
1528
1672
|
|
|
1529
1673
|
if (searchWidth < 40) {
|
|
1530
|
-
searchWidth = maxWidth -
|
|
1674
|
+
searchWidth = maxWidth - sideBorderPadding;
|
|
1531
1675
|
}
|
|
1532
1676
|
this.search.width(searchWidth);
|
|
1533
1677
|
},
|
|
1534
1678
|
|
|
1679
|
+
// multi
|
|
1535
1680
|
getVal: function () {
|
|
1536
1681
|
var val;
|
|
1537
1682
|
if (this.select) {
|
|
@@ -1543,6 +1688,7 @@
|
|
|
1543
1688
|
}
|
|
1544
1689
|
},
|
|
1545
1690
|
|
|
1691
|
+
// multi
|
|
1546
1692
|
setVal: function (val) {
|
|
1547
1693
|
var unique;
|
|
1548
1694
|
if (this.select) {
|
|
@@ -1557,6 +1703,7 @@
|
|
|
1557
1703
|
}
|
|
1558
1704
|
},
|
|
1559
1705
|
|
|
1706
|
+
// multi
|
|
1560
1707
|
val: function () {
|
|
1561
1708
|
var val, data = [], self=this;
|
|
1562
1709
|
|
|
@@ -1584,6 +1731,8 @@
|
|
|
1584
1731
|
|
|
1585
1732
|
this.clearSearch();
|
|
1586
1733
|
},
|
|
1734
|
+
|
|
1735
|
+
// multi
|
|
1587
1736
|
onSortStart: function() {
|
|
1588
1737
|
if (this.select) {
|
|
1589
1738
|
throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");
|
|
@@ -1594,6 +1743,8 @@
|
|
|
1594
1743
|
// hide the container
|
|
1595
1744
|
this.searchContainer.hide();
|
|
1596
1745
|
},
|
|
1746
|
+
|
|
1747
|
+
// multi
|
|
1597
1748
|
onSortEnd:function() {
|
|
1598
1749
|
|
|
1599
1750
|
var val=[], self=this;
|
|
@@ -1665,7 +1816,8 @@
|
|
|
1665
1816
|
local: local,
|
|
1666
1817
|
tags: tags
|
|
1667
1818
|
}, util: {
|
|
1668
|
-
debounce: debounce
|
|
1819
|
+
debounce: debounce,
|
|
1820
|
+
markMatch: markMatch
|
|
1669
1821
|
}, "class": {
|
|
1670
1822
|
"abstract": AbstractSelect2,
|
|
1671
1823
|
"single": SingleSelect2,
|
|
@@ -287,8 +287,7 @@
|
|
|
287
287
|
&.select2-result-with-children .select2-result-label
|
|
288
288
|
font-weight: bold
|
|
289
289
|
.select2-result-label
|
|
290
|
-
|
|
291
|
-
padding: 7px 7px 8px
|
|
290
|
+
padding: 3px 7px 4px
|
|
292
291
|
margin: 0
|
|
293
292
|
cursor: pointer
|
|
294
293
|
.select2-highlighted
|
|
@@ -386,6 +385,8 @@
|
|
|
386
385
|
-moz-box-shadow: none
|
|
387
386
|
-o-box-shadow: none
|
|
388
387
|
box-shadow: none
|
|
388
|
+
&.select2-active
|
|
389
|
+
background: white image-url('spinner.gif') no-repeat 100% !important
|
|
389
390
|
|
|
390
391
|
.select2-default
|
|
391
392
|
color: #999 !important
|
|
@@ -454,3 +455,10 @@
|
|
|
454
455
|
/* disabled styles
|
|
455
456
|
|
|
456
457
|
/* end multiselect
|
|
458
|
+
|
|
459
|
+
.select2-match
|
|
460
|
+
text-decoration: underline
|
|
461
|
+
|
|
462
|
+
.select2-offscreen
|
|
463
|
+
position: absolute
|
|
464
|
+
left: -1000px
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: select2-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.6
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-06-
|
|
12
|
+
date: 2012-06-28 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: thor
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &83485240 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '0.14'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *83485240
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: bundler
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &83484990 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ~>
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: '1.0'
|
|
33
33
|
type: :development
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *83484990
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: rails
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &83484760 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ~>
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '3.0'
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *83484760
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: sass
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &83484530 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ~>
|
|
@@ -54,7 +54,7 @@ dependencies:
|
|
|
54
54
|
version: '3.1'
|
|
55
55
|
type: :development
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *83484530
|
|
58
58
|
description: Select2 is a jQuery based replacement for select boxes. It supports searching,
|
|
59
59
|
remote data sets, and infinite scrolling of results. This gem integrates Select2
|
|
60
60
|
with Rails asset pipeline for easy of use.
|