| Index: third_party/polymer/v0_8/components/iron-overlay-behavior/iron-overlay-manager.html
|
| diff --git a/third_party/polymer/v0_8/components/iron-overlay-behavior/iron-overlay-manager.html b/third_party/polymer/v0_8/components/iron-overlay-behavior/iron-overlay-manager.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c66f9aa77c031476d782fe54af269b0903ddac28
|
| --- /dev/null
|
| +++ b/third_party/polymer/v0_8/components/iron-overlay-behavior/iron-overlay-manager.html
|
| @@ -0,0 +1,107 @@
|
| +<!--
|
| +@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() {
|
| + return overlays[overlays.length-1];
|
| + }
|
| +
|
| + 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>
|
|
|