Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Unified Diff: chrome/browser/resources/options/options_page.js

Issue 6277005: Fix subsheet RTL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: click handling Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options/options_page.js
diff --git a/chrome/browser/resources/options/options_page.js b/chrome/browser/resources/options/options_page.js
index 057e86dd637e376a886a1c7022df619022727046..94c2cf34ad1e92d6e02a93a4487b8072b29076bf 100644
--- a/chrome/browser/resources/options/options_page.js
+++ b/chrome/browser/resources/options/options_page.js
@@ -319,14 +319,23 @@ cr.define('options', function() {
var containerId = 'subpage-sheet-container-' + level;
$(containerId).onclick = this.subPageClosingClickHandler_(level);
}
- // Hook up the close buttons.
+
var self = this;
+ // Close subpages if the user clicks on the html body. Listen in the
+ // capturing phase so that we can stop the click from doing anything.
+ document.body.addEventListener('click', this.bodyMouseEventHandler_(),
arv (Not doing code reviews) 2011/01/18 19:06:07 Use bind instead?
Evan Stade 2011/01/18 22:37:09 Done.
+ true);
+ // We also need to cancel mousedowns on non-subpage content.
+ document.body.addEventListener('mousedown', this.bodyMouseEventHandler_(),
+ true);
+
+ // Hook up the close buttons.
subpageCloseButtons = document.querySelectorAll('.close-subpage');
for (var i = 0; i < subpageCloseButtons.length; i++) {
subpageCloseButtons[i].onclick = function() {
self.closeTopSubPage();
};
- }
+ };
// Close the top overlay or sub-page on esc.
document.addEventListener('keydown', function(e) {
@@ -349,11 +358,47 @@ cr.define('options', function() {
OptionsPage.subPageClosingClickHandler_ = function(level) {
var self = this;
return function(event) {
- // Clicks on the visible part of the parent page should close the overlay,
+ // Clicks on the narrow strip between the left of the subpage sheet and
+ // that shows part of the parent page should close the overlay, but
// not fall through to the parent page.
if (!$('subpage-sheet-' + level).contains(event.target))
self.closeSubPagesToLevel(level - 1);
event.stopPropagation();
+ event.preventDefault();
+ };
+ };
+
+ /**
+ * Returns a function to handle mouse events (mousedown or click) on the html
+ * body by closing subpages and/or stopping event propagation.
+ * @return {function} a function to handle mouse events while a subpage is
arv (Not doing code reviews) 2011/01/18 19:06:07 {Function} only value types are lower case
Evan Stade 2011/01/18 22:37:09 Done.
+ * showing.
+ * @private
+ */
+ OptionsPage.bodyMouseEventHandler_ = function() {
+ var self = this;
+ return function(event) {
+ // Do nothing if a subpage isn't showing.
+ var topPage = self.getTopmostVisiblePage();
+ if (!(topPage && topPage.parentPage))
+ return;
+
+ // If the click was within a subpage, do nothing.
+ for (var level = 1; level <= 2; level++) {
+ if ($('subpage-sheet-container-' + level).contains(event.target))
+ return;
+ }
+
+ // Close all subpages on click.
+ if (event.type == 'click')
+ self.closeSubPagesToLevel(0);
+
+ // Events should not fall through to the main view,
+ // but they can fall through for the sidebar.
+ if ($('mainview-content').contains(event.target)) {
+ event.stopPropagation();
+ event.preventDefault();
+ }
};
};

Powered by Google App Engine
This is Rietveld 408576698