1
1
/*!
2
- * # Semantic UI 2.3.3 - Modal
2
+ * # Semantic UI 2.4.0 - Modal
3
3
* http://github.com/semantic-org/semantic-ui/
4
4
*
5
5
*
@@ -111,8 +111,7 @@ module.exports = function(parameters) {
111
111
debug : settings . debug ,
112
112
variation : settings . centered
113
113
? false
114
- : 'top aligned'
115
- ,
114
+ : 'top aligned' ,
116
115
dimmerName : 'modals'
117
116
} ,
118
117
dimmerSettings = $ . extend ( true , defaultSettings , settings . dimmerSettings )
@@ -133,7 +132,7 @@ module.exports = function(parameters) {
133
132
$dimmer = $dimmable . dimmer ( 'get dimmer' ) ;
134
133
} ,
135
134
id : function ( ) {
136
- id = ( Math . random ( ) . toString ( 16 ) + '000000000' ) . substr ( 2 , 8 ) ;
135
+ id = ( Math . random ( ) . toString ( 16 ) + '000000000' ) . substr ( 2 , 8 ) ;
137
136
elementEventNamespace = '.' + id ;
138
137
module . verbose ( 'Creating unique id for element' , id ) ;
139
138
}
@@ -168,6 +167,9 @@ module.exports = function(parameters) {
168
167
refresh : function ( ) {
169
168
module . remove . scrolling ( ) ;
170
169
module . cacheSizes ( ) ;
170
+ if ( ! module . can . useFlex ( ) ) {
171
+ module . set . modalOffset ( ) ;
172
+ }
171
173
module . set . screenHeight ( ) ;
172
174
module . set . type ( ) ;
173
175
} ,
@@ -208,12 +210,22 @@ module.exports = function(parameters) {
208
210
$window
209
211
. on ( 'resize' + elementEventNamespace , module . event . resize )
210
212
;
213
+ } ,
214
+ scrollLock : function ( ) {
215
+ // touch events default to passive, due to changes in chrome to optimize mobile perf
216
+ $dimmable . get ( 0 ) . addEventListener ( 'touchmove' , module . event . preventScroll , { passive : false } ) ;
217
+ }
218
+ } ,
219
+
220
+ unbind : {
221
+ scrollLock : function ( ) {
222
+ $dimmable . get ( 0 ) . removeEventListener ( 'touchmove' , module . event . preventScroll , { passive : false } ) ;
211
223
}
212
224
} ,
213
225
214
226
get : {
215
227
id : function ( ) {
216
- return ( Math . random ( ) . toString ( 16 ) + '000000000' ) . substr ( 2 , 8 ) ;
228
+ return ( Math . random ( ) . toString ( 16 ) + '000000000' ) . substr ( 2 , 8 ) ;
217
229
}
218
230
} ,
219
231
@@ -228,6 +240,9 @@ module.exports = function(parameters) {
228
240
ignoreRepeatedEvents = false ;
229
241
} ) ;
230
242
} ,
243
+ preventScroll : function ( event ) {
244
+ event . preventDefault ( ) ;
245
+ } ,
231
246
deny : function ( ) {
232
247
if ( ignoreRepeatedEvents || settings . onDeny . call ( element , $ ( this ) ) === false ) {
233
248
module . verbose ( 'Deny callback returned false cancelling hide' ) ;
@@ -305,6 +320,8 @@ module.exports = function(parameters) {
305
320
;
306
321
module . refreshModals ( ) ;
307
322
module . set . dimmerSettings ( ) ;
323
+ module . set . dimmerStyles ( ) ;
324
+
308
325
module . showModal ( callback ) ;
309
326
} ,
310
327
@@ -323,9 +340,16 @@ module.exports = function(parameters) {
323
340
: function ( ) { }
324
341
;
325
342
if ( module . is . animating ( ) || ! module . is . active ( ) ) {
326
-
327
343
module . showDimmer ( ) ;
328
344
module . cacheSizes ( ) ;
345
+ if ( module . can . useFlex ( ) ) {
346
+ module . remove . legacy ( ) ;
347
+ }
348
+ else {
349
+ module . set . legacy ( ) ;
350
+ module . set . modalOffset ( ) ;
351
+ module . debug ( 'Using non-flex legacy modal positioning.' ) ;
352
+ }
329
353
module . set . screenHeight ( ) ;
330
354
module . set . type ( ) ;
331
355
module . set . clickaway ( ) ;
@@ -403,6 +427,7 @@ module.exports = function(parameters) {
403
427
} ,
404
428
onComplete : function ( ) {
405
429
settings . onHidden . call ( element ) ;
430
+ module . remove . dimmerStyles ( ) ;
406
431
module . restore . focus ( ) ;
407
432
callback ( ) ;
408
433
}
@@ -427,6 +452,7 @@ module.exports = function(parameters) {
427
452
428
453
hideDimmer : function ( ) {
429
454
if ( $dimmable . dimmer ( 'is animating' ) || ( $dimmable . dimmer ( 'is active' ) ) ) {
455
+ module . unbind . scrollLock ( ) ;
430
456
$dimmable . dimmer ( 'hide' , function ( ) {
431
457
module . remove . clickaway ( ) ;
432
458
module . remove . screenHeight ( ) ;
@@ -514,11 +540,18 @@ module.exports = function(parameters) {
514
540
active : function ( ) {
515
541
$module . removeClass ( className . active ) ;
516
542
} ,
543
+ legacy : function ( ) {
544
+ $module . removeClass ( className . legacy ) ;
545
+ } ,
517
546
clickaway : function ( ) {
518
547
$dimmer
519
548
. off ( 'click' + elementEventNamespace )
520
549
;
521
550
} ,
551
+ dimmerStyles : function ( ) {
552
+ $dimmer . removeClass ( className . inverted ) ;
553
+ $dimmable . removeClass ( className . blurring ) ;
554
+ } ,
522
555
bodyStyle : function ( ) {
523
556
if ( $body . attr ( 'style' ) === '' ) {
524
557
module . verbose ( 'Removing style attribute' ) ;
@@ -547,11 +580,13 @@ module.exports = function(parameters) {
547
580
$module . addClass ( className . loading ) ;
548
581
var
549
582
scrollHeight = $module . prop ( 'scrollHeight' ) ,
583
+ modalWidth = $module . outerWidth ( ) ,
550
584
modalHeight = $module . outerHeight ( )
551
585
;
552
586
if ( module . cache === undefined || modalHeight !== 0 ) {
553
587
module . cache = {
554
588
pageHeight : $ ( document ) . outerHeight ( ) ,
589
+ width : modalWidth ,
555
590
height : modalHeight + settings . offset ,
556
591
scrollHeight : scrollHeight + settings . offset ,
557
592
contextHeight : ( settings . context == 'body' )
@@ -565,6 +600,12 @@ module.exports = function(parameters) {
565
600
} ,
566
601
567
602
can : {
603
+ useFlex : function ( ) {
604
+ return ( settings . useFlex == 'auto' )
605
+ ? settings . detachable && ! module . is . ie ( )
606
+ : settings . useFlex
607
+ ;
608
+ } ,
568
609
fit : function ( ) {
569
610
var
570
611
contextHeight = module . cache . contextHeight ,
@@ -586,6 +627,13 @@ module.exports = function(parameters) {
586
627
active : function ( ) {
587
628
return $module . hasClass ( className . active ) ;
588
629
} ,
630
+ ie : function ( ) {
631
+ var
632
+ isIE11 = ( ! ( window . ActiveXObject ) && 'ActiveXObject' in window ) ,
633
+ isIE = ( 'ActiveXObject' in window )
634
+ ;
635
+ return ( isIE11 || isIE ) ;
636
+ } ,
589
637
animating : function ( ) {
590
638
return $module . transition ( 'is supported' )
591
639
? $module . transition ( 'is animating' )
@@ -597,7 +645,7 @@ module.exports = function(parameters) {
597
645
} ,
598
646
modernBrowser : function ( ) {
599
647
// appName for IE11 reports 'Netscape' can no longer use
600
- return ! ( window . ActiveXObject || " ActiveXObject" in window ) ;
648
+ return ! ( window . ActiveXObject || ' ActiveXObject' in window ) ;
601
649
}
602
650
} ,
603
651
@@ -629,10 +677,10 @@ module.exports = function(parameters) {
629
677
debug : settings . debug ,
630
678
dimmerName : 'modals' ,
631
679
closable : 'auto' ,
680
+ useFlex : module . can . useFlex ( ) ,
632
681
variation : settings . centered
633
682
? false
634
- : 'top aligned'
635
- ,
683
+ : 'top aligned' ,
636
684
duration : {
637
685
show : settings . duration ,
638
686
hide : settings . duration
@@ -645,6 +693,11 @@ module.exports = function(parameters) {
645
693
? dimmerSettings . variation + ' inverted'
646
694
: 'inverted'
647
695
;
696
+ }
697
+ $context . dimmer ( 'setting' , dimmerSettings ) ;
698
+ } ,
699
+ dimmerStyles : function ( ) {
700
+ if ( settings . inverted ) {
648
701
$dimmer . addClass ( className . inverted ) ;
649
702
}
650
703
else {
@@ -656,7 +709,21 @@ module.exports = function(parameters) {
656
709
else {
657
710
$dimmable . removeClass ( className . blurring ) ;
658
711
}
659
- $context . dimmer ( 'setting' , dimmerSettings ) ;
712
+ } ,
713
+ modalOffset : function ( ) {
714
+ var
715
+ width = module . cache . width ,
716
+ height = module . cache . height
717
+ ;
718
+ $module
719
+ . css ( {
720
+ marginTop : ( settings . centered && module . can . fit ( ) )
721
+ ? - ( height / 2 )
722
+ : 0 ,
723
+ marginLeft : - ( width / 2 )
724
+ } )
725
+ ;
726
+ module . verbose ( 'Setting modal offset for legacy mode' ) ;
660
727
} ,
661
728
screenHeight : function ( ) {
662
729
if ( module . can . fit ( ) ) {
@@ -675,12 +742,17 @@ module.exports = function(parameters) {
675
742
scrolling : function ( ) {
676
743
$dimmable . addClass ( className . scrolling ) ;
677
744
$module . addClass ( className . scrolling ) ;
745
+ module . unbind . scrollLock ( ) ;
746
+ } ,
747
+ legacy : function ( ) {
748
+ $module . addClass ( className . legacy ) ;
678
749
} ,
679
750
type : function ( ) {
680
751
if ( module . can . fit ( ) ) {
681
752
module . verbose ( 'Modal fits on screen' ) ;
682
753
if ( ! module . others . active ( ) && ! module . others . animating ( ) ) {
683
754
module . remove . scrolling ( ) ;
755
+ module . bind . scrollLock ( ) ;
684
756
}
685
757
}
686
758
else {
@@ -881,6 +953,9 @@ _module.exports.settings = {
881
953
name : 'Modal' ,
882
954
namespace : 'modal' ,
883
955
956
+ useFlex : 'auto' ,
957
+ offset : 0 ,
958
+
884
959
silent : false ,
885
960
debug : false ,
886
961
verbose : false ,
@@ -910,7 +985,6 @@ _module.exports.settings = {
910
985
911
986
queue : false ,
912
987
duration : 500 ,
913
- offset : 0 ,
914
988
transition : 'scale' ,
915
989
916
990
// padding with edge of page
@@ -950,6 +1024,7 @@ _module.exports.settings = {
950
1024
animating : 'animating' ,
951
1025
blurring : 'blurring' ,
952
1026
inverted : 'inverted' ,
1027
+ legacy : 'legacy' ,
953
1028
loading : 'loading' ,
954
1029
scrolling : 'scrolling' ,
955
1030
undetached : 'undetached'
0 commit comments