options.js revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5var AddLanguageOverlay = options.AddLanguageOverlay;
6var AddStartupPageOverlay = options.AddStartupPageOverlay;
7var AdvancedOptions = options.AdvancedOptions;
8var AlertOverlay = options.AlertOverlay;
9var AutoFillEditAddressOverlay = options.AutoFillEditAddressOverlay;
10var AutoFillEditCreditCardOverlay = options.AutoFillEditCreditCardOverlay;
11var AutoFillOptions = options.AutoFillOptions;
12var BrowserOptions = options.BrowserOptions;
13var ClearBrowserDataOverlay = options.ClearBrowserDataOverlay;
14var ContentSettings = options.ContentSettings;
15var ContentSettingsExceptionsArea =
16    options.contentSettings.ContentSettingsExceptionsArea;
17var CookiesView = options.CookiesView;
18var FontSettings = options.FontSettings;
19var ImportDataOverlay = options.ImportDataOverlay;
20var InstantConfirmOverlay = options.InstantConfirmOverlay;
21var LanguageOptions = options.LanguageOptions;
22var OptionsPage = options.OptionsPage;
23var PasswordManager = options.PasswordManager;
24var PersonalOptions = options.PersonalOptions;
25var Preferences = options.Preferences;
26var ProxyOptions = options.ProxyOptions;
27var SearchEngineManager = options.SearchEngineManager;
28var SearchPage = options.SearchPage;
29
30/**
31 * DOMContentLoaded handler, sets up the page.
32 */
33function load() {
34  // Decorate the existing elements in the document.
35  cr.ui.decorate('input[pref][type=checkbox]', options.PrefCheckbox);
36  cr.ui.decorate('input[pref][type=number]', options.PrefNumber);
37  cr.ui.decorate('input[pref][type=radio]', options.PrefRadio);
38  cr.ui.decorate('input[pref][type=range]', options.PrefRange);
39  cr.ui.decorate('select[pref]', options.PrefSelect);
40  cr.ui.decorate('input[pref][type=text]', options.PrefTextField);
41  cr.ui.decorate('input[pref][type=url]', options.PrefTextField);
42  cr.ui.decorate('#content-settings-page input[type=radio]',
43      options.ContentSettingsRadio);
44
45  var menuOffPattern = /(^\?|&)menu=off($|&)/;
46  var menuDisabled = menuOffPattern.test(window.location.search);
47  document.documentElement.setAttribute('hide-menu', menuDisabled);
48
49  localStrings = new LocalStrings();
50
51  OptionsPage.register(SearchPage.getInstance());
52
53  OptionsPage.register(BrowserOptions.getInstance());
54  OptionsPage.registerSubPage(SearchEngineManager.getInstance(),
55                              BrowserOptions.getInstance(),
56                              [$('defaultSearchManageEnginesButton')]);
57  OptionsPage.register(PersonalOptions.getInstance());
58  OptionsPage.registerSubPage(AutoFillOptions.getInstance(),
59                              PersonalOptions.getInstance(),
60                              [$('autofill-settings')]);
61  OptionsPage.registerSubPage(PasswordManager.getInstance(),
62                              PersonalOptions.getInstance(),
63                              [$('manage-passwords')]);
64  if (cr.isChromeOS) {
65    OptionsPage.register(SystemOptions.getInstance());
66    OptionsPage.registerSubPage(AboutPage.getInstance(),
67                                SystemOptions.getInstance());
68    OptionsPage.registerSubPage(LanguageOptions.getInstance(),
69                                SystemOptions.getInstance(),
70                                [$('language-button')]);
71    OptionsPage.registerSubPage(
72        new OptionsPage('languageChewing',
73                        templateData.languageChewingPageTabTitle,
74                        'languageChewingPage'),
75        LanguageOptions.getInstance());
76    OptionsPage.registerSubPage(
77        new OptionsPage('languageHangul',
78                        templateData.languageHangulPageTabTitle,
79                        'languageHangulPage'),
80        LanguageOptions.getInstance());
81    OptionsPage.registerSubPage(
82        new OptionsPage('languageMozc',
83                        templateData.languageMozcPageTabTitle,
84                        'languageMozcPage'),
85        LanguageOptions.getInstance());
86    OptionsPage.registerSubPage(
87        new OptionsPage('languagePinyin',
88                        templateData.languagePinyinPageTabTitle,
89                        'languagePinyinPage'),
90        LanguageOptions.getInstance());
91    OptionsPage.register(InternetOptions.getInstance());
92  }
93  OptionsPage.register(AdvancedOptions.getInstance());
94  OptionsPage.registerSubPage(ContentSettings.getInstance(),
95                              AdvancedOptions.getInstance(),
96                              [$('privacyContentSettingsButton')]);
97  OptionsPage.registerSubPage(ContentSettingsExceptionsArea.getInstance(),
98                              ContentSettings.getInstance());
99  OptionsPage.registerSubPage(CookiesView.getInstance(),
100                              ContentSettings.getInstance(),
101                              [$('privacyContentSettingsButton'),
102                               $('show-cookies-button')]);
103  OptionsPage.registerSubPage(FontSettings.getInstance(),
104                              AdvancedOptions.getInstance(),
105                              [$('fontSettingsCustomizeFontsButton')]);
106  if (!cr.isChromeOS) {
107    OptionsPage.registerSubPage(LanguageOptions.getInstance(),
108                                AdvancedOptions.getInstance(),
109                                [$('language-button')]);
110  }
111  if (!cr.isWindows && !cr.isMac) {
112    OptionsPage.registerSubPage(CertificateManager.getInstance(),
113                                AdvancedOptions.getInstance(),
114                                [$('show-cookies-button')]);
115    OptionsPage.registerOverlay(CertificateRestoreOverlay.getInstance(),
116                                CertificateManager.getInstance());
117    OptionsPage.registerOverlay(CertificateBackupOverlay.getInstance(),
118                                CertificateManager.getInstance());
119    OptionsPage.registerOverlay(CertificateEditCaTrustOverlay.getInstance(),
120                                CertificateManager.getInstance());
121    OptionsPage.registerOverlay(CertificateImportErrorOverlay.getInstance(),
122                                CertificateManager.getInstance());
123  }
124  OptionsPage.registerOverlay(AddLanguageOverlay.getInstance(),
125                              LanguageOptions.getInstance());
126  OptionsPage.registerOverlay(AddStartupPageOverlay.getInstance(),
127                              BrowserOptions.getInstance());
128  OptionsPage.registerOverlay(AlertOverlay.getInstance());
129  OptionsPage.registerOverlay(AutoFillEditAddressOverlay.getInstance(),
130                              AutoFillOptions.getInstance());
131  OptionsPage.registerOverlay(AutoFillEditCreditCardOverlay.getInstance(),
132                              AutoFillOptions.getInstance());
133  OptionsPage.registerOverlay(ClearBrowserDataOverlay.getInstance(),
134                              AdvancedOptions.getInstance(),
135                              [$('privacyClearDataButton')]);
136  OptionsPage.registerOverlay(ImportDataOverlay.getInstance(),
137                              PersonalOptions.getInstance());
138  OptionsPage.registerOverlay(InstantConfirmOverlay.getInstance(),
139                              BrowserOptions.getInstance());
140
141  if (cr.isChromeOS) {
142    OptionsPage.register(AccountsOptions.getInstance());
143    OptionsPage.registerSubPage(ProxyOptions.getInstance(),
144                                AdvancedOptions.getInstance(),
145                                [$('proxiesConfigureButton')]);
146    OptionsPage.registerOverlay(new OptionsPage('detailsInternetPage',
147                                                'detailsInternetPage',
148                                                'detailsInternetPage'),
149                                InternetOptions.getInstance());
150
151    var languageModifierKeysOverlay = new OptionsPage(
152        'languageCustomizeModifierKeysOverlay',
153        localStrings.getString('languageCustomizeModifierKeysOverlay'),
154        'languageCustomizeModifierKeysOverlay')
155    OptionsPage.registerOverlay(languageModifierKeysOverlay,
156                                SystemOptions.getInstance(),
157                                [$('modifier-keys-button')]);
158  }
159
160  Preferences.getInstance().initialize();
161  OptionsPage.initialize();
162
163  var path = document.location.pathname;
164
165  if (path.length > 1) {
166    var pageName = path.slice(1);
167    // Show page, but don't update history (there's already an entry for it).
168    OptionsPage.showPageByName(pageName, false);
169  } else {
170    OptionsPage.showDefaultPage();
171  }
172
173  var subpagesNavTabs = document.querySelectorAll('.subpages-nav-tabs');
174  for(var i = 0; i < subpagesNavTabs.length; i++) {
175    subpagesNavTabs[i].onclick = function(event) {
176      OptionsPage.showTab(event.srcElement);
177    }
178  }
179
180  // Allow platform specific CSS rules.
181  if (cr.isMac)
182    document.documentElement.setAttribute('os', 'mac');
183  if (cr.isWindows)
184    document.documentElement.setAttribute('os', 'windows');
185  if (cr.isChromeOS)
186    document.documentElement.setAttribute('os', 'chromeos');
187  if (cr.isLinux) {
188    document.documentElement.setAttribute('os', 'linux');
189    document.documentElement.setAttribute('toolkit', 'gtk');
190  }
191  if (cr.isViews)
192    document.documentElement.setAttribute('toolkit', 'views');
193
194  // Clicking on the Settings title brings up the 'Basics' page.
195  $('settings-title').onclick = function() {
196    OptionsPage.navigateToPage(BrowserOptions.getInstance().name);
197  };
198}
199
200document.addEventListener('DOMContentLoaded', load);
201
202window.onpopstate = function(e) {
203  options.OptionsPage.setState(e.state);
204};
205