diff -r 000000000000 -r 6474c204b198 browser/metro/base/content/flyoutpanels/SettingsCharm.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/metro/base/content/flyoutpanels/SettingsCharm.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,86 @@ + +/** + * Manage the contents of the Windows 8 "Settings" charm. + */ +var SettingsCharm = { + _entries: new Map(), + _nextId: 0, + + /** + * Add a new item to the "Settings" menu in the Windows 8 charms. + * @param aEntry Object with a "label" property (string that will appear in the UI) + * and an "onselected" property (function to be called when the user chooses this entry) + */ + addEntry: function addEntry(aEntry) { + try { + let id = Services.metro.addSettingsPanelEntry(aEntry.label); + this._entries.set(id, aEntry); + } catch (e) { + // addSettingsPanelEntry does not work on non-Metro platforms + Cu.reportError(e); + } + }, + + init: function SettingsCharm_init() { + Services.obs.addObserver(this, "metro-settings-entry-selected", false); + + // Options + this.addEntry({ + label: Strings.browser.GetStringFromName("optionsCharm"), + onselected: function() FlyoutPanelsUI.show('PrefsFlyoutPanel') + }); + + // Search providers + this.addEntry({ + label: Strings.browser.GetStringFromName("searchCharm"), + onselected: function() FlyoutPanelsUI.show('SearchFlyoutPanel') + }); + +/* + * Temporarily disabled until we can have sync prefs together with the + * Desktop browser's sync prefs. + // Sync + this.addEntry({ + label: Strings.brand.GetStringFromName("syncBrandShortName"), + onselected: function() FlyoutPanelsUI.show('SyncFlyoutPanel') + }); +*/ + + // About + this.addEntry({ + label: Strings.browser.GetStringFromName("aboutCharm1"), + onselected: function() FlyoutPanelsUI.show('AboutFlyoutPanel') + }); + + // Feedback + this.addEntry({ + label: Strings.browser.GetStringFromName("feedbackCharm"), + onselected: function() { + let url = Services.urlFormatter.formatURLPref("app.support.inputURL"); + BrowserUI.addAndShowTab(url, Browser.selectedTab); + } + }); + + // Help + this.addEntry({ + label: Strings.browser.GetStringFromName("helpOnlineCharm"), + onselected: function() { + let url = Services.urlFormatter.formatURLPref("app.support.baseURL") + + "firefox-help"; + BrowserUI.addAndShowTab(url, Browser.selectedTab); + } + }); + }, + + observe: function SettingsCharm_observe(aSubject, aTopic, aData) { + if (aTopic == "metro-settings-entry-selected") { + let entry = this._entries.get(parseInt(aData, 10)); + if (entry) + entry.onselected(); + } + }, + + uninit: function SettingsCharm_uninit() { + Services.obs.removeObserver(this, "metro-settings-entry-selected"); + } +};