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 AdvancedOptions = options.AdvancedOptions;
7var AlertOverlay = options.AlertOverlay;
8var AutofillEditAddressOverlay = options.AutofillEditAddressOverlay;
9var AutofillEditCreditCardOverlay = options.AutofillEditCreditCardOverlay;
10var AutofillOptions = options.AutofillOptions;
11var BrowserOptions = options.BrowserOptions;
12var ClearBrowserDataOverlay = options.ClearBrowserDataOverlay;
13var ContentSettings = options.ContentSettings;
14var ContentSettingsExceptionsArea =
15    options.contentSettings.ContentSettingsExceptionsArea;
16var CookiesView = options.CookiesView;
17var FontSettings = options.FontSettings;
18var ImportDataOverlay = options.ImportDataOverlay;
19var InstantConfirmOverlay = options.InstantConfirmOverlay;
20var LanguageOptions = options.LanguageOptions;
21var OptionsPage = options.OptionsPage;
22var PasswordManager = options.PasswordManager;
23var PersonalOptions = options.PersonalOptions;
24var Preferences = options.Preferences;
25var ProxyOptions = options.ProxyOptions;
26var SearchEngineManager = options.SearchEngineManager;
27var SearchPage = options.SearchPage;
28var SyncSetupOverlay = options.SyncSetupOverlay;
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  // We can't use an attribute on the html element because of webkit bug
49  // 12519. Instead, we add a class.
50  if (menuDisabled)
51    document.documentElement.classList.add('hide-menu');
52
53  localStrings = new LocalStrings();
54
55  OptionsPage.register(SearchPage.getInstance());
56
57  OptionsPage.register(BrowserOptions.getInstance());
58  OptionsPage.registerSubPage(SearchEngineManager.getInstance(),
59                              BrowserOptions.getInstance(),
60                              [$('defaultSearchManageEnginesButton')]);
61  OptionsPage.register(PersonalOptions.getInstance());
62  OptionsPage.registerSubPage(AutofillOptions.getInstance(),
63                              PersonalOptions.getInstance(),
64                              [$('autofill-settings')]);
65  OptionsPage.registerSubPage(PasswordManager.getInstance(),
66                              PersonalOptions.getInstance(),
67                              [$('manage-passwords')]);
68  if (cr.isChromeOS) {
69    OptionsPage.register(SystemOptions.getInstance());
70    OptionsPage.registerSubPage(AboutPage.getInstance(),
71                                SystemOptions.getInstance());
72    OptionsPage.registerSubPage(LanguageOptions.getInstance(),
73                                SystemOptions.getInstance(),
74                                [$('language-button')]);
75    OptionsPage.registerSubPage(
76        new OptionsPage('languageChewing',
77                        templateData.languageChewingPageTabTitle,
78                        'languageChewingPage'),
79        LanguageOptions.getInstance());
80    OptionsPage.registerSubPage(
81        new OptionsPage('languageHangul',
82                        templateData.languageHangulPageTabTitle,
83                        'languageHangulPage'),
84        LanguageOptions.getInstance());
85    OptionsPage.registerSubPage(
86        new OptionsPage('languageMozc',
87                        templateData.languageMozcPageTabTitle,
88                        'languageMozcPage'),
89        LanguageOptions.getInstance());
90    OptionsPage.registerSubPage(
91        new OptionsPage('languagePinyin',
92                        templateData.languagePinyinPageTabTitle,
93                        'languagePinyinPage'),
94        LanguageOptions.getInstance());
95    OptionsPage.register(InternetOptions.getInstance());
96  }
97  OptionsPage.register(AdvancedOptions.getInstance());
98  OptionsPage.registerSubPage(ContentSettings.getInstance(),
99                              AdvancedOptions.getInstance(),
100                              [$('privacyContentSettingsButton')]);
101  OptionsPage.registerSubPage(ContentSettingsExceptionsArea.getInstance(),
102                              ContentSettings.getInstance());
103  OptionsPage.registerSubPage(CookiesView.getInstance(),
104                              ContentSettings.getInstance(),
105                              [$('privacyContentSettingsButton'),
106                               $('show-cookies-button')]);
107  OptionsPage.registerSubPage(FontSettings.getInstance(),
108                              AdvancedOptions.getInstance(),
109                              [$('fontSettingsCustomizeFontsButton')]);
110  if (!cr.isChromeOS) {
111    OptionsPage.registerSubPage(LanguageOptions.getInstance(),
112                                AdvancedOptions.getInstance(),
113                                [$('language-button')]);
114  }
115  if (!cr.isWindows && !cr.isMac) {
116    OptionsPage.registerSubPage(CertificateManager.getInstance(),
117                                AdvancedOptions.getInstance(),
118                                [$('show-cookies-button')]);
119    OptionsPage.registerOverlay(CertificateRestoreOverlay.getInstance(),
120                                CertificateManager.getInstance());
121    OptionsPage.registerOverlay(CertificateBackupOverlay.getInstance(),
122                                CertificateManager.getInstance());
123    OptionsPage.registerOverlay(CertificateEditCaTrustOverlay.getInstance(),
124                                CertificateManager.getInstance());
125    OptionsPage.registerOverlay(CertificateImportErrorOverlay.getInstance(),
126                                CertificateManager.getInstance());
127  }
128  OptionsPage.registerOverlay(AddLanguageOverlay.getInstance(),
129                              LanguageOptions.getInstance());
130  OptionsPage.registerOverlay(AlertOverlay.getInstance());
131  OptionsPage.registerOverlay(AutofillEditAddressOverlay.getInstance(),
132                              AutofillOptions.getInstance());
133  OptionsPage.registerOverlay(AutofillEditCreditCardOverlay.getInstance(),
134                              AutofillOptions.getInstance());
135  OptionsPage.registerOverlay(ClearBrowserDataOverlay.getInstance(),
136                              AdvancedOptions.getInstance(),
137                              [$('privacyClearDataButton')]);
138  OptionsPage.registerOverlay(ImportDataOverlay.getInstance(),
139                              PersonalOptions.getInstance());
140  OptionsPage.registerOverlay(InstantConfirmOverlay.getInstance(),
141                              BrowserOptions.getInstance());
142  OptionsPage.registerOverlay(SyncSetupOverlay.getInstance(),
143                              PersonalOptions.getInstance());
144
145  if (cr.isChromeOS) {
146    OptionsPage.register(AccountsOptions.getInstance());
147    OptionsPage.registerSubPage(ProxyOptions.getInstance(),
148                                AdvancedOptions.getInstance(),
149                                [$('proxiesConfigureButton')]);
150    OptionsPage.registerSubPage(ChangePictureOptions.getInstance(),
151                                PersonalOptions.getInstance(),
152                                [$('change-picture-button')]);
153    OptionsPage.registerOverlay(new OptionsPage('detailsInternetPage',
154                                                'detailsInternetPage',
155                                                'detailsInternetPage'),
156                                InternetOptions.getInstance());
157
158    var languageModifierKeysOverlay = new OptionsPage(
159        'languageCustomizeModifierKeysOverlay',
160        localStrings.getString('languageCustomizeModifierKeysOverlay'),
161        'languageCustomizeModifierKeysOverlay')
162    OptionsPage.registerOverlay(languageModifierKeysOverlay,
163                                SystemOptions.getInstance(),
164                                [$('modifier-keys-button')]);
165  }
166
167  Preferences.getInstance().initialize();
168  OptionsPage.initialize();
169
170  var path = document.location.pathname;
171
172  if (path.length > 1) {
173    var pageName = path.slice(1);
174    // Show page, but don't update history (there's already an entry for it).
175    OptionsPage.showPageByName(pageName, false);
176  } else {
177    OptionsPage.showDefaultPage();
178  }
179
180  var subpagesNavTabs = document.querySelectorAll('.subpages-nav-tabs');
181  for(var i = 0; i < subpagesNavTabs.length; i++) {
182    subpagesNavTabs[i].onclick = function(event) {
183      OptionsPage.showTab(event.srcElement);
184    }
185  }
186
187  // Allow platform specific CSS rules.
188  if (cr.isMac)
189    document.documentElement.setAttribute('os', 'mac');
190  if (cr.isWindows)
191    document.documentElement.setAttribute('os', 'windows');
192  if (cr.isChromeOS)
193    document.documentElement.setAttribute('os', 'chromeos');
194  if (cr.isLinux) {
195    document.documentElement.setAttribute('os', 'linux');
196    document.documentElement.setAttribute('toolkit', 'gtk');
197  }
198  if (cr.isViews)
199    document.documentElement.setAttribute('toolkit', 'views');
200  if (navigator.plugins['Shockwave Flash'])
201    document.documentElement.setAttribute('hasFlashPlugin', '');
202
203  // Clicking on the Settings title brings up the 'Basics' page.
204  $('settings-title').onclick = function() {
205    OptionsPage.navigateToPage(BrowserOptions.getInstance().name);
206  };
207}
208
209document.addEventListener('DOMContentLoaded', load);
210
211window.onpopstate = function(e) {
212  options.OptionsPage.setState(e.state);
213};
214
215window.onbeforeunload = function() {
216  options.OptionsPage.willClose();
217};
218