Browse Source

Merge pull request #6562 from Semantic-Org/legacy-modals

Legacy modals
pull/6218/merge
Jack Lukic 6 years ago
committed by GitHub
parent
commit
1544d26960
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 109 additions and 9 deletions
  1. 11
      RELEASE-NOTES.md
  2. 26
      src/definitions/modules/dimmer.js
  3. 12
      src/definitions/modules/dimmer.less
  4. 61
      src/definitions/modules/modal.js
  5. 8
      src/definitions/modules/modal.less

11
RELEASE-NOTES.md

@ -1,5 +1,16 @@
## RELEASE NOTES
### Version 2.3.4 - Aug xx, 2018
**Enhancements**
- **Modal/Dimmer** - Modals and dimmers now include a new setting `useFlex` which defaults to `auto`. Modals and dimmers will automatically revert to using non-flex layouts when there may be layout issues with using flexbox.
For example when `attachable: false` is used with a modal, or if IE11/Edge is used (Absolutely positioned elements inside flex containers in IE behave differently)
### Version 2.3.3 - June 18, 2018
**Bug Fixes**

26
src/definitions/modules/dimmer.js

@ -243,12 +243,22 @@ $.fn.dimmer = function(parameters) {
: function(){}
;
if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
if(settings.useFlex) {
module.debug('Using flex dimmer');
module.remove.legacy();
}
else {
module.debug('Using legacy non-flex dimmer');
module.set.legacy();
}
if(settings.opacity !== 'auto') {
module.set.opacity();
}
$dimmer
.transition({
displayType : 'flex',
displayType : settings.useFlex
? 'flex'
: 'block',
animation : settings.transition + ' in',
queue : false,
duration : module.get.duration(),
@ -293,7 +303,9 @@ $.fn.dimmer = function(parameters) {
module.verbose('Hiding dimmer with css');
$dimmer
.transition({
displayType : 'flex',
displayType : settings.useFlex
? 'flex'
: 'block',
animation : settings.transition + ' out',
queue : false,
duration : module.get.duration(),
@ -415,6 +427,9 @@ $.fn.dimmer = function(parameters) {
module.debug('Setting opacity to', opacity);
$dimmer.css('background-color', color);
},
legacy: function() {
$dimmer.addClass(className.legacy);
},
active: function() {
$dimmer.addClass(className.active);
},
@ -444,6 +459,9 @@ $.fn.dimmer = function(parameters) {
.removeClass(className.active)
;
},
legacy: function() {
$dimmer.removeClass(className.legacy);
},
dimmed: function() {
$dimmable.removeClass(className.dimmed);
},
@ -657,6 +675,9 @@ $.fn.dimmer.settings = {
verbose : false,
performance : true,
// whether should use flex layout
useFlex : true,
// name to distinguish between multiple dimmers in context
dimmerName : false,
@ -700,6 +721,7 @@ $.fn.dimmer.settings = {
dimmer : 'dimmer',
disabled : 'disabled',
hide : 'hide',
legacy : 'legacy',
pageDimmer : 'page',
show : 'show'
},

12
src/definitions/modules/dimmer.less

@ -113,6 +113,18 @@
Variations
*******************************/
/*--------------
Legacy
---------------*/
/* Animating / Active / Visible */
.dimmed.dimmable > .ui.animating.legacy.dimmer,
.dimmed.dimmable > .ui.visible.legacy.dimmer,
.ui.active.legacy.dimmer {
display: block;
}
/*--------------
Alignment
---------------*/

61
src/definitions/modules/modal.js

@ -132,7 +132,7 @@ $.fn.modal = function(parameters) {
$dimmer = $dimmable.dimmer('get dimmer');
},
id: function() {
id = (Math.random().toString(16) + '000000000').substr(2,8);
id = (Math.random().toString(16) + '000000000').substr(2, 8);
elementEventNamespace = '.' + id;
module.verbose('Creating unique id for element', id);
}
@ -167,6 +167,9 @@ $.fn.modal = function(parameters) {
refresh: function() {
module.remove.scrolling();
module.cacheSizes();
if(!module.can.useFlex()) {
module.set.modalOffset();
}
module.set.screenHeight();
module.set.type();
},
@ -212,7 +215,7 @@ $.fn.modal = function(parameters) {
get: {
id: function() {
return (Math.random().toString(16) + '000000000').substr(2,8);
return (Math.random().toString(16) + '000000000').substr(2, 8);
}
},
@ -322,9 +325,16 @@ $.fn.modal = function(parameters) {
: function(){}
;
if( module.is.animating() || !module.is.active() ) {
module.showDimmer();
module.cacheSizes();
if(module.can.useFlex()) {
module.remove.legacy();
}
else {
module.set.legacy();
module.set.modalOffset();
module.debug('Using non-flex legacy modal positioning.');
}
module.set.screenHeight();
module.set.type();
module.set.clickaway();
@ -513,6 +523,9 @@ $.fn.modal = function(parameters) {
active: function() {
$module.removeClass(className.active);
},
legacy: function() {
$module.removeClass(className.legacy);
},
clickaway: function() {
$dimmer
.off('click' + elementEventNamespace)
@ -546,11 +559,13 @@ $.fn.modal = function(parameters) {
$module.addClass(className.loading);
var
scrollHeight = $module.prop('scrollHeight'),
modalWidth = $module.outerWidth(),
modalHeight = $module.outerHeight()
;
if(module.cache === undefined || modalHeight !== 0) {
module.cache = {
pageHeight : $(document).outerHeight(),
width : modalWidth,
height : modalHeight + settings.offset,
scrollHeight : scrollHeight + settings.offset,
contextHeight : (settings.context == 'body')
@ -564,6 +579,12 @@ $.fn.modal = function(parameters) {
},
can: {
useFlex: function() {
return (settings.useFlex == 'auto')
? settings.detachable && !module.is.ie()
: settings.useFlex
;
},
fit: function() {
var
contextHeight = module.cache.contextHeight,
@ -585,6 +606,13 @@ $.fn.modal = function(parameters) {
active: function() {
return $module.hasClass(className.active);
},
ie: function() {
var
isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),
isIE = ('ActiveXObject' in window)
;
return (isIE11 || isIE);
},
animating: function() {
return $module.transition('is supported')
? $module.transition('is animating')
@ -596,7 +624,7 @@ $.fn.modal = function(parameters) {
},
modernBrowser: function() {
// appName for IE11 reports 'Netscape' can no longer use
return !(window.ActiveXObject || "ActiveXObject" in window);
return !(window.ActiveXObject || 'ActiveXObject' in window);
}
},
@ -628,10 +656,10 @@ $.fn.modal = function(parameters) {
debug : settings.debug,
dimmerName : 'modals',
closable : 'auto',
useFlex : module.can.useFlex(),
variation : settings.centered
? false
: 'top aligned'
,
: 'top aligned',
duration : {
show : settings.duration,
hide : settings.duration
@ -657,6 +685,19 @@ $.fn.modal = function(parameters) {
}
$context.dimmer('setting', dimmerSettings);
},
modalOffset: function() {
var
width = module.cache.width,
height = module.cache.height
;
$module
.css({
marginTop: -(height / 2),
marginLeft: -(width / 2)
})
;
module.verbose('Setting modal offset for legacy mode');
},
screenHeight: function() {
if( module.can.fit() ) {
$body.css('height', '');
@ -675,6 +716,9 @@ $.fn.modal = function(parameters) {
$dimmable.addClass(className.scrolling);
$module.addClass(className.scrolling);
},
legacy: function() {
$module.addClass(className.legacy);
},
type: function() {
if(module.can.fit()) {
module.verbose('Modal fits on screen');
@ -880,6 +924,9 @@ $.fn.modal.settings = {
name : 'Modal',
namespace : 'modal',
useFlex : 'auto',
offset : 0,
silent : false,
debug : false,
verbose : false,
@ -909,7 +956,6 @@ $.fn.modal.settings = {
queue : false,
duration : 500,
offset : 0,
transition : 'scale',
// padding with edge of page
@ -949,6 +995,7 @@ $.fn.modal.settings = {
animating : 'animating',
blurring : 'blurring',
inverted : 'inverted',
legacy : 'legacy',
loading : 'loading',
scrolling : 'scrolling',
undetached : 'undetached'

8
src/definitions/modules/modal.less

@ -23,6 +23,7 @@
*******************************/
.ui.modal {
position: absolute;
display: none;
z-index: @zIndex;
text-align: left;
@ -309,6 +310,13 @@
color: @basicInvertedModalHeaderColor;
}
/* Resort to margin positioning if legacy */
.ui.legacy.modal,
.ui.legacy.page.dimmer > .ui.modal {
top: 50%;
left: 50%;
}
/* Tablet and Mobile */
@media only screen and (max-width : @largestTabletScreen) {
.ui.basic.modal > .close {

Loading…
Cancel
Save