From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- .../components/preferences/applicationManager.js | 102 ++ .../components/preferences/applicationManager.xul | 59 + browser/components/preferences/blocklists.js | 209 +++ browser/components/preferences/blocklists.xul | 56 + browser/components/preferences/colors.xul | 102 ++ browser/components/preferences/connection.js | 213 +++ browser/components/preferences/connection.xul | 173 ++ browser/components/preferences/containers.js | 176 ++ browser/components/preferences/containers.xul | 52 + browser/components/preferences/cookies.js | 948 ++++++++++ browser/components/preferences/cookies.xul | 111 ++ browser/components/preferences/donottrack.xul | 43 + browser/components/preferences/fonts.js | 105 ++ browser/components/preferences/fonts.xul | 279 +++ browser/components/preferences/handlers.css | 37 + browser/components/preferences/handlers.xml | 105 ++ .../components/preferences/in-content/advanced.js | 770 ++++++++ .../components/preferences/in-content/advanced.xul | 421 +++++ .../preferences/in-content/applications.js | 1900 ++++++++++++++++++++ .../preferences/in-content/applications.xul | 95 + .../preferences/in-content/containers.js | 73 + .../preferences/in-content/containers.xul | 54 + .../components/preferences/in-content/content.js | 294 +++ .../components/preferences/in-content/content.xul | 209 +++ browser/components/preferences/in-content/jar.mn | 18 + browser/components/preferences/in-content/main.js | 721 ++++++++ browser/components/preferences/in-content/main.xul | 301 ++++ .../components/preferences/in-content/moz.build | 13 + .../preferences/in-content/preferences.js | 315 ++++ .../preferences/in-content/preferences.xul | 224 +++ .../components/preferences/in-content/privacy.js | 712 ++++++++ .../components/preferences/in-content/privacy.xul | 308 ++++ .../components/preferences/in-content/search.js | 604 +++++++ .../components/preferences/in-content/search.xul | 86 + .../components/preferences/in-content/security.js | 302 ++++ .../components/preferences/in-content/security.xul | 131 ++ .../preferences/in-content/subdialogs.js | 434 +++++ browser/components/preferences/in-content/sync.js | 673 +++++++ browser/components/preferences/in-content/sync.xul | 359 ++++ .../preferences/in-content/tests/.eslintrc.js | 7 + .../preferences/in-content/tests/browser.ini | 43 + .../in-content/tests/browser_advanced_update.js | 158 ++ .../tests/browser_basic_rebuild_fonts_test.js | 76 + .../browser_bug1018066_resetScrollPosition.js | 24 + ...er_bug1020245_openPreferences_to_paneContent.js | 43 + ...9_prevent_scrolling_when_preferences_flipped.js | 92 + ..._prevent_scrolling_when_preferences_flipped.xul | 33 + .../in-content/tests/browser_bug410900.js | 46 + .../in-content/tests/browser_bug705422.js | 144 ++ .../in-content/tests/browser_bug731866.js | 52 + .../tests/browser_bug795764_cachedisabled.js | 52 + .../in-content/tests/browser_change_app_handler.js | 98 + .../in-content/tests/browser_connection.js | 99 + .../tests/browser_connection_bug388287.js | 125 ++ .../in-content/tests/browser_cookies_exceptions.js | 348 ++++ .../tests/browser_defaultbrowser_alwayscheck.js | 103 ++ .../in-content/tests/browser_healthreport.js | 62 + .../browser_homepages_filter_aboutpreferences.js | 20 + .../tests/browser_notifications_do_not_disturb.js | 44 + .../tests/browser_permissions_urlFieldHidden.js | 45 + .../in-content/tests/browser_privacypane_1.js | 18 + .../in-content/tests/browser_privacypane_3.js | 17 + .../in-content/tests/browser_privacypane_4.js | 25 + .../in-content/tests/browser_privacypane_5.js | 17 + .../in-content/tests/browser_privacypane_8.js | 26 + .../in-content/tests/browser_proxy_backup.js | 65 + .../tests/browser_sanitizeOnShutdown_prefLocked.js | 37 + .../in-content/tests/browser_searchsuggestions.js | 43 + .../in-content/tests/browser_security.js | 130 ++ .../in-content/tests/browser_subdialogs.js | 293 +++ .../in-content/tests/browser_telemetry.js | 52 + .../preferences/in-content/tests/head.js | 165 ++ .../tests/privacypane_tests_perwindow.js | 330 ++++ .../preferences/in-content/tests/subdialog.xul | 27 + .../preferences/in-content/tests/subdialog2.xul | 27 + browser/components/preferences/jar.mn | 31 + browser/components/preferences/languages.js | 312 ++++ browser/components/preferences/languages.xul | 101 ++ browser/components/preferences/moz.build | 22 + browser/components/preferences/permissions.js | 462 +++++ browser/components/preferences/permissions.xul | 83 + browser/components/preferences/sanitize.js | 21 + browser/components/preferences/sanitize.xul | 101 ++ browser/components/preferences/selectBookmark.js | 83 + browser/components/preferences/selectBookmark.xul | 44 + browser/components/preferences/translation.js | 255 +++ browser/components/preferences/translation.xul | 88 + 87 files changed, 16376 insertions(+) create mode 100644 browser/components/preferences/applicationManager.js create mode 100644 browser/components/preferences/applicationManager.xul create mode 100644 browser/components/preferences/blocklists.js create mode 100644 browser/components/preferences/blocklists.xul create mode 100644 browser/components/preferences/colors.xul create mode 100644 browser/components/preferences/connection.js create mode 100644 browser/components/preferences/connection.xul create mode 100644 browser/components/preferences/containers.js create mode 100644 browser/components/preferences/containers.xul create mode 100644 browser/components/preferences/cookies.js create mode 100644 browser/components/preferences/cookies.xul create mode 100644 browser/components/preferences/donottrack.xul create mode 100644 browser/components/preferences/fonts.js create mode 100644 browser/components/preferences/fonts.xul create mode 100644 browser/components/preferences/handlers.css create mode 100644 browser/components/preferences/handlers.xml create mode 100644 browser/components/preferences/in-content/advanced.js create mode 100644 browser/components/preferences/in-content/advanced.xul create mode 100644 browser/components/preferences/in-content/applications.js create mode 100644 browser/components/preferences/in-content/applications.xul create mode 100644 browser/components/preferences/in-content/containers.js create mode 100644 browser/components/preferences/in-content/containers.xul create mode 100644 browser/components/preferences/in-content/content.js create mode 100644 browser/components/preferences/in-content/content.xul create mode 100644 browser/components/preferences/in-content/jar.mn create mode 100644 browser/components/preferences/in-content/main.js create mode 100644 browser/components/preferences/in-content/main.xul create mode 100644 browser/components/preferences/in-content/moz.build create mode 100644 browser/components/preferences/in-content/preferences.js create mode 100644 browser/components/preferences/in-content/preferences.xul create mode 100644 browser/components/preferences/in-content/privacy.js create mode 100644 browser/components/preferences/in-content/privacy.xul create mode 100644 browser/components/preferences/in-content/search.js create mode 100644 browser/components/preferences/in-content/search.xul create mode 100644 browser/components/preferences/in-content/security.js create mode 100644 browser/components/preferences/in-content/security.xul create mode 100644 browser/components/preferences/in-content/subdialogs.js create mode 100644 browser/components/preferences/in-content/sync.js create mode 100644 browser/components/preferences/in-content/sync.xul create mode 100644 browser/components/preferences/in-content/tests/.eslintrc.js create mode 100644 browser/components/preferences/in-content/tests/browser.ini create mode 100644 browser/components/preferences/in-content/tests/browser_advanced_update.js create mode 100644 browser/components/preferences/in-content/tests/browser_basic_rebuild_fonts_test.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug1018066_resetScrollPosition.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug1020245_openPreferences_to_paneContent.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug1184989_prevent_scrolling_when_preferences_flipped.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug1184989_prevent_scrolling_when_preferences_flipped.xul create mode 100644 browser/components/preferences/in-content/tests/browser_bug410900.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug705422.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug731866.js create mode 100644 browser/components/preferences/in-content/tests/browser_bug795764_cachedisabled.js create mode 100644 browser/components/preferences/in-content/tests/browser_change_app_handler.js create mode 100644 browser/components/preferences/in-content/tests/browser_connection.js create mode 100644 browser/components/preferences/in-content/tests/browser_connection_bug388287.js create mode 100644 browser/components/preferences/in-content/tests/browser_cookies_exceptions.js create mode 100644 browser/components/preferences/in-content/tests/browser_defaultbrowser_alwayscheck.js create mode 100644 browser/components/preferences/in-content/tests/browser_healthreport.js create mode 100644 browser/components/preferences/in-content/tests/browser_homepages_filter_aboutpreferences.js create mode 100644 browser/components/preferences/in-content/tests/browser_notifications_do_not_disturb.js create mode 100644 browser/components/preferences/in-content/tests/browser_permissions_urlFieldHidden.js create mode 100644 browser/components/preferences/in-content/tests/browser_privacypane_1.js create mode 100644 browser/components/preferences/in-content/tests/browser_privacypane_3.js create mode 100644 browser/components/preferences/in-content/tests/browser_privacypane_4.js create mode 100644 browser/components/preferences/in-content/tests/browser_privacypane_5.js create mode 100644 browser/components/preferences/in-content/tests/browser_privacypane_8.js create mode 100644 browser/components/preferences/in-content/tests/browser_proxy_backup.js create mode 100644 browser/components/preferences/in-content/tests/browser_sanitizeOnShutdown_prefLocked.js create mode 100644 browser/components/preferences/in-content/tests/browser_searchsuggestions.js create mode 100644 browser/components/preferences/in-content/tests/browser_security.js create mode 100644 browser/components/preferences/in-content/tests/browser_subdialogs.js create mode 100644 browser/components/preferences/in-content/tests/browser_telemetry.js create mode 100644 browser/components/preferences/in-content/tests/head.js create mode 100644 browser/components/preferences/in-content/tests/privacypane_tests_perwindow.js create mode 100644 browser/components/preferences/in-content/tests/subdialog.xul create mode 100644 browser/components/preferences/in-content/tests/subdialog2.xul create mode 100644 browser/components/preferences/jar.mn create mode 100644 browser/components/preferences/languages.js create mode 100644 browser/components/preferences/languages.xul create mode 100644 browser/components/preferences/moz.build create mode 100644 browser/components/preferences/permissions.js create mode 100644 browser/components/preferences/permissions.xul create mode 100644 browser/components/preferences/sanitize.js create mode 100644 browser/components/preferences/sanitize.xul create mode 100644 browser/components/preferences/selectBookmark.js create mode 100644 browser/components/preferences/selectBookmark.xul create mode 100644 browser/components/preferences/translation.js create mode 100644 browser/components/preferences/translation.xul (limited to 'browser/components/preferences') diff --git a/browser/components/preferences/applicationManager.js b/browser/components/preferences/applicationManager.js new file mode 100644 index 000000000..2e0f47a69 --- /dev/null +++ b/browser/components/preferences/applicationManager.js @@ -0,0 +1,102 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +/* import-globals-from in-content/applications.js */ + +var Cc = Components.classes; +var Ci = Components.interfaces; + +var gAppManagerDialog = { + _removed: [], + + init: function appManager_init() { + this.handlerInfo = window.arguments[0]; + + var bundle = document.getElementById("appManagerBundle"); + var contentText; + if (this.handlerInfo.type == TYPE_MAYBE_FEED) + contentText = bundle.getString("handleWebFeeds"); + else { + var description = gApplicationsPane._describeType(this.handlerInfo); + var key = + (this.handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) ? "handleFile" + : "handleProtocol"; + contentText = bundle.getFormattedString(key, [description]); + } + contentText = bundle.getFormattedString("descriptionApplications", [contentText]); + document.getElementById("appDescription").textContent = contentText; + + var list = document.getElementById("appList"); + var apps = this.handlerInfo.possibleApplicationHandlers.enumerate(); + while (apps.hasMoreElements()) { + let app = apps.getNext(); + if (!gApplicationsPane.isValidHandlerApp(app)) + continue; + + app.QueryInterface(Ci.nsIHandlerApp); + var item = list.appendItem(app.name); + item.setAttribute("image", gApplicationsPane._getIconURLForHandlerApp(app)); + item.className = "listitem-iconic"; + item.app = app; + } + + list.selectedIndex = 0; + }, + + onOK: function appManager_onOK() { + if (!this._removed.length) { + // return early to avoid calling the |store| method. + return; + } + + for (var i = 0; i < this._removed.length; ++i) + this.handlerInfo.removePossibleApplicationHandler(this._removed[i]); + + this.handlerInfo.store(); + }, + + onCancel: function appManager_onCancel() { + // do nothing + }, + + remove: function appManager_remove() { + var list = document.getElementById("appList"); + this._removed.push(list.selectedItem.app); + var index = list.selectedIndex; + list.removeItemAt(index); + if (list.getRowCount() == 0) { + // The list is now empty, make the bottom part disappear + document.getElementById("appDetails").hidden = true; + } + else { + // Select the item at the same index, if we removed the last + // item of the list, select the previous item + if (index == list.getRowCount()) + --index; + list.selectedIndex = index; + } + }, + + onSelect: function appManager_onSelect() { + var list = document.getElementById("appList"); + if (!list.selectedItem) { + document.getElementById("remove").disabled = true; + return; + } + document.getElementById("remove").disabled = false; + var app = list.selectedItem.app; + var address = ""; + if (app instanceof Ci.nsILocalHandlerApp) + address = app.executable.path; + else if (app instanceof Ci.nsIWebHandlerApp) + address = app.uriTemplate; + else if (app instanceof Ci.nsIWebContentHandlerInfo) + address = app.uri; + document.getElementById("appLocation").value = address; + var bundle = document.getElementById("appManagerBundle"); + var appType = app instanceof Ci.nsILocalHandlerApp ? "descriptionLocalApp" + : "descriptionWebApp"; + document.getElementById("appType").value = bundle.getString(appType); + } +}; diff --git a/browser/components/preferences/applicationManager.xul b/browser/components/preferences/applicationManager.xul new file mode 100644 index 000000000..ea9d3a53f --- /dev/null +++ b/browser/components/preferences/applicationManager.xul @@ -0,0 +1,59 @@ + + + + + + + + + + + + A sample sub-dialog for testing + + + + + + diff --git a/browser/components/preferences/in-content/tests/subdialog2.xul b/browser/components/preferences/in-content/tests/subdialog2.xul new file mode 100644 index 000000000..89803c250 --- /dev/null +++ b/browser/components/preferences/in-content/tests/subdialog2.xul @@ -0,0 +1,27 @@ + + + + + + + + + + A sample sub-dialog for testing + + + + + + diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn new file mode 100644 index 000000000..c0d34da7f --- /dev/null +++ b/browser/components/preferences/jar.mn @@ -0,0 +1,31 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +browser.jar: + content/browser/preferences/applicationManager.xul + content/browser/preferences/applicationManager.js + content/browser/preferences/blocklists.xul + content/browser/preferences/blocklists.js +* content/browser/preferences/colors.xul +* content/browser/preferences/cookies.xul + content/browser/preferences/cookies.js +* content/browser/preferences/connection.xul + content/browser/preferences/connection.js + content/browser/preferences/donottrack.xul +* content/browser/preferences/fonts.xul + content/browser/preferences/fonts.js + content/browser/preferences/handlers.xml + content/browser/preferences/handlers.css +* content/browser/preferences/languages.xul + content/browser/preferences/languages.js + content/browser/preferences/permissions.xul + content/browser/preferences/containers.xul + content/browser/preferences/containers.js + content/browser/preferences/permissions.js + content/browser/preferences/sanitize.xul + content/browser/preferences/sanitize.js + content/browser/preferences/selectBookmark.xul + content/browser/preferences/selectBookmark.js + content/browser/preferences/translation.xul + content/browser/preferences/translation.js diff --git a/browser/components/preferences/languages.js b/browser/components/preferences/languages.js new file mode 100644 index 000000000..16ca257f7 --- /dev/null +++ b/browser/components/preferences/languages.js @@ -0,0 +1,312 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var gLanguagesDialog = { + + _availableLanguagesList : [], + _acceptLanguages : { }, + + _selectedItemID : null, + + init: function () + { + if (!this._availableLanguagesList.length) + this._loadAvailableLanguages(); + }, + + // Ugly hack used to trigger extra reflow in order to work around XUL bug 1194844; + // see bug 1194346. + forceReflow: function () + { + this._activeLanguages.style.fontKerning = "none"; + setTimeout("gLanguagesDialog._activeLanguages.style.removeProperty('font-kerning')", 0); + }, + + get _activeLanguages() + { + return document.getElementById("activeLanguages"); + }, + + get _availableLanguages() + { + return document.getElementById("availableLanguages"); + }, + + _loadAvailableLanguages: function () + { + // This is a parser for: resource://gre/res/language.properties + // The file is formatted like so: + // ab[-cd].accept=true|false + // ab = language + // cd = region + var bundleAccepted = document.getElementById("bundleAccepted"); + var bundleRegions = document.getElementById("bundleRegions"); + var bundleLanguages = document.getElementById("bundleLanguages"); + var bundlePreferences = document.getElementById("bundlePreferences"); + + function LanguageInfo(aName, aABCD, aIsVisible) + { + this.name = aName; + this.abcd = aABCD; + this.isVisible = aIsVisible; + } + + // 1) Read the available languages out of language.properties + var strings = bundleAccepted.strings; + while (strings.hasMoreElements()) { + var currString = strings.getNext(); + if (!(currString instanceof Components.interfaces.nsIPropertyElement)) + break; + + var property = currString.key.split("."); // ab[-cd].accept + if (property[1] == "accept") { + var abCD = property[0]; + var abCDPairs = abCD.split("-"); // ab[-cd] + var useABCDFormat = abCDPairs.length > 1; + var ab = useABCDFormat ? abCDPairs[0] : abCD; + var cd = useABCDFormat ? abCDPairs[1] : ""; + if (ab) { + var language = ""; + try { + language = bundleLanguages.getString(ab); + } + catch (e) { continue; } + + var region = ""; + if (useABCDFormat) { + try { + region = bundleRegions.getString(cd); + } + catch (e) { continue; } + } + + var name = ""; + if (useABCDFormat) + name = bundlePreferences.getFormattedString("languageRegionCodeFormat", + [language, region, abCD]); + else + name = bundlePreferences.getFormattedString("languageCodeFormat", + [language, abCD]); + + if (name && abCD) { + var isVisible = currString.value == "true" && + (!(abCD in this._acceptLanguages) || !this._acceptLanguages[abCD]); + var li = new LanguageInfo(name, abCD, isVisible); + this._availableLanguagesList.push(li); + } + } + } + } + this._buildAvailableLanguageList(); + }, + + _buildAvailableLanguageList: function () + { + var availableLanguagesPopup = document.getElementById("availableLanguagesPopup"); + while (availableLanguagesPopup.hasChildNodes()) + availableLanguagesPopup.removeChild(availableLanguagesPopup.firstChild); + + // Sort the list of languages by name + this._availableLanguagesList.sort(function (a, b) { + return a.name.localeCompare(b.name); + }); + + // Load the UI with the data + for (var i = 0; i < this._availableLanguagesList.length; ++i) { + var abCD = this._availableLanguagesList[i].abcd; + if (this._availableLanguagesList[i].isVisible && + (!(abCD in this._acceptLanguages) || !this._acceptLanguages[abCD])) { + var menuitem = document.createElement("menuitem"); + menuitem.id = this._availableLanguagesList[i].abcd; + availableLanguagesPopup.appendChild(menuitem); + menuitem.setAttribute("label", this._availableLanguagesList[i].name); + } + } + }, + + readAcceptLanguages: function () + { + while (this._activeLanguages.hasChildNodes()) + this._activeLanguages.removeChild(this._activeLanguages.firstChild); + + var selectedIndex = 0; + var preference = document.getElementById("intl.accept_languages"); + if (preference.value == "") + return undefined; + var languages = preference.value.toLowerCase().split(/\s*,\s*/); + for (var i = 0; i < languages.length; ++i) { + var name = this._getLanguageName(languages[i]); + if (!name) + name = "[" + languages[i] + "]"; + var listitem = document.createElement("listitem"); + listitem.id = languages[i]; + if (languages[i] == this._selectedItemID) + selectedIndex = i; + this._activeLanguages.appendChild(listitem); + listitem.setAttribute("label", name); + + // Hash this language as an "Active" language so we don't + // show it in the list that can be added. + this._acceptLanguages[languages[i]] = true; + } + + if (this._activeLanguages.childNodes.length > 0) { + this._activeLanguages.ensureIndexIsVisible(selectedIndex); + this._activeLanguages.selectedIndex = selectedIndex; + } + + return undefined; + }, + + writeAcceptLanguages: function () + { + return undefined; + }, + + onAvailableLanguageSelect: function () + { + var addButton = document.getElementById("addButton"); + addButton.disabled = false; + + this._availableLanguages.removeAttribute("accesskey"); + }, + + addLanguage: function () + { + var selectedID = this._availableLanguages.selectedItem.id; + var preference = document.getElementById("intl.accept_languages"); + var arrayOfPrefs = preference.value.toLowerCase().split(/\s*,\s*/); + for (var i = 0; i < arrayOfPrefs.length; ++i ) { + if (arrayOfPrefs[i] == selectedID) + return; + } + + this._selectedItemID = selectedID; + + if (preference.value == "") + preference.value = selectedID; + else { + arrayOfPrefs.unshift(selectedID); + preference.value = arrayOfPrefs.join(","); + } + + this._acceptLanguages[selectedID] = true; + this._availableLanguages.selectedItem = null; + + // Rebuild the available list with the added item removed... + this._buildAvailableLanguageList(); + + this._availableLanguages.setAttribute("label", this._availableLanguages.getAttribute("label2")); + }, + + removeLanguage: function () + { + // Build the new preference value string. + var languagesArray = []; + for (var i = 0; i < this._activeLanguages.childNodes.length; ++i) { + var item = this._activeLanguages.childNodes[i]; + if (!item.selected) + languagesArray.push(item.id); + else + this._acceptLanguages[item.id] = false; + } + var string = languagesArray.join(","); + + // Get the item to select after the remove operation completes. + var selection = this._activeLanguages.selectedItems; + var lastSelected = selection[selection.length-1]; + var selectItem = lastSelected.nextSibling || lastSelected.previousSibling; + selectItem = selectItem ? selectItem.id : null; + + this._selectedItemID = selectItem; + + // Update the preference and force a UI rebuild + var preference = document.getElementById("intl.accept_languages"); + preference.value = string; + + this._buildAvailableLanguageList(); + }, + + _getLanguageName: function (aABCD) + { + if (!this._availableLanguagesList.length) + this._loadAvailableLanguages(); + for (var i = 0; i < this._availableLanguagesList.length; ++i) { + if (aABCD == this._availableLanguagesList[i].abcd) + return this._availableLanguagesList[i].name; + } + return ""; + }, + + moveUp: function () + { + var selectedItem = this._activeLanguages.selectedItems[0]; + var previousItem = selectedItem.previousSibling; + + var string = ""; + for (var i = 0; i < this._activeLanguages.childNodes.length; ++i) { + var item = this._activeLanguages.childNodes[i]; + string += (i == 0 ? "" : ","); + if (item.id == previousItem.id) + string += selectedItem.id; + else if (item.id == selectedItem.id) + string += previousItem.id; + else + string += item.id; + } + + this._selectedItemID = selectedItem.id; + + // Update the preference and force a UI rebuild + var preference = document.getElementById("intl.accept_languages"); + preference.value = string; + }, + + moveDown: function () + { + var selectedItem = this._activeLanguages.selectedItems[0]; + var nextItem = selectedItem.nextSibling; + + var string = ""; + for (var i = 0; i < this._activeLanguages.childNodes.length; ++i) { + var item = this._activeLanguages.childNodes[i]; + string += (i == 0 ? "" : ","); + if (item.id == nextItem.id) + string += selectedItem.id; + else if (item.id == selectedItem.id) + string += nextItem.id; + else + string += item.id; + } + + this._selectedItemID = selectedItem.id; + + // Update the preference and force a UI rebuild + var preference = document.getElementById("intl.accept_languages"); + preference.value = string; + }, + + onLanguageSelect: function () + { + var upButton = document.getElementById("up"); + var downButton = document.getElementById("down"); + var removeButton = document.getElementById("remove"); + switch (this._activeLanguages.selectedCount) { + case 0: + upButton.disabled = downButton.disabled = removeButton.disabled = true; + break; + case 1: + upButton.disabled = this._activeLanguages.selectedIndex == 0; + downButton.disabled = this._activeLanguages.selectedIndex == this._activeLanguages.childNodes.length - 1; + removeButton.disabled = false; + break; + default: + upButton.disabled = true; + downButton.disabled = true; + removeButton.disabled = false; + } + } +}; + diff --git a/browser/components/preferences/languages.xul b/browser/components/preferences/languages.xul new file mode 100644 index 000000000..7c877a456 --- /dev/null +++ b/browser/components/preferences/languages.xul @@ -0,0 +1,101 @@ + + +# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + + + +#ifdef XP_MACOSX + +#endif + + + +