Index: third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js |
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js |
index 128a38229d812eede286b5ef0350362a4efc4717..222ddddef1eb5bc30ea30b9dbcec737a6264ff04 100644 |
--- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js |
+++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js |
@@ -1,57 +1,71 @@ |
-Polymer.IronOverlayManager = (function() { |
+Polymer.IronOverlayManager = { |
- var overlays = []; |
- var DEFAULT_Z = 10; |
- var backdrops = []; |
+ _overlays: [], |
+ |
+ // iframes have a default z-index of 100, so this default should be at least |
+ // that. |
+ _minimumZ: 101, |
+ |
+ _backdrops: [], |
+ |
+ _applyOverlayZ: function(overlay, aboveZ) { |
+ this._setZ(overlay, aboveZ + 2); |
+ }, |
+ |
+ _setZ: function(element, z) { |
+ element.style.zIndex = z; |
+ }, |
// 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); |
+ addOverlay: function(overlay) { |
+ var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); |
+ this._overlays.push(overlay); |
+ var newZ = this.currentOverlayZ(); |
+ if (newZ <= minimumZ) { |
+ this._applyOverlayZ(overlay, minimumZ); |
} |
- } |
+ }, |
- function removeOverlay(overlay) { |
- var i = overlays.indexOf(overlay); |
+ removeOverlay: function(overlay) { |
+ var i = this._overlays.indexOf(overlay); |
if (i >= 0) { |
- overlays.splice(i, 1); |
- setZ(overlay, ''); |
+ this._overlays.splice(i, 1); |
+ this._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) { |
+ currentOverlay: function() { |
+ var i = this._overlays.length - 1; |
+ while (this._overlays[i] && !this._overlays[i].opened) { |
--i; |
} |
- return overlays[i]; |
- } |
+ return this._overlays[i]; |
+ }, |
- function currentOverlayZ() { |
- var z; |
- var current = currentOverlay(); |
+ currentOverlayZ: function() { |
+ var z = this._minimumZ; |
+ var current = this.currentOverlay(); |
if (current) { |
var z1 = window.getComputedStyle(current).zIndex; |
if (!isNaN(z1)) { |
z = Number(z1); |
} |
} |
- return z || DEFAULT_Z; |
- } |
+ return z; |
+ }, |
- function focusOverlay() { |
- var current = currentOverlay(); |
+ /** |
+ * Ensures that the minimum z-index of new overlays is at least `minimumZ`. |
+ * This does not effect the z-index of any existing overlays. |
+ * |
+ * @param {number} minimumZ |
+ */ |
+ ensureMinimumZ: function(minimumZ) { |
+ this._minimumZ = Math.max(this._minimumZ, minimumZ); |
+ }, |
+ |
+ focusOverlay: function() { |
+ var current = this.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 |
@@ -63,33 +77,23 @@ Polymer.IronOverlayManager = (function() { |
if (current && !current.transitioning) { |
current._applyFocus(); |
} |
- } |
+ }, |
- function trackBackdrop(element) { |
+ trackBackdrop: function(element) { |
// backdrops contains the overlays with a backdrop that are currently |
// visible |
if (element.opened) { |
- backdrops.push(element); |
+ this._backdrops.push(element); |
} else { |
- var index = backdrops.indexOf(element); |
+ var index = this._backdrops.indexOf(element); |
if (index >= 0) { |
- backdrops.splice(index, 1); |
+ this._backdrops.splice(index, 1); |
} |
} |
- } |
+ }, |
- function getBackdrops() { |
- return backdrops; |
+ getBackdrops: function() { |
+ return this._backdrops; |
} |
- return { |
- addOverlay: addOverlay, |
- removeOverlay: removeOverlay, |
- currentOverlay: currentOverlay, |
- currentOverlayZ: currentOverlayZ, |
- focusOverlay: focusOverlay, |
- trackBackdrop: trackBackdrop, |
- getBackdrops: getBackdrops |
- }; |
- |
- })(); |
+ }; |