mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 03:18:19 -07:00
112 lines
3.0 KiB
HTML
112 lines
3.0 KiB
HTML
<!--
|
|
@license
|
|
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
Code distributed by Google as part of the polymer project is also
|
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
-->
|
|
|
|
<link rel="import" href="../polymer/polymer.html">
|
|
|
|
<script>
|
|
|
|
Polymer.IronOverlayManager = (function() {
|
|
|
|
var overlays = [];
|
|
var DEFAULT_Z = 10;
|
|
var backdrops = [];
|
|
|
|
// track overlays for z-index and focus managemant
|
|
function addOverlay(overlay) {
|
|
var z0 = currentOverlayZ();
|
|
overlays.push(overlay);
|
|
var z1 = currentOverlayZ();
|
|
if (z1 <= z0) {
|
|
applyOverlayZ(overlay, z0);
|
|
}
|
|
}
|
|
|
|
function removeOverlay(overlay) {
|
|
var i = overlays.indexOf(overlay);
|
|
if (i >= 0) {
|
|
overlays.splice(i, 1);
|
|
setZ(overlay, '');
|
|
}
|
|
}
|
|
|
|
function applyOverlayZ(overlay, aboveZ) {
|
|
setZ(overlay, aboveZ + 2);
|
|
}
|
|
|
|
function setZ(element, z) {
|
|
element.style.zIndex = z;
|
|
}
|
|
|
|
function currentOverlay() {
|
|
var i = overlays.length - 1;
|
|
while (overlays[i] && !overlays[i].opened) {
|
|
--i;
|
|
}
|
|
return overlays[i];
|
|
}
|
|
|
|
function currentOverlayZ() {
|
|
var z;
|
|
var current = currentOverlay();
|
|
if (current) {
|
|
var z1 = window.getComputedStyle(current).zIndex;
|
|
if (!isNaN(z1)) {
|
|
z = Number(z1);
|
|
}
|
|
}
|
|
return z || DEFAULT_Z;
|
|
}
|
|
|
|
function focusOverlay() {
|
|
var current = currentOverlay();
|
|
// We have to be careful to focus the next overlay _after_ any current
|
|
// transitions are complete (due to the state being toggled prior to the
|
|
// transition). Otherwise, we risk infinite recursion when a transitioning
|
|
// (closed) overlay becomes the current overlay.
|
|
//
|
|
// NOTE: We make the assumption that any overlay that completes a transition
|
|
// will call into focusOverlay to kick the process back off. Currently:
|
|
// transitionend -> _applyFocus -> focusOverlay.
|
|
if (current && !current.transitioning) {
|
|
current._applyFocus();
|
|
}
|
|
}
|
|
|
|
function trackBackdrop(element) {
|
|
// backdrops contains the overlays with a backdrop that are currently
|
|
// visible
|
|
if (element.opened) {
|
|
backdrops.push(element);
|
|
} else {
|
|
var index = backdrops.indexOf(element);
|
|
if (index >= 0) {
|
|
backdrops.splice(index, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
function getBackdrops() {
|
|
return backdrops;
|
|
}
|
|
|
|
return {
|
|
addOverlay: addOverlay,
|
|
removeOverlay: removeOverlay,
|
|
currentOverlay: currentOverlay,
|
|
currentOverlayZ: currentOverlayZ,
|
|
focusOverlay: focusOverlay,
|
|
trackBackdrop: trackBackdrop,
|
|
getBackdrops: getBackdrops
|
|
};
|
|
|
|
})();
|
|
|
|
</script>
|