15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('options', function() {
6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  /** @const */ var FocusOutlineManager = cr.ui.FocusOutlineManager;
7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  var OptionsPage = {
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * This is the absolute difference maintained between standard and
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * fixed-width font sizes. Refer http://crbug.com/91922.
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @const
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SIZE_DIFFERENCE_FIXED_STANDARD: 3,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Initializes the complete options page. This will cause all C++ handlers
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * to be invoked to do final setup.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    initialize: function() {
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      chrome.send('coreOptionsInitialize');
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Shows the tab contents for the given navigation tab.
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     * @param {Node} tab The tab that the user clicked.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    showTab: function(tab) {
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      // Search parents until we find a tab, or the nav bar itself. This allows
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      // tabs to have child nodes, e.g. labels in separately-styled spans.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      while (tab && tab.classList &&
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             !tab.classList.contains('subpages-nav-tabs') &&
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)             !tab.classList.contains('tab')) {
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        tab = tab.parentNode;
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (!tab || !tab.classList || !tab.classList.contains('tab'))
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      // Find tab bar of the tab.
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      var tabBar = tab;
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      while (tabBar && tabBar.classList &&
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci             !tabBar.classList.contains('subpages-nav-tabs')) {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        tabBar = tabBar.parentNode;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (!tabBar || !tabBar.classList)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (tabBar.activeNavTab != null) {
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        tabBar.activeNavTab.classList.remove('active-tab');
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        $(tabBar.activeNavTab.getAttribute('tab-contents')).classList.
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            remove('active-tab-contents');
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      tab.classList.add('active-tab');
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      $(tab.getAttribute('tab-contents')).classList.add('active-tab-contents');
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      tabBar.activeNavTab = tab;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Shows or hides options for clearing Flash LSOs.
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @param {boolean} enabled Whether plugin data can be cleared.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    setClearPluginLSODataEnabled: function(enabled) {
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (enabled) {
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        document.documentElement.setAttribute(
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'flashPluginSupportsClearSiteData', '');
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      } else {
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        document.documentElement.removeAttribute(
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'flashPluginSupportsClearSiteData');
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (navigator.plugins['Shockwave Flash'])
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        document.documentElement.setAttribute('hasFlashPlugin', '');
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Shows or hides Pepper Flash settings.
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @param {boolean} enabled Whether Pepper Flash settings should be enabled.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    setPepperFlashSettingsEnabled: function(enabled) {
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (enabled) {
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        document.documentElement.setAttribute(
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'enablePepperFlashSettings', '');
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      } else {
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        document.documentElement.removeAttribute(
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            'enablePepperFlashSettings');
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Sets whether Settings is shown as a standalone page in a window for the
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * app launcher settings "app".
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @param {boolean} isSettingsApp Whether this page is shown standalone.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    setIsSettingsApp: function(isSettingsApp) {
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      document.documentElement.classList.toggle('settings-app', isSettingsApp);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * Returns true if Settings is shown as an "app" (in a window by itself)
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * for the app launcher settings "app".
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     * @return {boolean} Whether this page is shown standalone.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    isSettingsApp: function() {
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return document.documentElement.classList.contains('settings-app');
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Export
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OptionsPage: OptionsPage
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
113