@atlassian/aui
Version:
Atlassian User Interface Framework
133 lines (105 loc) • 4.25 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['exports', './jquery', './internal/deprecation', './internal/animation', './internal/globalize'], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require('./jquery'), require('./internal/deprecation'), require('./internal/animation'), require('./internal/globalize'));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.jquery, global.deprecation, global.animation, global.globalize);
global.blanket = mod.exports;
}
})(this, function (exports, _jquery, _deprecation, _animation, _globalize) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.undim = exports.dim = undefined;
var _jquery2 = _interopRequireDefault(_jquery);
var _globalize2 = _interopRequireDefault(_globalize);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
var overflowEl;
var _hiddenByAui = [];
/**
* Dims the screen using a blanket div
* @param useShim deprecated, it is calculated by dim() now
*/
function dim(useShim, zIndex) {
//if we're blanketing the page it means we want to hide the whatever is under the blanket from the screen readers as well
function hasAriaHidden(element) {
return element.getAttribute('aria-hidden') ? true : false;
}
function isAuiLayer(element) {
return element.className.match(/\baui-layer\b/) ? true : false;
}
Array.prototype.forEach.call(document.body.children, function (element) {
if (!hasAriaHidden(element) && !isAuiLayer(element)) {
element.setAttribute('aria-hidden', 'true');
_hiddenByAui.push(element);
}
});
if (!overflowEl) {
overflowEl = document.body;
}
if (useShim === true) {
useShimDeprecationLogger();
}
var isBlanketShowing = !!dim.$dim && dim.$dim.attr('aria-hidden') === 'false';
if (!!dim.$dim) {
dim.$dim.remove();
dim.$dim = null;
}
dim.$dim = (0, _jquery2.default)('<div></div>').addClass('aui-blanket');
dim.$dim.attr('tabindex', '0'); //required, or the last element's focusout event will go to the browser
dim.$dim.appendTo(document.body);
if (!isBlanketShowing) {
//recompute after insertion and before setting aria-hidden=false to ensure we calculate a difference in
//computed styles
(0, _animation.recomputeStyle)(dim.$dim);
dim.cachedOverflow = {
overflow: overflowEl.style.overflow,
overflowX: overflowEl.style.overflowX,
overflowY: overflowEl.style.overflowY
};
overflowEl.style.overflowX = 'hidden';
overflowEl.style.overflowY = 'hidden';
overflowEl.style.overflow = 'hidden';
}
dim.$dim.attr('aria-hidden', 'false');
if (zIndex) {
dim.$dim.css({ zIndex: zIndex });
}
return dim.$dim;
}
/**
* Removes semitransparent DIV
* @see dim
*/
function undim() {
_hiddenByAui.forEach(function (element) {
element.removeAttribute('aria-hidden');
});
_hiddenByAui = [];
if (dim.$dim) {
dim.$dim.attr('aria-hidden', 'true');
if (overflowEl) {
overflowEl.style.overflow = dim.cachedOverflow.overflow;
overflowEl.style.overflowX = dim.cachedOverflow.overflowX;
overflowEl.style.overflowY = dim.cachedOverflow.overflowY;
}
}
}
var useShimDeprecationLogger = (0, _deprecation.getMessageLogger)('useShim', {
extraInfo: 'useShim has no alternative as it is now calculated by dim().'
});
(0, _globalize2.default)('dim', dim);
(0, _globalize2.default)('undim', undim);
exports.dim = dim;
exports.undim = undim;
});
//# sourceMappingURL=blanket.js.map