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

Unified Diff: chrome/browser/resources/bluetooth_internals/sidebar.js

Issue 2538653002: bluetooth: Add sidebar and page manager for chrome://bluetooth-internals. (Closed)
Patch Set: Change rgb gray values to hex, change text-align values to start or end Created 4 years 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/bluetooth_internals/sidebar.js
diff --git a/chrome/browser/resources/bluetooth_internals/sidebar.js b/chrome/browser/resources/bluetooth_internals/sidebar.js
new file mode 100644
index 0000000000000000000000000000000000000000..81fcb2ee368ca53f90d27d460c80b8a544f59671
--- /dev/null
+++ b/chrome/browser/resources/bluetooth_internals/sidebar.js
@@ -0,0 +1,83 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Javascript for Sidebar, served from chrome://bluetooth-internals/.
+ */
+
+cr.define('sidebar', function() {
+ /** @const {!cr.ui.pageManager.PageManager}*/
+ var PageManager = cr.ui.pageManager.PageManager;
+
+ /**
+ * A side menu that lists the currently navigable pages.
+ * @constructor
+ * @param {!Element} sidebarDiv The div corresponding to the sidebar.
+ * @extends {PageManager.Observer}
+ */
+ function Sidebar(sidebarDiv) {
+ /** @private {!Element} */
+ this.sidebarDiv_ = sidebarDiv;
+ /** @private {!Element} */
+ this.sidebarContent_ = this.sidebarDiv_.querySelector('.sidebar-content');
+ /** @private {!Element} */
+ this.sidebarList_ = this.sidebarContent_.querySelector('ul');
+
+ this.sidebarList_.querySelectorAll('li button').forEach(function(item) {
+ item.addEventListener('click', this.onItemClick_.bind(this));
+ }, this);
+
+ /** @private {!Element} */
+ this.overlayDiv_ = this.sidebarDiv_.querySelector('.overlay');
+ this.overlayDiv_.addEventListener('click', this.close.bind(this));
+
+ window.matchMedia('screen and (max-width: 600px)').addListener(
+ function(query) { if (!query.matches) this.close(); }.bind(this));
+ }
+
+ Sidebar.prototype = {
+ __proto__: PageManager.Observer.prototype,
+
+ /**
+ * Closes the sidebar. Only applies to layouts with window width <= 600px.
+ */
+ close: function() {
+ this.sidebarDiv_.classList.remove('open');
+ document.body.style.overflow = '';
+ },
+
+ /**
+ * Opens the sidebar. Only applies to layouts with window width <= 600px.
+ */
+ open: function() {
+ document.body.style.overflow = 'hidden';
+ this.sidebarDiv_.classList.add('open');
+ },
+
+ /**
+ * Called when a page is navigated to.
+ * @override
+ * @param {string} path The path of the page being visited.
+ */
+ updateHistory: function(path) {
+ this.sidebarContent_.querySelectorAll('li').forEach(function(item) {
+ item.classList.toggle('selected', item.dataset.pageName === path);
+ });
+ },
+
+ /**
+ * Switches the page based on which sidebar list button was clicked.
+ * @param {!Event} event
+ * @private
+ */
+ onItemClick_: function(event) {
+ this.close();
+ PageManager.showPageByName(event.target.parentNode.dataset.pageName);
+ },
+ };
+
+ return {
+ Sidebar: Sidebar
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698