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

Unified Diff: chrome/browser/resources/extensions/extension_options_overlay.js

Issue 475543003: Display extension options in a WebUI overlay instead of in a new tab (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 6 years, 4 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/extensions/extension_options_overlay.js
diff --git a/chrome/browser/resources/extensions/extension_options_overlay.js b/chrome/browser/resources/extensions/extension_options_overlay.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cc768a104d5a2c1a913829c5f44a3e95b71d277
--- /dev/null
+++ b/chrome/browser/resources/extensions/extension_options_overlay.js
@@ -0,0 +1,102 @@
+// Copyright 2014 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.
+
+cr.define('extensions', function() {
+ 'use strict';
+
+ /**
+ * The ExtensionOptionsOverlay will show an extension's options page using
+ * an <extensionoptions> element.
+ * @constructor
+ */
+ function ExtensionOptionsOverlay() {}
+
+ cr.addSingletonGetter(ExtensionOptionsOverlay);
+
+ ExtensionOptionsOverlay.prototype = {
+ /**
+ * The extension whose options are being displayed
+ * @type {string}
+ * @private
+ */
+ extensionId_: undefined,
+
+ /**
+ * Initialize the page.
+ * @param {function(HTMLDivElement)} showOverlay The function to show or
+ * hide the ExtensionOptionsOverlay; this should take a single parameter
+ * which is either the overlay Div if the overlay should be displayed,
+ * or null if the overlay should be hidden.
+ */
+ initializePage: function(showOverlay) {
+ var overlay = $('overlay');
+ cr.ui.overlay.setupOverlay(overlay);
+ cr.ui.overlay.globalInitialization();
+ overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this));
+
+ /**
+ * The element of the full overlay.
+ * @type {HTMLDivElement}
+ * @private
+ */
+ this.overlayDiv_ = $('extension-options-overlay');
+
+ /**
+ * The function to show or hide the ExtensionOptionsOverlay.
+ * @type {function}
+ * @param {boolean} isVisible Whether the overlay should be visible.
+ */
+ this.setVisible = function(isVisible) {
+ showOverlay(isVisible ? this.overlayDiv_ : null);
+ };
+ },
+
+ /**
+ * Handles a click on the close button.
+ * @param {Event} e The click event.
+ * @private
+ */
+ handleDismiss_: function(event) {
+ this.setVisible(false);
+ if (!this.extensionId_)
not at google - send to devlin 2014/08/14 18:19:30 Actually: do you need |extensionId_| at all? It se
ericzeng 2014/08/14 18:41:17 Yeah it doesn't need to be there. I only need it t
+ return;
+ var extensionoptions = document.querySelector('extensionoptions');
+ this.overlayDiv_.removeChild(extensionoptions);
+ this.extensionId_ = undefined;
+ },
+
+ /**
+ * Associate an extension with the overlay and display it.
+ * @param {string} extensionId The id of the extension whose options page
+ * should be displayed in the overlay.
+ * @param {string} extensionName The name of the extension, which is used
+ * as the header of the overlay.
+ */
+ setExtensionAndShowOverlay: function(extensionId, extensionName) {
+ this.extensionId_ = extensionId;
+ var extensionoptions = new ExtensionOptions();
+ extensionoptions.extension = this.extensionId_;
+ extensionoptions.autosize = 'on';
+
+ // TODO(ericzeng): Resize in a non-jarring way.
+ extensionoptions.onsizechanged = function(evt) {
+ this.overlayDiv_.style.width = evt.width;
+ this.overlayDiv_.style.height = evt.height;
+ }.bind(this);
+
+ this.overlayDiv_.appendChild(extensionoptions);
+
+ document.querySelector(
+ '#extension-options-overlay .extension-options-overlay-title')
+ .textContent = extensionName;
+
+ this.setVisible(true);
+ }
+ };
+
+ // Export
+ return {
+ ExtensionOptionsOverlay: ExtensionOptionsOverlay
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698