gecko-dev/suite/common/pref/pref-charset.js

596 строки
14 KiB
JavaScript
Исходник Обычный вид История

//get prefInt services
var availCharsetList = new Array();
var activeCharsetList = new Array();
var availCharsetDict = new Array();
var ccm = null; //Charset Coverter Mgr.
var prefInt = null; //Preferences Interface
var pref_string_title = new String();
var pref_string_content = new String();
function Init()
{
var applicationArea = new String();
dump("*** pref-charset.js, Init()\n");
try {
if (window.arguments && window.arguments[0]) {
applicationArea = window.arguments[0];
} else {
dump("*** no window arguments!\n");
} //if
} //try
catch(ex) {
dump("*** failed reading arguments\n");
}
try
{
prefInt = Components.classes["component://netscape/preferences"];
if (prefInt) {
prefInt = prefInt.getService();
prefInt = prefInt.QueryInterface(Components.interfaces.nsIPref);
if (applicationArea == 'mailnews') {
pref_string_title = "intl.charsetmenu.mailedit";
} else {
//default is the browser
pref_string_title = "intl.charsetmenu.browser.static";
}
dump("*** " + pref_string_title + " \n");
pref_string_content = prefInt.CopyCharPref(pref_string_title);
AddRemoveLatin1('add');
dump("*** Charset PrefString: " + pref_string_content + "\n");
}
}
catch(ex)
{
dump("failed to get prefs services!\n");
prefInt = null;
}
try {
ccm = Components.classes['component://netscape/charset-converter-manager'];
if (ccm) {
ccm = ccm.getService();
ccm = ccm.QueryInterface(Components.interfaces.nsICharsetConverterManager2);
availCharsetList = ccm.GetDecoderList();
availCharsetList = availCharsetList.QueryInterface(Components.interfaces.nsISupportsArray);
availCharsetList.sort;
}
}
catch(ex)
{
dump("failed to get charset mgr. services!\n");
ccm = null;
}
LoadAvailableCharSets();
LoadActiveCharSets();
}
function LoadAvailableCharSets()
{
var available_charsets = document.getElementById('available_charsets');
var available_charsets_treeroot = document.getElementById('available_charsets_root');
var invisible = new String();
if (availCharsetList) for (i = 0; i < availCharsetList.Count(); i++) {
atom = availCharsetList.GetElementAt(i);
atom = atom.QueryInterface(Components.interfaces.nsIAtom);
if (atom) {
str = atom.GetUnicode();
try {
tit = ccm.GetCharsetTitle(atom);
} catch (ex) {
tit = str; //don't ignore charset detectors without a title
}
try {
visible = ccm.GetCharsetData(atom,'.notForBrowser');
visible = false;
} catch (ex) {
visible = true;
//dump('Getting invisible for:' + str + ' failed!\n');
}
} //atom
if (str) if (tit) {
availCharsetDict[i] = new Array(2);
availCharsetDict[i][0] = tit;
availCharsetDict[i][1] = str;
availCharsetDict[i][2] = visible;
if (tit) {}
else dump('Not label for :' + str + ', ' + tit+'\n');
} //str
} //for
availCharsetDict.sort();
if (availCharsetDict) for (i = 0; i < availCharsetDict.length; i++) {
try { //let's beef up our error handling for charsets without label / title
if (availCharsetDict[i][2]) {
// Create a treerow for the new charset
var item = document.createElement('treeitem');
var row = document.createElement('treerow');
var cell = document.createElement('treecell');
tit = availCharsetDict[i][0];
str = availCharsetDict[i][1];
// Copy over the attributes
cell.setAttribute('value', tit);
cell.setAttribute('id', str);
// Add it to the active charsets tree
item.appendChild(row);
row.appendChild(cell);
available_charsets_treeroot.appendChild(item);
// Select first item
if (i == 0) {
}
dump("*** Added Available Charset: " + tit + "\n");
} //if visible
} //try
catch (ex) {
dump("*** Failed to add Avail. Charset: " + tit + "\n");
} //catch
} //for
//select first item in list box
//item = available_charsets_treeroot.firstChild;
//if (item) try {
// available_charsets.selectItem(item);
// available_charsets.ensureElementIsVisible(item);
//}
//catch (ex) {
// dump("Not able to select first avail. charset.\n");
//}
}
function GetCharSetTitle(id)
{
dump("looking up title for:" + id + "\n");
if (availCharsetDict) for (j = 0; j < availCharsetDict.length; j++) {
//dump("ID:" + availCharsetDict[j][1] + " ==> " + availCharsetDict[j][0] + "\n");
if ( availCharsetDict[j][1] == id) {
//title =
dump("found title for:" + id + " ==> " + availCharsetDict[j][0] + "\n");
return availCharsetDict[j][0];
}
}
return '';
}
function GetCharSetVisibility(id)
{
dump("looking up visibility for:" + id + "\n");
if (availCharsetDict) for (j = 0; j < availCharsetDict.length; j++) {
//dump("ID:" + availCharsetDict[j][1] + " ==> " + availCharsetDict[j][2] + "\n");
if ( availCharsetDict[j][1] == id) {
//title =
dump("found visibility for:" + id + " ==> " + availCharsetDict[j][2] + "\n");
return availCharsetDict[j][2];
}
}
return false;
}
function AddRemoveLatin1(action)
{
try {
arrayOfPrefs = pref_string_content.split(', ');
}
catch (ex) {
dump("failed to split the preference string!\n");
}
if (arrayOfPrefs) for (i = 0; i < arrayOfPrefs.length; i++) {
str = arrayOfPrefs[i];
if (str == 'ISO-8859-1') {
if (action == 'remove') {
arrayOfPrefs[i]=arrayOfPrefs[arrayOfPrefs.length-1];
arrayOfPrefs.length = arrayOfPrefs.length - 1;
}
pref_string_content = arrayOfPrefs.join(', ');
return;
}
} //for
if (action == 'add') {
arrayOfPrefs[arrayOfPrefs.length]= 'ISO-8859-1';
pref_string_content = arrayOfPrefs.join(', ');
}
}
function LoadActiveCharSets()
{
var active_charsets = document.getElementById('active_charsets');
var active_charsets_treeroot = document.getElementById('active_charsets_root');
var visible;
try {
arrayOfPrefs = pref_string_content.split(', ');
}
catch (ex) {
dump("failed to split the preference string!\n");
}
if (arrayOfPrefs) for (i = 0; i < arrayOfPrefs.length; i++) {
str = arrayOfPrefs[i];
try {
atom = atom.QueryInterface(Components.interfaces.nsIAtom);
} catch (ex) {
dump("failed to load atom interface...\n" );
}
try {
atom.ToString(str); } catch (ex) {
dump("failed to create an atom from:" + str + "\n" );
}
if (atom) {
try {
tit = ccm.GetCharsetTitle(NS_NewAtom(str));
}
catch (ex) {
tit = GetCharSetTitle(str);
visible = GetCharSetVisibility(str);
if (tit == '') tit = str;
//if (title != '') tit = title;
dump("failed to get title for:" + str + "\n" );
}
} //atom
if (str) if (tit) if (visible) {
dump("Adding Active Charset: " + str + " ==> " + tit + "\n");
// Create a treerow for the new charset
var item = document.createElement('treeitem');
var row = document.createElement('treerow');
var cell = document.createElement('treecell');
// Copy over the attributes
cell.setAttribute('value', tit);
cell.setAttribute('id', str);
// Add it to the active charsets tree
item.appendChild(row);
row.appendChild(cell);
active_charsets_treeroot.appendChild(item);
dump("*** Added Active Charset: " + tit + "\n");
} //if
} //for
}
function SelectAvailableCharset()
{
//Remove the selection in the active charsets list
var active_charsets = document.getElementById('active_charsets');
if (active_charsets.selectedCells.length > 0)
active_charsets.clearCellSelection();
if (active_charsets.selectedItems.length > 0)
active_charsets.clearItemSelection();
enable_add_button();
} //SelectAvailableCharset
function SelectActiveCharset()
{
//Remove the selection in the available charsets list
var available_charsets = document.getElementById('available_charsets');
if (available_charsets.selectedCells.length > 0)
available_charsets.clearCellSelection();
if (available_charsets.selectedItems.length > 0)
available_charsets.clearItemSelection();
enable_remove_button();
} //SelectActiveCharset
function enable_remove_button()
{
var remove_button = document.getElementById('remove_button');
remove_button.setAttribute('disabled','false');
}
function enable_save()
{
var save_button = document.getElementById('save_button');
save_button.setAttribute('disabled','false');
}
function enable_add_button()
{
var add_button = document.getElementById('add_button');
add_button.setAttribute('disabled','false');
}
function AddAvailableCharset()
{
var active_charsets = document.getElementById('active_charsets');
var active_charsets_treeroot = document.getElementById('active_charsets_root');
var available_charsets = document.getElementById('available_charsets');
for (var nodeIndex=0; nodeIndex < available_charsets.selectedItems.length; nodeIndex++) {
var selItem = available_charsets.selectedItems[nodeIndex];
var selRow = selItem.firstChild;
var selCell = selRow.firstChild;
var charsetname = selCell.getAttribute('value');
var charsetid = selCell.getAttribute('id');
var already_active = false;
for (var item = active_charsets_treeroot.firstChild; item != null; item = item.nextSibling) {
var row = item.firstChild;
var cell = row.firstChild;
var active_charsetid = cell.getAttribute('id');
if (active_charsetid == charsetid) {
already_active = true;
break;
}
}
if (already_active == false) {
// Create a treerow for the new charset
var item = document.createElement('treeitem');
var row = document.createElement('treerow');
var cell = document.createElement('treecell');
// Copy over the attributes
cell.setAttribute('value', charsetname);
cell.setAttribute('id', charsetid);
// Add it to the active charsets tree
item.appendChild(row);
row.appendChild(cell);
active_charsets_treeroot.appendChild(item);
// Select is only if the caller wants to.
active_charsets.selectItem(item);
active_charsets.ensureElementIsVisible(item);
}//add new item
} //loop selected charsets
available_charsets.clearItemSelection();
enable_save();
} //AddAvailableCharset
function RemoveActiveCharset()
{
var active_charsets_treeroot = document.getElementById('active_charsets_root');
var tree = document.getElementById('active_charsets');
var nextNode = null;
var numSelected = tree.selectedItems.length;
var deleted_all = false;
while (tree.selectedItems.length > 0) {
var selectedNode = tree.selectedItems[0];
nextNode = selectedNode.nextSibling;
if (!nextNode)
if (selectedNode.previousSibling)
nextNode = selectedNode.previousSibling;
var row = selectedNode.firstChild;
var cell = row.firstChild;
row.removeChild(cell);
selectedNode.removeChild(row);
active_charsets_treeroot.removeChild(selectedNode);
} //while
if (nextNode) {
tree.selectItem(nextNode)
} else {
//tree.clearItemSelection();
}
enable_save();
} //RemoveActiveCharset
function Save()
{
// Iterate through the 'active charsets tree to collect the charsets
// that the user has chosen.
dump('Entering Save() function.\n');
var active_charsets = document.getElementById('active_charsets');
var active_charsets_treeroot = document.getElementById('active_charsets_root');
var row = null;
var cell = null;
var charsetid = new String();
var num_charsets = 0;
pref_string_content = '';
for (var item = active_charsets_treeroot.firstChild; item != null; item = item.nextSibling) {
row = item.firstChild;
cell = row.firstChild;
charsetid = cell.getAttribute('id');
if (charsetid.length > 1) {
num_charsets++;
//separate >1 charsets by commas
if (num_charsets > 1) {
pref_string_content = pref_string_content + "," + " " + charsetid;
} else {
pref_string_content = charsetid;
}
}
}
try
{
if (prefInt)
{
//AddRemoveLatin1('remove');
prefInt.SetCharPref(pref_string_title, pref_string_content);
//prefInt.SetCharPref("browser.startup.homepage", pref_string_content);
//prefInt.CopyCharPref(pref_string_title, pref_string_content);
//prefInt.SetCharPref("browser.startup.homepage", "www.betak.net");
confirm_text = document.getElementById('confirm_text');
dump('intl.charset_menu.static set to ' + pref_string_content + '.\n');
window.close();
confirm(confirm_text.getAttribute('value'));
}
}
catch(ex)
{
confirm('exception' + ex);
}
} //Save
function MoveUp() {
var tree = document.getElementById('active_charsets');
if (tree.selectedItems.length == 1) {
var selected = tree.selectedItems[0];
var before = selected.previousSibling
if (before) {
before.parentNode.insertBefore(selected, before);
tree.selectItem(selected);
tree.ensureElementIsVisible(selected);
}
}
enable_save();
} //MoveUp
function MoveDown() {
var tree = document.getElementById('active_charsets');
if (tree.selectedItems.length == 1) {
var selected = tree.selectedItems[0];
if (selected.nextSibling) {
if (selected.nextSibling.nextSibling) {
selected.parentNode.insertBefore(selected, selected.nextSibling.nextSibling);
}
else {
selected.parentNode.appendChild(selected);
}
tree.selectItem(selected);
}
}
enable_save();
} //MoveDown