home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / 01_03.iso / software / ghostzilla_hit / files / ghostzilla-1.0-plus-install.exe / chrome / toolkit.jar / content / global / charsetOverlay.js < prev    next >
Encoding:
Text File  |  2002-04-09  |  8.5 KB  |  277 lines

  1. function MultiplexHandler(event)
  2. {
  3.     var node = event.target;
  4.     var name = node.getAttribute('name');
  5.  
  6.     if (name == 'detectorGroup') {
  7.         SetForcedDetector();
  8.         SelectDetector(event, true);
  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-wstring;1"]
  78.                              .createInstance(Components.interfaces.nsISupportsWString);
  79.  
  80.         str.data = prefvalue;
  81.         pref.setComplexValue("intl.charset.detector",
  82.                              Components.interfaces.nsISupportsWString, 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-wstring;1"]
  104.                              .createInstance(Components.interfaces.nsISupportsWString);
  105.  
  106.         str.data = prefvalue;
  107.         pref.setComplexValue("intl.charset.detector",
  108.                              Components.interfaces.nsISupportsWString, str);
  109.         editorShell.LoadUrl(editorShell.editorDocument.location);    
  110.     }
  111.     catch (ex) {
  112.         dump("Failed to set the intl.charset.detector preference.\n");
  113.     }
  114. }
  115.  
  116. function SetForcedDetector()
  117. {
  118.     BrowserSetForcedDetector();
  119. }
  120.  
  121. function SetForcedCharset(charset)
  122. {
  123.     BrowserSetForcedCharacterSet(charset);
  124. }
  125.  
  126. function UpdateCurrentCharset()
  127. {
  128.     var menuitem = null;
  129.  
  130.     // exctract the charset from DOM
  131.     var wnd = document.commandDispatcher.focusedWindow;
  132.     if ((window == wnd) || (wnd == null)) wnd = window._content;
  133.     menuitem = document.getElementById('charset.' + wnd.document.characterSet);
  134.  
  135.     if (menuitem) {
  136.         menuitem.setAttribute('checked', 'true');
  137.     }
  138. }
  139.  
  140. function UpdateCurrentMailCharset()
  141. {
  142.     var charset = msgWindow.mailCharacterSet;
  143.     dump("Update current mail charset: " + charset + " \n");
  144.  
  145.     var menuitem = document.getElementById('charset.' + charset);
  146.  
  147.     if (menuitem) {
  148.         menuitem.setAttribute('checked', 'true');
  149.     }
  150. }
  151.  
  152. function UpdateCharsetDetector()
  153. {
  154.     var prefvalue;
  155.  
  156.     try {
  157.         var pref = Components.classes["@mozilla.org/preferences-service;1"]
  158.                              .getService(Components.interfaces.nsIPrefBranch);
  159.         prefvalue = pref.getComplexValue("intl.charset.detector",
  160.                                          Components.interfaces.nsIPrefLocalizedString).data;
  161.     }
  162.     catch (ex) {
  163.         prefvalue = "";
  164.     }
  165.  
  166.     if (prefvalue == "") prefvalue = "off";
  167.     dump("intl.charset.detector = "+ prefvalue + "\n");
  168.  
  169.     prefvalue = 'chardet.' + prefvalue;
  170.     var menuitem = document.getElementById(prefvalue);
  171.  
  172.     if (menuitem) {
  173.         menuitem.setAttribute('checked', 'true');
  174.     }
  175. }
  176.  
  177. function UpdateMenus(event)
  178. {
  179.     // use setTimeout workaround to delay checkmark the menu
  180.     // when onmenucomplete is ready then use it instead of oncreate
  181.     // see bug 78290 for the detail
  182.     UpdateCurrentCharset();
  183.     setTimeout("UpdateCurrentCharset()", 0);
  184.     UpdateCharsetDetector();
  185.     setTimeout("UpdateCharsetDetector()", 0);
  186. }
  187.  
  188. function CreateMenu(node)
  189. {
  190.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  191.   observerService.notifyObservers(null, "charsetmenu-selected", node);
  192. }
  193.  
  194. function UpdateMailMenus(event)
  195. {
  196.     // use setTimeout workaround to delay checkmark the menu
  197.     // when onmenucomplete is ready then use it instead of oncreate
  198.     // see bug 78290 for the detail
  199.     UpdateCurrentMailCharset();
  200.     setTimeout("UpdateCurrentMailCharset()", 0);
  201.     UpdateCharsetDetector();
  202.     setTimeout("UpdateCharsetDetector()", 0);
  203. }
  204.  
  205. var gCharsetMenu = Components.classes['@mozilla.org/rdf/datasource;1?name=charset-menu'].getService().QueryInterface(Components.interfaces.nsICurrentCharsetListener);
  206. var gLastBrowserCharset = null;
  207.  
  208. function charsetLoadListener (event)
  209. {
  210.     var charset = window._content.document.characterSet;
  211.  
  212.     if (charset.length > 0 && (charset != gLastBrowserCharset)) {
  213.         gCharsetMenu.SetCurrentCharset(charset);
  214.         gLastBrowserCharset = charset;
  215.     }
  216. }
  217.  
  218.  
  219. function composercharsetLoadListener (event)
  220. {
  221.     var charset = window._content.document.characterSet;
  222.  
  223.  
  224.     if (charset.length > 0 ) {
  225.        gCharsetMenu.SetCurrentComposerCharset(charset);
  226.     }
  227.  }
  228.  
  229. function SetForcedEditorCharset(charset)
  230. {
  231.     if (charset.length > 0 ) {
  232.        gCharsetMenu.SetCurrentComposerCharset(charset);
  233.     }
  234.     EditorSetDocumentCharacterSet(charset);
  235. }
  236.  
  237.  
  238. var gLastMailCharset = null;
  239.  
  240. function mailCharsetLoadListener (event)
  241. {
  242.     if (msgWindow) {
  243.         var charset = msgWindow.mailCharacterSet;
  244.         if (charset.length > 0 && (charset != gLastMailCharset)) {
  245.             gCharsetMenu.SetCurrentMailCharset(charset);
  246.             gLastMailCharset = charset;
  247.             dump("mailCharsetLoadListener: " + charset + " \n");
  248.         }
  249.     }
  250. }
  251.  
  252. var wintype = document.firstChild.getAttribute('windowtype');
  253. if (window && (wintype == "navigator:browser"))
  254. {
  255.     var contentArea = window.document.getElementById("appcontent");
  256.     if (contentArea)
  257.         contentArea.addEventListener("load", charsetLoadListener, true);
  258. }
  259. else
  260. {
  261.     var arrayOfStrings = wintype.split(":");
  262.     if (window && arrayOfStrings[0] == "mail") 
  263.     {
  264.         var messageContent = window.document.getElementById("messagepane");
  265.         if (messageContent)
  266.             messageContent.addEventListener("load", mailCharsetLoadListener, true);
  267.     }
  268.     else
  269.     if (window && arrayOfStrings[0] == "composer") 
  270.     {
  271.         contentArea = window.document.getElementById("appcontent");
  272.         if (contentArea)
  273.             contentArea.addEventListener("load", composercharsetLoadListener, true);
  274.     }
  275.  
  276. }
  277.