@@ -15,7 +15,7 @@ var initS2ToggleAll = function () {
1515} , initS2Unselect = function ( ) {
1616} ;
1717( function ( factory ) {
18- " use strict" ;
18+ ' use strict' ;
1919 if ( typeof define === 'function' && define . amd ) { // jshint ignore:line
2020 // AMD. Register as an anonymous module.
2121 define ( [ 'jquery' ] , factory ) ; // jshint ignore:line
@@ -30,19 +30,46 @@ var initS2ToggleAll = function () {
3030 }
3131 }
3232} ( function ( $ ) {
33- " use strict" ;
33+ ' use strict' ;
3434 initS2ToggleAll = function ( id ) {
35- var $el = $ ( '#' + id ) , togId = '#' + 's2-togall-' + id , $tog = $ ( togId ) ;
35+ var $el = $ ( '#' + id ) , togId = '#' + 's2-togall-' + id , $tog = $ ( togId ) , listenTogAll ;
3636 if ( ! $el . attr ( 'multiple' ) ) {
3737 return ;
3838 }
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+ } ;
3952 $el . on ( 'select2:open.krajees2' , function ( ) {
53+ var ev = 'input.krajees2 keyup.krajees2' ;
4054 if ( $tog . parent ( ) . attr ( 'id' ) === 'parent-' + togId || ! $el . attr ( 'multiple' ) ) {
4155 return ;
4256 }
4357 $ ( '#select2-' + id + '-results' ) . closest ( '.select2-dropdown' ) . prepend ( $tog ) ;
4458 $ ( '#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 ( ) {
4673 if ( ! $el . attr ( 'multiple' ) ) {
4774 return ;
4875 }
@@ -58,33 +85,26 @@ var initS2ToggleAll = function () {
5885 } else {
5986 $tog . addClass ( 's2-togall-unselect' ) ;
6087 }
88+ listenTogAll ( ) ;
6189 } ) ;
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 ( ) ;
7191 } ;
7292 initS2Change = function ( $el ) {
7393 $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-\']' ) ;
7595 if ( $src . length ) {
7696 cssClasses = $src [ 0 ] . className . split ( / \s + / ) ;
7797 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 ] ) ;
80100 }
81101 }
82102 }
83103 } ;
84104 initS2Unselect = function ( ) {
85105 var $el = $ ( this ) , opts = $el . data ( 'select2' ) . options ;
86106 opts . set ( 'disabled' , true ) ;
87- setTimeout ( function ( ) {
107+ setTimeout ( function ( ) {
88108 opts . set ( 'disabled' , false ) ;
89109 $el . trigger ( 'krajeeselect2:cleared' ) ;
90110 } , 1 ) ;
@@ -124,9 +144,9 @@ var initS2ToggleAll = function () {
124144 $el . next ( themeCss ) . removeClass ( sizeCss ) . addClass ( sizeCss ) ;
125145 }
126146 if ( doReset ) {
127- $el . closest ( " form" ) . off ( '.krajees2' ) . on ( " reset.krajees2" , function ( ) {
147+ $el . closest ( ' form' ) . off ( '.krajees2' ) . on ( ' reset.krajees2' , function ( ) {
128148 setTimeout ( function ( ) {
129- $el . trigger ( " change" ) . trigger ( " krajeeselect2:reset" ) ;
149+ $el . trigger ( ' change' ) . trigger ( ' krajeeselect2:reset' ) ;
130150 } , 100 ) ;
131151 } ) ;
132152 }
@@ -146,5 +166,11 @@ var initS2ToggleAll = function () {
146166 $el . on ( 'change.krajees2' , function ( ) {
147167 setTimeout ( initS2Change , 500 ) ;
148168 } ) . 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 ) ;
149175 } ;
150176} ) ) ;
0 commit comments