@@ -204,7 +204,7 @@ if (typeof jQuery === 'undefined') {
204
204
var val = $el . is ( 'input' ) ? 'val' : 'html'
205
205
var data = $el . data ( )
206
206
207
- state = state + 'Text'
207
+ state += 'Text'
208
208
209
209
if ( data . resetText == null ) $el . data ( 'resetText' , $el [ val ] ( ) )
210
210
@@ -230,14 +230,18 @@ if (typeof jQuery === 'undefined') {
230
230
var $input = this . $element . find ( 'input' )
231
231
if ( $input . prop ( 'type' ) == 'radio' ) {
232
232
if ( $input . prop ( 'checked' ) ) changed = false
233
- if ( ! $input . prop ( 'checked' ) || ! this . $element . hasClass ( 'active' ) ) $parent . find ( '.active' ) . removeClass ( 'active' )
233
+ $parent . find ( '.active' ) . removeClass ( 'active' )
234
+ this . $element . addClass ( 'active' )
235
+ } else if ( $input . prop ( 'type' ) == 'checkbox' ) {
236
+ if ( ( $input . prop ( 'checked' ) ) !== this . $element . hasClass ( 'active' ) ) changed = false
237
+ this . $element . toggleClass ( 'active' )
234
238
}
235
- if ( changed ) $input . prop ( 'checked' , ! this . $element . hasClass ( 'active' ) ) . trigger ( 'change' )
239
+ $input . prop ( 'checked' , this . $element . hasClass ( 'active' ) )
240
+ if ( changed ) $input . trigger ( 'change' )
236
241
} else {
237
242
this . $element . attr ( 'aria-pressed' , ! this . $element . hasClass ( 'active' ) )
243
+ this . $element . toggleClass ( 'active' )
238
244
}
239
-
240
- if ( changed ) this . $element . toggleClass ( 'active' )
241
245
}
242
246
243
247
@@ -280,7 +284,7 @@ if (typeof jQuery === 'undefined') {
280
284
var $btn = $ ( e . target )
281
285
if ( ! $btn . hasClass ( 'btn' ) ) $btn = $btn . closest ( '.btn' )
282
286
Plugin . call ( $btn , 'toggle' )
283
- if ( ! $ ( e . target ) . is ( 'input[type="radio"]' ) ) e . preventDefault ( )
287
+ if ( ! ( $ ( e . target ) . is ( 'input[type="radio"]' ) || $ ( e . target ) . is ( 'input[type="checkbox"]' ) ) ) e . preventDefault ( )
284
288
} )
285
289
. on ( 'focus.bs.button.data-api blur.bs.button.data-api' , '[data-toggle^="button"]' , function ( e ) {
286
290
$ ( e . target ) . closest ( '.btn' ) . toggleClass ( 'focus' , / ^ f o c u s ( i n ) ? $ / . test ( e . type ) )
@@ -761,6 +765,40 @@ if (typeof jQuery === 'undefined') {
761
765
762
766
Dropdown . VERSION = '3.3.4'
763
767
768
+ function getParent ( $this ) {
769
+ var selector = $this . attr ( 'data-target' )
770
+
771
+ if ( ! selector ) {
772
+ selector = $this . attr ( 'href' )
773
+ selector = selector && / # [ A - Z a - z ] / . test ( selector ) && selector . replace ( / .* (? = # [ ^ \s ] * $ ) / , '' ) // strip for ie7
774
+ }
775
+
776
+ var $parent = selector && $ ( selector )
777
+
778
+ return $parent && $parent . length ? $parent : $this . parent ( )
779
+ }
780
+
781
+ function clearMenus ( e ) {
782
+ if ( e && e . which === 3 ) return
783
+ $ ( backdrop ) . remove ( )
784
+ $ ( toggle ) . each ( function ( ) {
785
+ var $this = $ ( this )
786
+ var $parent = getParent ( $this )
787
+ var relatedTarget = { relatedTarget : this }
788
+
789
+ if ( ! $parent . hasClass ( 'open' ) ) return
790
+
791
+ if ( e && e . type == 'click' && / i n p u t | t e x t a r e a / i. test ( e . target . tagName ) && $ . contains ( $parent [ 0 ] , e . target ) ) return
792
+
793
+ $parent . trigger ( e = $ . Event ( 'hide.bs.dropdown' , relatedTarget ) )
794
+
795
+ if ( e . isDefaultPrevented ( ) ) return
796
+
797
+ $this . attr ( 'aria-expanded' , 'false' )
798
+ $parent . removeClass ( 'open' ) . trigger ( 'hidden.bs.dropdown' , relatedTarget )
799
+ } )
800
+ }
801
+
764
802
Dropdown . prototype . toggle = function ( e ) {
765
803
var $this = $ ( this )
766
804
@@ -810,7 +848,7 @@ if (typeof jQuery === 'undefined') {
810
848
var $parent = getParent ( $this )
811
849
var isActive = $parent . hasClass ( 'open' )
812
850
813
- if ( ( ! isActive && e . which != 27 ) || ( isActive && e . which == 27 ) ) {
851
+ if ( ! isActive && e . which != 27 || isActive && e . which == 27 ) {
814
852
if ( e . which == 27 ) $parent . find ( toggle ) . trigger ( 'focus' )
815
853
return $this . trigger ( 'click' )
816
854
}
@@ -822,47 +860,13 @@ if (typeof jQuery === 'undefined') {
822
860
823
861
var index = $items . index ( e . target )
824
862
825
- if ( e . which == 38 && index > 0 ) index -- // up
826
- if ( e . which == 40 && index < $items . length - 1 ) index ++ // down
827
- if ( ! ~ index ) index = 0
863
+ if ( e . which == 38 && index > 0 ) index -- // up
864
+ if ( e . which == 40 && index < $items . length - 1 ) index ++ // down
865
+ if ( ! ~ index ) index = 0
828
866
829
867
$items . eq ( index ) . trigger ( 'focus' )
830
868
}
831
869
832
- function clearMenus ( e ) {
833
- if ( e && e . which === 3 ) return
834
- $ ( backdrop ) . remove ( )
835
- $ ( toggle ) . each ( function ( ) {
836
- var $this = $ ( this )
837
- var $parent = getParent ( $this )
838
- var relatedTarget = { relatedTarget : this }
839
-
840
- if ( ! $parent . hasClass ( 'open' ) ) return
841
-
842
- if ( e && e . type == 'click' && / i n p u t | t e x t a r e a / i. test ( e . target . tagName ) && $ . contains ( $parent [ 0 ] , e . target ) ) return
843
-
844
- $parent . trigger ( e = $ . Event ( 'hide.bs.dropdown' , relatedTarget ) )
845
-
846
- if ( e . isDefaultPrevented ( ) ) return
847
-
848
- $this . attr ( 'aria-expanded' , 'false' )
849
- $parent . removeClass ( 'open' ) . trigger ( 'hidden.bs.dropdown' , relatedTarget )
850
- } )
851
- }
852
-
853
- function getParent ( $this ) {
854
- var selector = $this . attr ( 'data-target' )
855
-
856
- if ( ! selector ) {
857
- selector = $this . attr ( 'href' )
858
- selector = selector && / # [ A - Z a - z ] / . test ( selector ) && selector . replace ( / .* (? = # [ ^ \s ] * $ ) / , '' ) // strip for ie7
859
- }
860
-
861
- var $parent = selector && $ ( selector )
862
-
863
- return $parent && $parent . length ? $parent : $this . parent ( )
864
- }
865
-
866
870
867
871
// DROPDOWN PLUGIN DEFINITION
868
872
// ==========================
@@ -1265,6 +1269,7 @@ if (typeof jQuery === 'undefined') {
1265
1269
this . timeout = null
1266
1270
this . hoverState = null
1267
1271
this . $element = null
1272
+ this . inState = null
1268
1273
1269
1274
this . init ( 'tooltip' , element , options )
1270
1275
}
@@ -1295,6 +1300,7 @@ if (typeof jQuery === 'undefined') {
1295
1300
this . $element = $ ( element )
1296
1301
this . options = this . getOptions ( options )
1297
1302
this . $viewport = this . options . viewport && $ ( $ . isFunction ( this . options . viewport ) ? this . options . viewport . call ( this , this . $element ) : ( this . options . viewport . selector || this . options . viewport ) )
1303
+ this . inState = { click : false , hover : false , focus : false }
1298
1304
1299
1305
if ( this . $element [ 0 ] instanceof document . constructor && ! this . options . selector ) {
1300
1306
throw new Error ( '`selector` option must be specified when initializing ' + this . type + ' on the window.document object!' )
@@ -1353,16 +1359,20 @@ if (typeof jQuery === 'undefined') {
1353
1359
var self = obj instanceof this . constructor ?
1354
1360
obj : $ ( obj . currentTarget ) . data ( 'bs.' + this . type )
1355
1361
1356
- if ( self && self . $tip && self . $tip . is ( ':visible' ) ) {
1357
- self . hoverState = 'in'
1358
- return
1359
- }
1360
-
1361
1362
if ( ! self ) {
1362
1363
self = new this . constructor ( obj . currentTarget , this . getDelegateOptions ( ) )
1363
1364
$ ( obj . currentTarget ) . data ( 'bs.' + this . type , self )
1364
1365
}
1365
1366
1367
+ if ( obj instanceof $ . Event ) {
1368
+ self . inState [ obj . type == 'focusin' ? 'focus' : 'hover' ] = true
1369
+ }
1370
+
1371
+ if ( self . tip ( ) . hasClass ( 'in' ) || self . hoverState == 'in' ) {
1372
+ self . hoverState = 'in'
1373
+ return
1374
+ }
1375
+
1366
1376
clearTimeout ( self . timeout )
1367
1377
1368
1378
self . hoverState = 'in'
@@ -1374,6 +1384,14 @@ if (typeof jQuery === 'undefined') {
1374
1384
} , self . options . delay . show )
1375
1385
}
1376
1386
1387
+ Tooltip . prototype . isInStateTrue = function ( ) {
1388
+ for ( var key in this . inState ) {
1389
+ if ( this . inState [ key ] ) return true
1390
+ }
1391
+
1392
+ return false
1393
+ }
1394
+
1377
1395
Tooltip . prototype . leave = function ( obj ) {
1378
1396
var self = obj instanceof this . constructor ?
1379
1397
obj : $ ( obj . currentTarget ) . data ( 'bs.' + this . type )
@@ -1383,6 +1401,12 @@ if (typeof jQuery === 'undefined') {
1383
1401
$ ( obj . currentTarget ) . data ( 'bs.' + this . type , self )
1384
1402
}
1385
1403
1404
+ if ( obj instanceof $ . Event ) {
1405
+ self . inState [ obj . type == 'focusout' ? 'focus' : 'hover' ] = false
1406
+ }
1407
+
1408
+ if ( self . isInStateTrue ( ) ) return
1409
+
1386
1410
clearTimeout ( self . timeout )
1387
1411
1388
1412
self . hoverState = 'out'
@@ -1483,8 +1507,8 @@ if (typeof jQuery === 'undefined') {
1483
1507
if ( isNaN ( marginTop ) ) marginTop = 0
1484
1508
if ( isNaN ( marginLeft ) ) marginLeft = 0
1485
1509
1486
- offset . top = offset . top + marginTop
1487
- offset . left = offset . left + marginLeft
1510
+ offset . top += marginTop
1511
+ offset . left += marginLeft
1488
1512
1489
1513
// $.fn.offset doesn't round pixel values
1490
1514
// so we use setOffset directly with our own function B-0
@@ -1566,7 +1590,7 @@ if (typeof jQuery === 'undefined') {
1566
1590
1567
1591
Tooltip . prototype . fixTitle = function ( ) {
1568
1592
var $e = this . $element
1569
- if ( $e . attr ( 'title' ) || typeof ( $e . attr ( 'data-original-title' ) ) != 'string' ) {
1593
+ if ( $e . attr ( 'title' ) || typeof $e . attr ( 'data-original-title' ) != 'string' ) {
1570
1594
$e . attr ( 'data-original-title' , $e . attr ( 'title' ) || '' ) . attr ( 'title' , '' )
1571
1595
}
1572
1596
}
@@ -1682,7 +1706,13 @@ if (typeof jQuery === 'undefined') {
1682
1706
}
1683
1707
}
1684
1708
1685
- self . tip ( ) . hasClass ( 'in' ) ? self . leave ( self ) : self . enter ( self )
1709
+ if ( e ) {
1710
+ self . inState . click = ! self . inState . click
1711
+ if ( self . isInStateTrue ( ) ) self . enter ( self )
1712
+ else self . leave ( self )
1713
+ } else {
1714
+ self . tip ( ) . hasClass ( 'in' ) ? self . leave ( self ) : self . enter ( self )
1715
+ }
1686
1716
}
1687
1717
1688
1718
Tooltip . prototype . destroy = function ( ) {
@@ -2029,7 +2059,9 @@ if (typeof jQuery === 'undefined') {
2029
2059
// ====================
2030
2060
2031
2061
var Tab = function ( element ) {
2062
+ // jscs:disable requireDollarBeforejQueryAssignment
2032
2063
this . element = $ ( element )
2064
+ // jscs:enable requireDollarBeforejQueryAssignment
2033
2065
}
2034
2066
2035
2067
Tab . VERSION = '3.3.4'
@@ -2080,7 +2112,7 @@ if (typeof jQuery === 'undefined') {
2080
2112
var $active = container . find ( '> .active' )
2081
2113
var transition = callback
2082
2114
&& $ . support . transition
2083
- && ( ( $active . length && $active . hasClass ( 'fade' ) ) || ! ! container . find ( '> .fade' ) . length )
2115
+ && ( $active . length && $active . hasClass ( 'fade' ) || ! ! container . find ( '> .fade' ) . length )
2084
2116
2085
2117
function next ( ) {
2086
2118
$active
@@ -2247,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
2247
2279
var offset = this . options . offset
2248
2280
var offsetTop = offset . top
2249
2281
var offsetBottom = offset . bottom
2250
- var scrollHeight = $ ( document . body ) . height ( )
2282
+ var scrollHeight = Math . max ( $ ( document ) . height ( ) , $ ( document . body ) . height ( ) )
2251
2283
2252
2284
if ( typeof offset != 'object' ) offsetBottom = offsetTop = offset
2253
2285
if ( typeof offsetTop == 'function' ) offsetTop = offset . top ( this . $element )
0 commit comments