home *** CD-ROM | disk | FTP | other *** search
- /* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2000
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Adrian Havill <havill@redhat.com>
- * Steffen Wilberg <steffen.wilberg@web.de>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
- //GLOBALS
-
- //locale bundles
- var gRegionsBundle;
- var gLanguagesBundle;
- var gAcceptedBundle;
- var gPrefLangBundle;
-
- //dictionary of all supported locales
- var gAvailLanguageDict;
-
- //XUL listbox handles
- var gAvailableLanguages;
- var gActiveLanguages;
-
- // label and accesskey of the available_languages menulist
- var gSelectLabel;
- var gSelectAccesskey;
-
- //XUL window pref window interface object
- var gPrefString = new String();
-
- //Reg expression for splitting multiple pref values
- var gSeparatorRe = /\s*,\s*/;
-
- // PrefWindow
- var gPrefWindow;
-
-
- function Init()
- {
- gRegionsBundle = document.getElementById("bundle_regions");
- gLanguagesBundle = document.getElementById("bundle_languages");
- gPrefLangBundle = document.getElementById("bundle_prefLang");
- gAcceptedBundle = document.getElementById("bundle_accepted");
- ReadAvailableLanguages();
-
- try {
- window.opener.top.initPanel(window.location.href, window);
- }
- catch(ex) { } //pref service backup
-
- gActiveLanguages = document.getElementById("active_languages");
- gPrefString = gActiveLanguages.getAttribute("prefvalue");
- LoadActiveLanguages();
-
- gPrefWindow = window.opener.parent.hPrefWindow;
- gAvailableLanguages = document.getElementById("available_languages");
- SelectLanguage();
-
- LoadAvailableLanguages();
- gSelectLabel = gAvailableLanguages.label;
- gSelectAccesskey = gAvailableLanguages.getAttribute("accesskey");
- }
-
-
- function onLanguagesDialogOK()
- {
- gPrefWindow.wsm.savePageData(window.location.href, window);
- return true;
- }
-
-
- function ReadAvailableLanguages()
- {
- gAvailLanguageDict = new Array();
- var visible = new String();
- var str = new String();
- var i =0;
-
- var gAcceptedBundleEnum = gAcceptedBundle.stringBundle.getSimpleEnumeration();
-
- var curItem;
- var stringName;
- var stringNameProperty;
-
- while (gAcceptedBundleEnum.hasMoreElements()) {
-
- //progress through the bundle
- curItem = gAcceptedBundleEnum.getNext();
-
- //"unpack" the item, nsIPropertyElement is now partially scriptable
- curItem = curItem.QueryInterface(Components.interfaces.nsIPropertyElement);
-
- //dump string name (key)
- stringName = curItem.key;
- stringNameProperty = stringName.split(".");
-
- if (stringNameProperty[1] == "accept") {
-
- //dump the UI string (value)
- visible = curItem.value;
-
- //if (visible == "true") {
-
- str = stringNameProperty[0];
- var stringLangRegion = stringNameProperty[0].split("-");
-
- if (stringLangRegion[0]) {
- var tit;
- var language;
- var region;
- var use_region_format = false;
-
- try {
- language = gLanguagesBundle.getString(stringLangRegion[0]);
- }
- catch (ex) {
- language = "";
- }
-
- if (stringLangRegion.length > 1) {
-
- try {
- region = gRegionsBundle.getString(stringLangRegion[1]);
- use_region_format = true;
- }
- catch (ex) { }
- }
-
- if (use_region_format) {
- tit = gPrefLangBundle.stringBundle.formatStringFromName("languageRegionCodeFormat",
- [language, region, str], 3);
- } else {
- tit = gPrefLangBundle.stringBundle.formatStringFromName("languageCodeFormat",
- [language, str], 2);
- }
-
- } //if language
-
- if (str && tit) {
-
- gAvailLanguageDict[i] = new Array(3);
- gAvailLanguageDict[i][0] = tit;
- gAvailLanguageDict[i][1] = str;
- gAvailLanguageDict[i][2] = visible;
- i++;
-
- } // if str && tit
- //} //if visible
- } //if accepted
- } //while
- gAvailLanguageDict.sort( // sort on first element
- function (a, b) {
- if (a[0] < b[0]) return -1;
- if (a[0] > b[0]) return 1;
- return 0;
- });
- } //ReadAvailableLanguages
-
-
- function LoadAvailableLanguages()
- {
- if (gAvailLanguageDict)
- for (var i = 0; i < gAvailLanguageDict.length; i++)
- if (gAvailLanguageDict[i][2] == "true")
- AddMenuOrListItem(document, gAvailableLanguages.menupopup, "menuitem", gAvailLanguageDict[i][1], gAvailLanguageDict[i][0]);
- }
-
-
- function LoadActiveLanguages()
- {
- if (gPrefString) {
- var arrayOfPrefs = gPrefString.split(gSeparatorRe);
-
- for (var i = 0; i < arrayOfPrefs.length; i++) {
- var str = arrayOfPrefs[i];
- var tit = GetLanguageTitle(str);
-
- if (str) {
- if (!tit)
- tit = "[" + str + "]";
- AddMenuOrListItem(document, gActiveLanguages, "listitem", str, tit);
- } //if
- } //for
- } //if
- }
-
-
- function LangAlreadyActive(langId)
- {
- var found = false;
- try {
- var arrayOfPrefs = gPrefString.split(gSeparatorRe);
-
- if (arrayOfPrefs)
- for (var i = 0; i < arrayOfPrefs.length; i++) {
- if (arrayOfPrefs[i] == langId) {
- found = true;
- break;
- }
- }
-
- return found;
- }
-
- catch(ex){
- return false;
- }
- } //LangAlreadyActive
-
-
- function SelectAvailableLanguage()
- {
- var selItem = gAvailableLanguages.selectedItem;
- var languageId = selItem.getAttribute("id");
- var addButton = document.getElementById("add");
-
- // since we're not displaying "select" anymore, don't underline some random "s"
- gAvailableLanguages.removeAttribute("accesskey");
-
- // if the langauge is not already active, activate the "add" button
- if (!LangAlreadyActive(languageId))
- addButton.disabled = false;
- else
- addButton.disabled = true;
- }
-
- function AddAvailableLanguage()
- {
- var selItem = gAvailableLanguages.selectedItem;
- var languageId = selItem.getAttribute("id");
- var languageName = selItem.getAttribute("label");
- var addButton = document.getElementById("add");
-
- if (!LangAlreadyActive(languageId))
- AddMenuOrListItem(document, gActiveLanguages, "listitem", languageId, languageName);
-
- // restore the "select" label and accesskey, disable the "add" button again
- gAvailableLanguages.label = gSelectLabel;
- gAvailableLanguages.setAttribute("accesskey", gSelectAccesskey);
- addButton.disabled = true;
-
- // select the item we just added in the active_languages listbox
- var lastItem = gActiveLanguages.lastChild;
- gActiveLanguages.selectItem(lastItem);
- gActiveLanguages.ensureElementIsVisible(lastItem);
-
- UpdateSavePrefString();
- }
-
-
- function RemoveActiveLanguage()
- {
- var nextNode = null;
- var numSelected = gActiveLanguages.selectedItems.length;
- var deleted_all = false;
-
- while (gActiveLanguages.selectedItems.length > 0) {
- var selectedNode = gActiveLanguages.selectedItems[0];
-
- nextNode = selectedNode.nextSibling;
- if (!nextNode && selectedNode.previousSibling)
- nextNode = selectedNode.previousSibling;
-
- gActiveLanguages.removeChild(selectedNode);
- } //while
-
- if (nextNode)
- gActiveLanguages.selectItem(nextNode)
-
- UpdateSavePrefString();
- }
-
-
- function GetLanguageTitle(id)
- {
-
- if (gAvailLanguageDict)
- for (var j = 0; j < gAvailLanguageDict.length; j++) {
-
- if ( gAvailLanguageDict[j][1] == id) {
- //title =
- return gAvailLanguageDict[j][0];
- }
- }
- return "";
- }
-
-
- function AddMenuOrListItem(doc, listbox, type, langID, langTitle)
- {
- try { //let's beef up our error handling for languages without label / title
-
- // Create a listitem for the new Language
- var item = doc.createElement(type);
-
- // Copy over the attributes
- item.setAttribute("label", langTitle);
- item.setAttribute("id", langID);
- listbox.appendChild(item);
-
- }
- catch (ex) { }
- }
-
-
- function UpdateSavePrefString()
- {
- var num_languages = 0;
- gPrefString = "";
-
- for (var item = gActiveLanguages.firstChild; item != null; item = item.nextSibling) {
-
- var languageId = item.getAttribute("id");
-
- if (languageId.length > 1) {
- num_languages++;
-
- //separate >1 languages by commas
- if (num_languages > 1) {
- gPrefString = gPrefString + "," + " " + languageId;
- } else {
- gPrefString = languageId;
- } //if
- } //if
- }//for
-
- gActiveLanguages.setAttribute("prefvalue", gPrefString);
- }
-
-
- function MoveUp() {
-
- if (gActiveLanguages.selectedItems.length == 1) {
- var selected = gActiveLanguages.selectedItems[0];
- var before = selected.previousSibling
- if (before) {
- before.parentNode.insertBefore(selected, before);
- gActiveLanguages.selectItem(selected);
- gActiveLanguages.ensureElementIsVisible(selected);
- }
- }
-
- if (gActiveLanguages.selectedIndex == 0)
- {
- // selected item is first
- var moveUp = document.getElementById("up");
- moveUp.disabled = true;
- }
-
- if (gActiveLanguages.childNodes.length > 1)
- {
- // more than one item so we can move selected item back down
- var moveDown = document.getElementById("down");
- moveDown.disabled = false;
- }
-
- UpdateSavePrefString();
- } //MoveUp
-
-
- function MoveDown() {
-
- if (gActiveLanguages.selectedItems.length == 1) {
- var selected = gActiveLanguages.selectedItems[0];
- if (selected.nextSibling) {
- if (selected.nextSibling.nextSibling) {
- gActiveLanguages.insertBefore(selected, selected.nextSibling.nextSibling);
- }
- else {
- gActiveLanguages.appendChild(selected);
- }
- gActiveLanguages.selectItem(selected);
- }
- }
-
- if (gActiveLanguages.selectedIndex == gActiveLanguages.childNodes.length - 1)
- {
- // selected item is last
- var moveDown = document.getElementById("down");
- moveDown.disabled = true;
- }
-
- if (gActiveLanguages.childNodes.length > 1)
- {
- // more than one item so we can move selected item back up
- var moveUp = document.getElementById("up");
- moveUp.disabled = false;
- }
-
- UpdateSavePrefString();
-
- } //MoveDown
-
-
- function SelectLanguage() {
- if (gActiveLanguages.selectedItems.length) {
- document.getElementById("remove").disabled = false;
-
- var selected = gActiveLanguages.selectedItems[0];
- document.getElementById("down").disabled = !selected.nextSibling;
- document.getElementById("up").disabled = !selected.previousSibling;
- }
- else {
- document.getElementById("remove").disabled = true;
- document.getElementById("down").disabled = true;
- document.getElementById("up").disabled = true;
- }
-
- if (gPrefWindow.getPrefIsLocked(document.getElementById("up").getAttribute("prefstring")))
- document.getElementById("up").disabled = true;
- if (gPrefWindow.getPrefIsLocked(document.getElementById("down").getAttribute("prefstring")))
- document.getElementById("down").disabled = true;
- if (gPrefWindow.getPrefIsLocked(document.getElementById("remove").getAttribute("prefstring")))
- document.getElementById("remove").disabled = true;
- if (gPrefWindow.getPrefIsLocked(gAvailableLanguages.getAttribute("prefstring")))
- gAvailableLanguages.disabled = true; // the "add" button just stays disabled
- } // SelectLanguage
-