@@ -15,7 +15,7 @@ var initS2ToggleAll = function () {
15
15
} , initS2Unselect = function ( ) {
16
16
} ;
17
17
( function ( factory ) {
18
- " use strict" ;
18
+ ' use strict' ;
19
19
if ( typeof define === 'function' && define . amd ) { // jshint ignore:line
20
20
// AMD. Register as an anonymous module.
21
21
define ( [ 'jquery' ] , factory ) ; // jshint ignore:line
@@ -30,19 +30,46 @@ var initS2ToggleAll = function () {
30
30
}
31
31
}
32
32
} ( function ( $ ) {
33
- " use strict" ;
33
+ ' use strict' ;
34
34
initS2ToggleAll = function ( id ) {
35
- var $el = $ ( '#' + id ) , togId = '#' + 's2-togall-' + id , $tog = $ ( togId ) ;
35
+ var $el = $ ( '#' + id ) , togId = '#' + 's2-togall-' + id , $tog = $ ( togId ) , listenTogAll ;
36
36
if ( ! $el . attr ( 'multiple' ) ) {
37
37
return ;
38
38
}
39
+ listenTogAll = function ( ) {
40
+ $tog . off ( '.krajees2' ) . on ( 'click.krajees2' , function ( ) {
41
+ var isSelect = $tog . hasClass ( 's2-togall-select' ) , ev = 'selectall' , val ;
42
+ if ( ! isSelect ) {
43
+ ev = 'unselectall' ;
44
+ }
45
+ $ ( '#select2-' + id + '-results .select2-results__option[role="option"]' ) . each ( function ( ) {
46
+ val = $ ( this ) . attr ( 'id' ) . split ( '-' ) . pop ( ) ;
47
+ $el . find ( 'option:not([disabled])[value="' + val + '"]' ) . prop ( 'selected' , ! ! isSelect ) ;
48
+ } ) ;
49
+ $el . select2 ( 'close' ) . trigger ( 'krajeeselect2:' + ev ) . trigger ( 'change' ) ;
50
+ } ) ;
51
+ } ;
39
52
$el . on ( 'select2:open.krajees2' , function ( ) {
53
+ var ev = 'input.krajees2 keyup.krajees2' ;
40
54
if ( $tog . parent ( ) . attr ( 'id' ) === 'parent-' + togId || ! $el . attr ( 'multiple' ) ) {
41
55
return ;
42
56
}
43
57
$ ( '#select2-' + id + '-results' ) . closest ( '.select2-dropdown' ) . prepend ( $tog ) ;
44
58
$ ( '#parent-' + togId ) . remove ( ) ;
45
- } ) . on ( 'change.krajeeselect2' , function ( ) {
59
+ $ ( this ) . parent ( ) . find ( '.select2-search__field' ) . off ( ev ) . on ( ev , function ( ) {
60
+ setTimeout ( function ( ) {
61
+ var opt = '#select2-' + id + '-results .select2-results__option[role="option"]' ,
62
+ sel = opt + '[aria-selected="true"]' , len = $ ( opt ) . length ;
63
+ $tog . removeClass ( 's2-togall-select s2-togall-unselect' ) ;
64
+ if ( len > 0 && $ ( sel ) . length === len ) {
65
+ $tog . addClass ( 's2-togall-unselect' ) ;
66
+ } else {
67
+ $tog . addClass ( 's2-togall-select' ) ;
68
+ }
69
+ listenTogAll ( ) ;
70
+ } , 100 ) ;
71
+ } ) ;
72
+ } ) . on ( 'change.krajees2' , function ( ) {
46
73
if ( ! $el . attr ( 'multiple' ) ) {
47
74
return ;
48
75
}
@@ -58,33 +85,26 @@ var initS2ToggleAll = function () {
58
85
} else {
59
86
$tog . addClass ( 's2-togall-unselect' ) ;
60
87
}
88
+ listenTogAll ( ) ;
61
89
} ) ;
62
- $tog . off ( '.krajees2' ) . on ( 'click.krajees2' , function ( ) {
63
- var isSelect = $tog . hasClass ( 's2-togall-select' ) , flag = true , ev = 'selectall' ;
64
- if ( ! isSelect ) {
65
- flag = false ;
66
- ev = 'unselectall' ;
67
- }
68
- $el . find ( 'option:not([disabled])' ) . prop ( 'selected' , flag ) ;
69
- $el . select2 ( 'close' ) . trigger ( 'krajeeselect2:' + ev ) . trigger ( 'change' ) ;
70
- } ) ;
90
+ listenTogAll ( ) ;
71
91
} ;
72
92
initS2Change = function ( $el ) {
73
93
$el = $el || $ ( this ) ;
74
- var $drop = $ ( " .select2-container--open" ) , cssClasses , i , $src = $el . parents ( " [class*='has-']" ) ;
94
+ var $drop = $ ( ' .select2-container--open' ) , cssClasses , i , $src = $el . parents ( ' [class*=\ 'has-\']' ) ;
75
95
if ( $src . length ) {
76
96
cssClasses = $src [ 0 ] . className . split ( / \s + / ) ;
77
97
for ( i = 0 ; i < cssClasses . length ; i ++ ) {
78
- if ( cssClasses [ i ] . match ( " has-" ) ) {
79
- $drop . removeClass ( " has-success has-error has-warning" ) . addClass ( cssClasses [ i ] ) ;
98
+ if ( cssClasses [ i ] . match ( ' has-' ) ) {
99
+ $drop . removeClass ( ' has-success has-error has-warning' ) . addClass ( cssClasses [ i ] ) ;
80
100
}
81
101
}
82
102
}
83
103
} ;
84
104
initS2Unselect = function ( ) {
85
105
var $el = $ ( this ) , opts = $el . data ( 'select2' ) . options ;
86
106
opts . set ( 'disabled' , true ) ;
87
- setTimeout ( function ( ) {
107
+ setTimeout ( function ( ) {
88
108
opts . set ( 'disabled' , false ) ;
89
109
$el . trigger ( 'krajeeselect2:cleared' ) ;
90
110
} , 1 ) ;
@@ -124,9 +144,9 @@ var initS2ToggleAll = function () {
124
144
$el . next ( themeCss ) . removeClass ( sizeCss ) . addClass ( sizeCss ) ;
125
145
}
126
146
if ( doReset ) {
127
- $el . closest ( " form" ) . off ( '.krajees2' ) . on ( " reset.krajees2" , function ( ) {
147
+ $el . closest ( ' form' ) . off ( '.krajees2' ) . on ( ' reset.krajees2' , function ( ) {
128
148
setTimeout ( function ( ) {
129
- $el . trigger ( " change" ) . trigger ( " krajeeselect2:reset" ) ;
149
+ $el . trigger ( ' change' ) . trigger ( ' krajeeselect2:reset' ) ;
130
150
} , 100 ) ;
131
151
} ) ;
132
152
}
@@ -146,5 +166,11 @@ var initS2ToggleAll = function () {
146
166
$el . on ( 'change.krajees2' , function ( ) {
147
167
setTimeout ( initS2Change , 500 ) ;
148
168
} ) . on ( 'select2:unselecting.krajees2' , initS2Unselect ) ;
169
+ setTimeout ( function ( ) {
170
+ if ( $el . attr ( 'multiple' ) && $el . attr ( 'dir' ) === 'rtl' ) {
171
+ $el . parent ( ) . find ( '.select2-search__field' ) . css ( { width : '100%' , direction : 'rtl' } ) ;
172
+ $el . parent ( ) . find ( '.select2-search--inline' ) . css ( { float : 'none' } ) ;
173
+ }
174
+ } , 100 ) ;
149
175
} ;
150
176
} ) ) ;
0 commit comments