Index: ui/webui/resources/js/cr/ui/dialog_overlay.js |
diff --git a/ui/webui/resources/js/cr/ui/overlay.js b/ui/webui/resources/js/cr/ui/dialog_overlay.js |
similarity index 74% |
copy from ui/webui/resources/js/cr/ui/overlay.js |
copy to ui/webui/resources/js/cr/ui/dialog_overlay.js |
index 5c0acb2d3dd826d52e3f76e1a3de7b7127671043..58629833ab39b1e39f8f8f2cde339d78eeb16ed8 100644 |
--- a/ui/webui/resources/js/cr/ui/overlay.js |
+++ b/ui/webui/resources/js/cr/ui/dialog_overlay.js |
@@ -13,7 +13,7 @@ cr.define('cr.ui.overlay', function() { |
* @return {HTMLElement} The overlay. |
*/ |
function getTopOverlay() { |
- var overlays = document.querySelectorAll('.overlay:not([hidden])'); |
+ var overlays = document.querySelectorAll('.overlay-container .page[open]'); |
return overlays[overlays.length - 1]; |
} |
@@ -21,13 +21,13 @@ cr.define('cr.ui.overlay', function() { |
* Returns a visible default button of the overlay, if it has one. If the |
* overlay has more than one, the first one will be returned. |
* |
- * @param {HTMLElement} overlay The .overlay. |
+ * @param {HTMLElement} overlay The overlay. |
* @return {HTMLElement} The default button. |
*/ |
function getDefaultButton(overlay) { |
function isHidden(node) { return node.hidden; } |
var defaultButtons = |
- overlay.querySelectorAll('.page .button-strip > .default-button'); |
+ overlay.querySelectorAll('.button-strip > .default-button'); |
for (var i = 0; i < defaultButtons.length; i++) { |
if (!findAncestor(defaultButtons[i], isHidden)) |
return defaultButtons[i]; |
@@ -49,6 +49,7 @@ cr.define('cr.ui.overlay', function() { |
return; |
// Close the overlay on escape. |
+ // TODO(falken): <dialog> should do this automatically. |
if (e.keyCode == 27) // Escape |
cr.dispatchSimpleEvent(overlay, 'cancelOverlay'); |
@@ -76,52 +77,49 @@ cr.define('cr.ui.overlay', function() { |
} |
/** |
- * Sets the max-height of all pages in all overlays, based on the window |
+ * Vertically centers an overlay. |
+ * @param {HTMLElement} overlay The overlay. |
+ */ |
+ function center(overlay) { |
+ var topValue = |
+ (window.innerHeight - overlay.getBoundingClientRect().height) / 2; |
+ overlay.style.top = topValue + 'px'; |
+ } |
+ |
+ /** |
+ * Sets the max-height of all overlays, based on the window |
* height. |
*/ |
function setMaxHeightAllPages() { |
- var pages = document.querySelectorAll('.overlay .page'); |
+ var pages = document.querySelectorAll('.overlay-container .page'); |
var maxHeight = Math.min(0.9 * window.innerHeight, 640) + 'px'; |
- for (var i = 0; i < pages.length; i++) |
+ for (var i = 0; i < pages.length; i++) { |
pages[i].style.maxHeight = maxHeight; |
+ if (pages[i].open) |
+ center(pages[i]); |
+ } |
} |
/** |
* Adds behavioral hooks for the given overlay. |
- * @param {HTMLElement} overlay The .overlay. |
+ * @param {HTMLElement} overlay The overlay. |
*/ |
function setupOverlay(overlay) { |
- // Close the overlay on clicking any of the pages' close buttons. |
- var closeButtons = overlay.querySelectorAll('.page > .close-button'); |
+ // Close the overlay on clicking any of the close buttons. |
+ var closeButtons = overlay.querySelectorAll('.close-button'); |
for (var i = 0; i < closeButtons.length; i++) { |
closeButtons[i].addEventListener('click', function(e) { |
cr.dispatchSimpleEvent(overlay, 'cancelOverlay'); |
}); |
} |
- // Remove the 'pulse' animation any time the overlay is hidden or shown. |
- overlay.__defineSetter__('hidden', function(value) { |
- this.classList.remove('pulse'); |
- if (value) |
- this.setAttribute('hidden', true); |
- else |
- this.removeAttribute('hidden'); |
- }); |
- overlay.__defineGetter__('hidden', function() { |
- return this.hasAttribute('hidden'); |
- }); |
- |
// Shake when the user clicks away. |
overlay.addEventListener('click', function(e) { |
// Only pulse if the overlay was the target of the click. |
if (this != e.target) |
return; |
- |
- // This may be null while the overlay is closing. |
- var overlayPage = this.querySelector('.page:not([hidden])'); |
- if (overlayPage) |
- overlayPage.classList.add('pulse'); |
+ overlay.classList.add('pulse'); |
}); |
overlay.addEventListener('webkitAnimationEnd', function(e) { |
e.target.classList.remove('pulse'); |
@@ -129,6 +127,7 @@ cr.define('cr.ui.overlay', function() { |
} |
return { |
+ center: center, |
globalInitialization: globalInitialization, |
setupOverlay: setupOverlay, |
}; |