home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 March / PCpro_2005_03.ISO / files / firefox / chromedit-0.1.1.1-fx_mz_tb.xpi / chrome / chromedit.jar / content / chromedit.js next >
Encoding:
JavaScript  |  2004-09-17  |  7.6 KB  |  240 lines

  1. // globals
  2.  
  3. var chromedit_prefs;
  4. // main string bundle
  5. var gCeBundle;
  6.  
  7. const emid="2cf89d59-8610-4053-b207-85c6a128f65d";
  8.  
  9. function startUp()
  10. {
  11.     chromedit_prefs = Components.classes["@mozilla.org/preferences-service;1"].
  12.                       getService(Components.interfaces.nsIPrefService).
  13.                       getBranch("extensions.chromedit.");
  14.     // Set up the string bundle
  15.     gCeBundle = document.getElementById("bundle_ce");
  16.     loadIt('userChrome.css','editChrome', 'path-chrome');
  17.     loadIt('userContent.css','editContent', 'path-content');
  18.     loadIt('user.js','editJs', 'path-js');
  19.     loadIt('prefs.js','editprefs', 'path-prefs');
  20.     checktabbox();
  21.  
  22.     // first time in, move windows icons
  23.     var firstLoad;
  24.     try {
  25.       firstLoad = chromedit_prefs.getBoolPref("firsttimein");
  26.     } catch(ex) {
  27.       firstLoad = true;
  28.       chromedit_prefs.setBoolPref("firsttimein", false);
  29.     }
  30.     if (firstLoad)
  31.       copyIcons();
  32. }
  33.  
  34. function loadMe()
  35. {
  36.     alert(gCeBundle.getString("welcomeMsg"));
  37. }
  38.  
  39. function getTextareaText(tNodeID)
  40. {
  41.     var tat = document.getElementById(tNodeID).value;
  42.     return tat;
  43. }
  44.  
  45. function setTextareaText(thetext,tNodeID)
  46. {
  47.     document.getElementById(tNodeID).value= thetext;
  48. }
  49.  
  50. function getChromeDir(fileName)
  51. {
  52.     var p;
  53.     var NSIFILE = Components.interfaces.nsIFile;
  54.     var dirLocator = Components.classes["@mozilla.org/file/directory_service;1"]
  55.             .getService(Components.interfaces.nsIProperties);
  56.     var p = dirLocator.get("UChrm", NSIFILE).path;
  57.     if ( ! /css$/i.test(fileName))
  58.         p = dirLocator.get("ProfD", NSIFILE).path;
  59.     return p;
  60. }
  61.  
  62. function getExtDefaultsPath()
  63. {
  64.     var p;
  65.     var NSIFILE = Components.interfaces.nsIFile;
  66.     var dirLocator = Components.classes["@mozilla.org/file/directory_service;1"]
  67.             .getService(Components.interfaces.nsIProperties);
  68.     var p = dirLocator.get("ProfD", NSIFILE).path;
  69.     var dirLocal = Components.classes["@mozilla.org/file/local;1"]
  70.                              .createInstance(Components.interfaces.nsILocalFile);
  71.     dirLocal.initWithPath(p);
  72.     dirLocal.append("extensions");
  73.     dirLocal.append("{"+emid+"}");
  74.     dirLocal.append("defaults");
  75.     if (dirLocal.exists() && dirLocal.isDirectory())  {  // Fx and Tb
  76.       return dirLocal.path;
  77.     }
  78.     else  { // seamonkey
  79.       p = dirLocator.get("ProfDefNoLoc", NSIFILE).path;
  80.       dirLocal.initWithPath(p);
  81.       dirLocal.append("chrome");
  82.       if (dirLocal.exists() && dirLocal.isDirectory())
  83.         return dirLocal.path;
  84.     }
  85.     return null;
  86. }
  87.  
  88. function getIconsDefaultPath()
  89. {
  90.     var p;
  91.     var NSIFILE = Components.interfaces.nsIFile;
  92.     var dirLocator = Components.classes["@mozilla.org/file/directory_service;1"]
  93.             .getService(Components.interfaces.nsIProperties);
  94.     var p = dirLocator.get("AChrom", NSIFILE).path;
  95.     var dirLocal = Components.classes["@mozilla.org/file/local;1"]
  96.                              .createInstance(Components.interfaces.nsILocalFile);
  97.     dirLocal.initWithPath(p);
  98.     dirLocal.append("icons");
  99.     dirLocal.append("default");
  100.     return dirLocal.path;
  101. }
  102.  
  103. function loadIt(fileName,targetNodeID,label)
  104. {
  105.     var chromeDir = getChromeDir(fileName);
  106.     var fName = fileName;
  107.  
  108.     var fileLocal = Components.classes["@mozilla.org/file/local;1"]
  109.                              .createInstance(Components.interfaces.nsILocalFile);
  110.     fileLocal.initWithPath(chromeDir);
  111.     fileLocal.append(fName);
  112.  
  113.     document.getElementById(label).value = fileLocal.path;
  114.  
  115.     var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
  116.         .createInstance( Components.interfaces.nsIFileInputStream );
  117.     var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
  118.       .createInstance( Components.interfaces.nsIScriptableInputStream );
  119.  
  120.     if (fileLocal.exists()) {
  121.         is.init( fileLocal,0x01, 00004, null);
  122.         sis.init( is );
  123.         var stuff = sis.read( sis.available() );
  124.         setTextareaText(stuff,targetNodeID);
  125.     }
  126.     else if (/css$/i.test(fName) ) { // && ! f.exists()
  127.  
  128.         fName = fName.replace('.css', '-example.css');
  129.  
  130.         fileLocal.initWithPath(chromeDir);
  131.         fileLocal.append(fName);
  132.  
  133.         if (fileLocal.exists()) {
  134.             is.init( fileLocal,0x01, 00004, null);
  135.             sis.init( is );
  136.             var stuff = sis.read( sis.available() );
  137.             setTextareaText(stuff,targetNodeID);
  138.         }
  139.         else  {
  140.           var extDefaultsDir = getExtDefaultsPath();
  141.           fileLocal.initWithPath(extDefaultsDir);
  142.           fileLocal.append(fName);
  143.           if (fileLocal.exists()) {
  144.               is.init( fileLocal,0x01, 00004, null);
  145.               sis.init( is );
  146.               var stuff = sis.read( sis.available() );
  147.               setTextareaText(stuff,targetNodeID);
  148.           }
  149.         }
  150.  
  151.     }
  152.     else {setTextareaText(gCeBundle.getString("noUserJS"), targetNodeID)}
  153.  
  154. }
  155.  
  156. function saveIfChanged()
  157. {
  158.  
  159.     if ( ! document.getElementById('save-chrome').hasAttribute('disabled') )
  160.         saveIt('userChrome.css','editChrome');
  161.  
  162.     if ( ! document.getElementById('save-content').hasAttribute('disabled') )
  163.         saveIt('userContent.css','editContent');
  164.  
  165.     if ( ! document.getElementById('save-js').hasAttribute('disabled') )
  166.         saveIt('user.js','editJs');
  167.  
  168. }
  169.  
  170. function saveIt(fileName,targetNodeID,button) 
  171. {
  172.     var data = getTextareaText(targetNodeID);
  173.  
  174.     var chromeDir = getChromeDir(fileName);
  175.     var fName = fileName;
  176.  
  177.     try {
  178.         var fileLocal = Components.classes["@mozilla.org/file/local;1"]
  179.                                  .createInstance(Components.interfaces.nsILocalFile);
  180.         fileLocal.initWithPath(chromeDir);
  181.         fileLocal.append(fName);
  182.         var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
  183.             .createInstance( Components.interfaces.nsIFileOutputStream );
  184.         outputStream.init( fileLocal, 0x04 | 0x08 | 0x20, 420, 0 );
  185.         var result = outputStream.write( data, data.length );
  186.         outputStream.close();
  187.         document.getElementById(button).setAttribute("disabled", "true");
  188.     }
  189.     catch (ex) {
  190.         
  191.         alert(gCeBundle.getString("notSaved"));
  192.     }
  193. }
  194.  
  195. function checktabbox() {
  196.   var flibble;
  197.   try {
  198.     flibble = chromedit_prefs.getBoolPref("openintab");
  199.   } catch(ex) {
  200.     flibble = false;
  201.   }
  202.   document.getElementById('chromeditab').checked = flibble;
  203. }
  204.  
  205. function updateChromeditPref(pref)
  206. {
  207.   if ( document.getElementById(pref).checked == true )
  208.   {
  209.     dump('chromedit :: use Tab\n');
  210.     chromedit_prefs.setBoolPref("openintab", true);
  211.   }
  212.   else
  213.   {
  214.     dump('chromedit :: open Window\n');
  215.     chromedit_prefs.setBoolPref("openintab", false);
  216.   }
  217. }
  218.  
  219. function copyIcons()
  220. {
  221.   var iconFiles = ["ce-main.ico", "ce-main.xpm"];
  222.   var iconsDefaultsDir = getIconsDefaultPath();
  223.   var extDefaultsDir = getExtDefaultsPath();
  224.  
  225.   var iconFile = Components.classes["@mozilla.org/file/local;1"]
  226.                            .createInstance(Components.interfaces.nsILocalFile);
  227.   for (i=0;i<iconFiles.length;i++)  {
  228.     iconFile.initWithPath(iconsDefaultsDir);
  229.     iconFile.append(iconFiles[i]);
  230.     if (iconFile && !iconFile.exists())  {
  231.       // move it
  232.       var theIconFile = Components.classes["@mozilla.org/file/local;1"]
  233.                          .createInstance(Components.interfaces.nsILocalFile);
  234.       theIconFile.initWithPath(extDefaultsDir);
  235.       theIconFile.append(iconFiles[i]);
  236.       theIconFile.copyTo(iconFile.parent, iconFile.leafName);
  237.     }
  238.   }
  239. }
  240.