/toolkit/content/customizeCharset.js

http://github.com/zpao/v8monkey · JavaScript · 304 lines · 229 code · 68 blank · 7 comment · 48 complexity · 191a9148b39b30a50592e94dac8df0f8 MD5 · raw file

  1. //get prefInt services
  2. var availCharsetDict = [];
  3. var prefBranch = null; //Preferences Interface
  4. var pref_string_title = "";
  5. var pref_string_content = "";
  6. var pref_string_object = null;
  7. function Init()
  8. {
  9. var applicationArea = "";
  10. if ("arguments" in window && window.arguments[0])
  11. applicationArea = window.arguments[0];
  12. prefBranch = Components.classes["@mozilla.org/preferences-service;1"];
  13. if (prefBranch) {
  14. prefBranch = prefBranch.getService(Components.interfaces.nsIPrefBranch);
  15. if (applicationArea.indexOf("mail") != -1) {
  16. pref_string_title = "intl.charsetmenu.mailedit";
  17. } else {
  18. //default is the browser
  19. pref_string_title = "intl.charsetmenu.browser.static";
  20. }
  21. pref_string_object = prefBranch.getComplexValue(pref_string_title, Components.interfaces.nsIPrefLocalizedString)
  22. pref_string_content = pref_string_object.data;
  23. AddRemoveLatin1('add');
  24. }
  25. LoadAvailableCharSets();
  26. LoadActiveCharSets();
  27. }
  28. function readRDFString(aDS,aRes,aProp)
  29. {
  30. var n = aDS.GetTarget(aRes, aProp, true);
  31. if (n)
  32. return n.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  33. else
  34. return "";
  35. }
  36. function LoadAvailableCharSets()
  37. {
  38. try {
  39. var available_charsets_listbox = document.getElementById('available_charsets');
  40. var rdf=Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
  41. var kNC_Root = rdf.GetResource("NC:DecodersRoot");
  42. var kNC_name = rdf.GetResource("http://home.netscape.com/NC-rdf#Name");
  43. var rdfDataSource = rdf.GetDataSource("rdf:charset-menu");
  44. var rdfContainer =
  45. Components.classes["@mozilla.org/rdf/container;1"]
  46. .createInstance(Components.interfaces.nsIRDFContainer);
  47. rdfContainer.Init(rdfDataSource, kNC_Root);
  48. var availableCharsets = rdfContainer.GetElements();
  49. var charset;
  50. for (var i = 0; i < rdfContainer.GetCount(); i++) {
  51. charset = availableCharsets.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
  52. availCharsetDict[i] = new Array(2);
  53. availCharsetDict[i][0] = readRDFString(rdfDataSource, charset, kNC_name);
  54. availCharsetDict[i][1] = charset.Value;
  55. AddListItem(document,
  56. available_charsets_listbox,
  57. availCharsetDict[i][1],
  58. availCharsetDict[i][0]);
  59. }
  60. }
  61. catch (e) {}
  62. }
  63. function GetCharSetTitle(id)
  64. {
  65. if (availCharsetDict) {
  66. for (var j = 0; j < availCharsetDict.length; j++) {
  67. if (availCharsetDict[j][1] == id) {
  68. return availCharsetDict[j][0];
  69. }
  70. }
  71. }
  72. return '';
  73. }
  74. function AddRemoveLatin1(action)
  75. {
  76. var arrayOfPrefs = [];
  77. arrayOfPrefs = pref_string_content.split(', ');
  78. if (arrayOfPrefs.length > 0) {
  79. for (var i = 0; i < arrayOfPrefs.length; i++) {
  80. if (arrayOfPrefs[i] == 'ISO-8859-1') {
  81. if (action == 'remove') {
  82. arrayOfPrefs[i] = arrayOfPrefs[arrayOfPrefs.length-1];
  83. arrayOfPrefs.length = arrayOfPrefs.length - 1;
  84. }
  85. pref_string_content = arrayOfPrefs.join(', ');
  86. return;
  87. }
  88. }
  89. if (action == 'add') {
  90. arrayOfPrefs[arrayOfPrefs.length] = 'ISO-8859-1';
  91. pref_string_content = arrayOfPrefs.join(', ');
  92. }
  93. }
  94. }
  95. function LoadActiveCharSets()
  96. {
  97. var active_charsets = document.getElementById('active_charsets');
  98. var arrayOfPrefs = [];
  99. var str;
  100. var tit;
  101. arrayOfPrefs = pref_string_content.split(', ');
  102. if (arrayOfPrefs.length > 0) {
  103. for (var i = 0; i < arrayOfPrefs.length; i++) {
  104. str = arrayOfPrefs[i];
  105. tit = GetCharSetTitle(str);
  106. if (str && tit)
  107. AddListItem(document, active_charsets, str, tit);
  108. }
  109. }
  110. }
  111. function enable_save()
  112. {
  113. var save_button = document.documentElement.getButton("accept");
  114. save_button.removeAttribute('disabled');
  115. }
  116. function update_buttons()
  117. {
  118. var available_charsets = document.getElementById('available_charsets');
  119. var active_charsets = document.getElementById('active_charsets');
  120. var remove_button = document.getElementById('remove_button');
  121. var add_button = document.getElementById('add_button');
  122. var up_button = document.getElementById('up_button');
  123. var down_button = document.getElementById('down_button');
  124. var activeCharsetSelected = (active_charsets.selectedItems.length > 0);
  125. remove_button.disabled = !activeCharsetSelected;
  126. if (activeCharsetSelected) {
  127. up_button.disabled = !(active_charsets.selectedItems[0].previousSibling);
  128. down_button.disabled = !(active_charsets.selectedItems[0].nextSibling);
  129. }
  130. else {
  131. up_button.disabled = true;
  132. down_button.disabled = true;
  133. }
  134. add_button.disabled = (available_charsets.selectedItems.length == 0);
  135. }
  136. function AddAvailableCharset()
  137. {
  138. var active_charsets = document.getElementById('active_charsets');
  139. var available_charsets = document.getElementById('available_charsets');
  140. for (var nodeIndex=0; nodeIndex < available_charsets.selectedItems.length; nodeIndex++)
  141. {
  142. var selItem = available_charsets.selectedItems[nodeIndex];
  143. var charsetname = selItem.label;
  144. var charsetid = selItem.id;
  145. var already_active = false;
  146. for (var item = active_charsets.firstChild; item != null; item = item.nextSibling) {
  147. if (charsetid == item.id) {
  148. already_active = true;
  149. break;
  150. }//if
  151. }//for
  152. if (already_active == false) {
  153. AddListItem(document, active_charsets, charsetid, charsetname);
  154. }//if
  155. }//for
  156. available_charsets.clearSelection();
  157. enable_save();
  158. } //AddAvailableCharset
  159. function RemoveActiveCharset()
  160. {
  161. var listbox = document.getElementById('active_charsets');
  162. var numSelectedItems = listbox.selectedItems.length;
  163. for (var count = 0; count < numSelectedItems; count ++) {
  164. listbox.removeChild(listbox.selectedItems[0]);
  165. }
  166. listbox.clearSelection();
  167. enable_save();
  168. } //RemoveActiveCharset
  169. function Save()
  170. {
  171. // Iterate through the 'active charsets tree to collect the charsets
  172. // that the user has chosen.
  173. var active_charsets = document.getElementById('active_charsets');
  174. var charsetid = "";
  175. var num_charsets = 0;
  176. var pref_string_content = '';
  177. for (var item = active_charsets.firstChild; item != null; item = item.nextSibling) {
  178. charsetid = item.id;
  179. if (charsetid.length > 1) {
  180. num_charsets++;
  181. //separate >1 charsets by commas
  182. if (num_charsets > 1)
  183. pref_string_content = pref_string_content + ", " + charsetid;
  184. else
  185. pref_string_content = charsetid;
  186. }
  187. }
  188. try
  189. {
  190. if (prefBranch) {
  191. pref_string_object.data = pref_string_content;
  192. prefBranch.setComplexValue(pref_string_title, Components.interfaces.nsIPrefLocalizedString, pref_string_object);
  193. window.close();
  194. }
  195. }
  196. catch(ex) {
  197. confirm('exception' + ex);
  198. }
  199. return true;
  200. } //Save
  201. function MoveUp() {
  202. var listbox = document.getElementById('active_charsets');
  203. if (listbox.selectedItems.length == 1) {
  204. var selected = listbox.selectedItems[0];
  205. var before = selected.previousSibling
  206. if (before) {
  207. listbox.insertBefore(selected, before);
  208. listbox.selectItem(selected);
  209. listbox.ensureElementIsVisible(selected);
  210. }
  211. }
  212. enable_save();
  213. } //MoveUp
  214. function MoveDown() {
  215. var listbox = document.getElementById('active_charsets');
  216. if (listbox.selectedItems.length == 1) {
  217. var selected = listbox.selectedItems[0];
  218. if (selected.nextSibling) {
  219. if (selected.nextSibling.nextSibling)
  220. listbox.insertBefore(selected, selected.nextSibling.nextSibling);
  221. else
  222. selected.parentNode.appendChild(selected);
  223. listbox.selectItem(selected);
  224. }
  225. }
  226. enable_save();
  227. } //MoveDown
  228. function AddListItem(doc, listbox, ID, UIstring)
  229. {
  230. // Create a treerow for the new item
  231. var item = doc.createElement('listitem');
  232. // Copy over the attributes
  233. item.setAttribute('label', UIstring);
  234. item.setAttribute('id', ID);
  235. listbox.appendChild(item);
  236. }