| Index: chrome/browser/resources/options/options_page.js
|
| ===================================================================
|
| --- chrome/browser/resources/options/options_page.js (revision 0)
|
| +++ chrome/browser/resources/options/options_page.js (revision 0)
|
| @@ -0,0 +1,99 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +// OptionsPage class:
|
| +
|
| +/**
|
| + * Base class for options page.
|
| + * @constructor
|
| + * @param {string} name Options page name, also defines id of the div element
|
| + * containing the options view and the name of options page navigation bar
|
| + * item as name+'PageNav'.
|
| + * @param {string} title Options page title, used for navigation bar
|
| + */
|
| +function OptionsPage(name, title, pageDivName) {
|
| + this.name = name;
|
| + this.title = title;
|
| + this.pageDivName = pageDivName;
|
| + this.pageDiv = $(this.pageDivName);
|
| + this.tab = null;
|
| +}
|
| +
|
| +OptionsPage.registeredPages_ = {};
|
| +
|
| +/**
|
| + * Shows a registered page.
|
| + * @param {string} pageName Page name.
|
| + */
|
| +OptionsPage.showPageByName = function(pageName) {
|
| + for (var name in OptionsPage.registeredPages_) {
|
| + var page = OptionsPage.registeredPages_[name];
|
| + page.visible = name == pageName;
|
| + }
|
| +};
|
| +
|
| +OptionsPage.setState = function(state) {
|
| + if (state.pageName)
|
| + OptionsPage.showPageByName(state.pageName);
|
| +};
|
| +
|
| +/**
|
| + * Registers new options page.
|
| + * @param {OptionsPage} page Page to register, must be of a class derived from
|
| + * OptionsPage.
|
| + */
|
| +OptionsPage.register = function(page) {
|
| + OptionsPage.registeredPages_[page.name] = page;
|
| + // Create and add new page <li> element to navbar.
|
| + var pageNav = document.createElement('li');
|
| + pageNav.id = page.name + 'PageNav';
|
| + pageNav.className = 'navbar-item';
|
| + pageNav.setAttribute('pageName', page.name);
|
| + pageNav.textContent = page.title;
|
| + pageNav.onclick = function(event) {
|
| + OptionsPage.showPageByName(this.getAttribute('pageName'));
|
| + };
|
| + var navbar = $('navbar');
|
| + navbar.appendChild(pageNav);
|
| + page.tab = pageNav;
|
| + page.initializePage();
|
| +};
|
| +
|
| +OptionsPage.prototype = {
|
| + /**
|
| + * Initializes page content.
|
| + */
|
| + initializePage: function() {},
|
| +
|
| + /**
|
| + * Gets page visibility state.
|
| + */
|
| + get visible() {
|
| + var page = $(this.pageDivName);
|
| + return page.ownerDocument.defaultView.getComputedStyle(
|
| + page).visibility == 'visible';
|
| + },
|
| +
|
| + /**
|
| + * Sets page visibility.
|
| + */
|
| + set visible(visible) {
|
| + if ((this.visible && visible) || (!this.visible && !visible))
|
| + return;
|
| +
|
| + if (visible) {
|
| + window.history.pushState({pageName: this.name},
|
| + this.title,
|
| + '/' + this.name);
|
| + this.pageDiv.style.visibility = 'visible';
|
| + this.tab.classList.add('navbar-item-selected');
|
| + } else {
|
| + this.pageDiv.style.visibility = 'hidden';
|
| + this.tab.classList.remove('navbar-item-selected');
|
| + }
|
| + }
|
| +};
|
| +
|
| +
|
|
|
| Property changes on: chrome/browser/resources/options/options_page.js
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|