home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / phoenix / chrome / toolkit.jar / content / global / charsetOverlay.js < prev    next >
Text File  |  2002-11-12  |  9KB  |  286 lines

  1. function MultiplexHandler(event)
  2. {
  3.     var node = event.target;
  4.     var name = node.getAttribute('name');
  5.  
  6.     if (name == 'detectorGroup') {
  7.         SetForcedDetector(true);
  8.         SelectDetector(event, false);
  9.     } else if (name == 'charsetGroup') {
  10.         var charset = node.getAttribute('id');
  11.         charset = charset.substring('charset.'.length, charset.length)
  12.         SetForcedCharset(charset);
  13.         SetDefaultCharacterSet(charset);
  14.     } else if (name == 'charsetCustomize') {
  15.         //do nothing - please remove this else statement, once the charset prefs moves to the pref window
  16.     } else {
  17.         SetForcedCharset(node.getAttribute('id'));
  18.         SetDefaultCharacterSet(node.getAttribute('id'));
  19.     }
  20. }
  21.  
  22. function MailMultiplexHandler(event)
  23. {
  24.     var node = event.target;
  25.     var name = node.getAttribute('name');
  26.  
  27.     if (name == 'detectorGroup') {
  28.         SelectDetector(event, true);
  29.     } else if (name == 'charsetGroup') {
  30.         var charset = node.getAttribute('id');
  31.         charset = charset.substring('charset.'.length, charset.length)
  32.         MessengerSetDefaultCharacterSet(charset);
  33.     } else if (name == 'charsetCustomize') {
  34.         //do nothing - please remove this else statement, once the charset prefs moves to the pref window
  35.     } else {
  36.         MessengerSetDefaultCharacterSet(node.getAttribute('id'));
  37.     }
  38. }
  39.  
  40. function ComposerMultiplexHandler(event)
  41. {
  42.     var node = event.target;
  43.     var name = node.getAttribute('name');
  44.  
  45.     if (name == 'detectorGroup') {
  46.         ComposerSelectDetector(event, true);
  47.     } else if (name == 'charsetGroup') {
  48.         var charset = node.getAttribute('id');
  49.         charset = charset.substring('charset.'.length, charset.length)
  50.         EditorSetDocumentCharacterSet(charset);
  51.     } else if (name == 'charsetCustomize') {
  52.         //do nothing - please remove this else statement, once the charset prefs moves to the pref window
  53.     } else {
  54.         SetForcedEditorCharset(node.getAttribute('id'));
  55.     }
  56. }
  57.  
  58. function SetDefaultCharacterSet(charset)
  59. {
  60.     dump("Charset Overlay menu item pressed: " + charset + "\n");
  61.     BrowserSetDefaultCharacterSet(charset);
  62. }
  63.  
  64. function SelectDetector(event, doReload)
  65. {
  66.     dump("Charset Detector menu item pressed: " + event.target.getAttribute('id') + "\n");
  67.  
  68.     var uri =  event.target.getAttribute("id");
  69.     var prefvalue = uri.substring('chardet.'.length, uri.length);
  70.     if ("off" == prefvalue) { // "off" is special value to turn off the detectors
  71.         prefvalue = "";
  72.     }
  73.  
  74.     try {
  75.         var pref = Components.classes["@mozilla.org/preferences-service;1"]
  76.                              .getService(Components.interfaces.nsIPrefBranch);
  77.         var str =  Components.classes["@mozilla.org/supports-string;1"]
  78.                              .createInstance(Components.interfaces.nsISupportsString);
  79.  
  80.         str.data = prefvalue;
  81.         pref.setComplexValue("intl.charset.detector",
  82.                              Components.interfaces.nsISupportsString, str);
  83.         if (doReload) window._content.location.reload();
  84.     }
  85.     catch (ex) {
  86.         dump("Failed to set the intl.charset.detector preference.\n");
  87.     }
  88. }
  89.  
  90. function ComposerSelectDetector(event)
  91. {
  92.     //dump("Charset Detector menu item pressed: " + event.target.getAttribute('id') + "\n");
  93.  
  94.     var uri =  event.target.getAttribute("id");
  95.     var prefvalue = uri.substring('chardet.'.length, uri.length);
  96.     if ("off" == prefvalue) { // "off" is special value to turn off the detectors
  97.         prefvalue = "";
  98.     }
  99.  
  100.     try {
  101.         var pref = Components.classes["@mozilla.org/preferences-service;1"]
  102.                              .getService(Components.interfaces.nsIPrefBranch);
  103.         var str =  Components.classes["@mozilla.org/supports-string;1"]
  104.                              .createInstance(Components.interfaces.nsISupportsString);
  105.  
  106.         str.data = prefvalue;
  107.         pref.setComplexValue("intl.charset.detector",
  108.                              Components.interfaces.nsISupportsString, str);
  109.         EditorLoadUrl(GetDocumentUrl());    
  110.     }
  111.     catch (ex) {
  112.         dump("Failed to set the intl.charset.detector preference.\n");
  113.     }
  114. }
  115.  
  116. function SetForcedDetector(doReload)
  117. {
  118.     BrowserSetForcedDetector(doReload);
  119. }
  120.  
  121. function SetForcedCharset(charset)
  122. {
  123.     BrowserSetForcedCharacterSet(charset);
  124. }
  125.  
  126. var gPrevCharset = null;
  127. function UpdateCurrentCharset()
  128. {
  129.     var menuitem = null;
  130.  
  131.     // exctract the charset from DOM
  132.     var wnd = document.commandDispatcher.focusedWindow;
  133.     if ((window == wnd) || (wnd == null)) wnd = window._content;
  134.     menuitem = document.getElementById('charset.' + wnd.document.characterSet);
  135.  
  136.     if (menuitem) {
  137.         // uncheck previously checked item to workaround Mac checkmark problem
  138.         // bug 98625
  139.         if (gPrevCharset) {
  140.             var pref_item = document.getElementById('charset.' + gPrevCharset);
  141.             if (pref_item)
  142.               pref_item.setAttribute('checked', 'false');
  143.         }
  144.         menuitem.setAttribute('checked', 'true');
  145.     }
  146. }
  147.  
  148. function UpdateCurrentMailCharset()
  149. {
  150.     var charset = msgWindow.mailCharacterSet;
  151.     dump("Update current mail charset: " + charset + " \n");
  152.  
  153.     var menuitem = document.getElementById('charset.' + charset);
  154.  
  155.     if (menuitem) {
  156.         menuitem.setAttribute('checked', 'true');
  157.     }
  158. }
  159.  
  160. function UpdateCharsetDetector()
  161. {
  162.     var prefvalue;
  163.  
  164.     try {
  165.         var pref = Components.classes["@mozilla.org/preferences-service;1"]
  166.                              .getService(Components.interfaces.nsIPrefBranch);
  167.         prefvalue = pref.getComplexValue("intl.charset.detector",
  168.                                          Components.interfaces.nsIPrefLocalizedString).data;
  169.     }
  170.     catch (ex) {
  171.         prefvalue = "";
  172.     }
  173.  
  174.     if (prefvalue == "") prefvalue = "off";
  175.     dump("intl.charset.detector = "+ prefvalue + "\n");
  176.  
  177.     prefvalue = 'chardet.' + prefvalue;
  178.     var menuitem = document.getElementById(prefvalue);
  179.  
  180.     if (menuitem) {
  181.         menuitem.setAttribute('checked', 'true');
  182.     }
  183. }
  184.  
  185. function UpdateMenus(event)
  186. {
  187.     // use setTimeout workaround to delay checkmark the menu
  188.     // when onmenucomplete is ready then use it instead of oncreate
  189.     // see bug 78290 for the detail
  190.     UpdateCurrentCharset();
  191.     setTimeout("UpdateCurrentCharset()", 0);
  192.     UpdateCharsetDetector();
  193.     setTimeout("UpdateCharsetDetector()", 0);
  194. }
  195.  
  196. function CreateMenu(node)
  197. {
  198.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  199.   observerService.notifyObservers(null, "charsetmenu-selected", node);
  200. }
  201.  
  202. function UpdateMailMenus(event)
  203. {
  204.     // use setTimeout workaround to delay checkmark the menu
  205.     // when onmenucomplete is ready then use it instead of oncreate
  206.     // see bug 78290 for the detail
  207.     UpdateCurrentMailCharset();
  208.     setTimeout("UpdateCurrentMailCharset()", 0);
  209.     UpdateCharsetDetector();
  210.     setTimeout("UpdateCharsetDetector()", 0);
  211. }
  212.  
  213. var gCharsetMenu = Components.classes['@mozilla.org/rdf/datasource;1?name=charset-menu'].getService().QueryInterface(Components.interfaces.nsICurrentCharsetListener);
  214. var gLastBrowserCharset = null;
  215.  
  216. function charsetLoadListener (event)
  217. {
  218.     var charset = window._content.document.characterSet;
  219.  
  220.     if (charset.length > 0 && (charset != gLastBrowserCharset)) {
  221.         gCharsetMenu.SetCurrentCharset(charset);
  222.         gPrevCharset = gLastBrowserCharset;
  223.         gLastBrowserCharset = charset;
  224.     }
  225. }
  226.  
  227.  
  228. function composercharsetLoadListener (event)
  229. {
  230.     var charset = window._content.document.characterSet;
  231.  
  232.  
  233.     if (charset.length > 0 ) {
  234.        gCharsetMenu.SetCurrentComposerCharset(charset);
  235.     }
  236.  }
  237.  
  238. function SetForcedEditorCharset(charset)
  239. {
  240.     if (charset.length > 0 ) {
  241.        gCharsetMenu.SetCurrentComposerCharset(charset);
  242.     }
  243.     EditorSetDocumentCharacterSet(charset);
  244. }
  245.  
  246.  
  247. var gLastMailCharset = null;
  248.  
  249. function mailCharsetLoadListener (event)
  250. {
  251.     if (msgWindow) {
  252.         var charset = msgWindow.mailCharacterSet;
  253.         if (charset.length > 0 && (charset != gLastMailCharset)) {
  254.             gCharsetMenu.SetCurrentMailCharset(charset);
  255.             gLastMailCharset = charset;
  256.             dump("mailCharsetLoadListener: " + charset + " \n");
  257.         }
  258.     }
  259. }
  260.  
  261. var wintype = document.firstChild.getAttribute('windowtype');
  262. if (window && (wintype == "navigator:browser"))
  263. {
  264.     var contentArea = window.document.getElementById("appcontent");
  265.     if (contentArea)
  266.         contentArea.addEventListener("load", charsetLoadListener, true);
  267. }
  268. else
  269. {
  270.     var arrayOfStrings = wintype.split(":");
  271.     if (window && arrayOfStrings[0] == "mail") 
  272.     {
  273.         var messageContent = window.document.getElementById("messagepane");
  274.         if (messageContent)
  275.             messageContent.addEventListener("load", mailCharsetLoadListener, true);
  276.     }
  277.     else
  278.     if (window && arrayOfStrings[0] == "composer") 
  279.     {
  280.         contentArea = window.document.getElementById("appcontent");
  281.         if (contentArea)
  282.             contentArea.addEventListener("load", composercharsetLoadListener, true);
  283.     }
  284.  
  285. }
  286.