home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / komunikace / kmeleon / K-Meleon1.1.3en-US.exe / chrome / embed.jar / kmprefs / content / pref.js < prev    next >
Text File  |  2007-04-23  |  12KB  |  375 lines

  1. const PREF_NONE   = 0x00;
  2. const PREF_STRING = 0x20;
  3. const PREF_INT    = 0x40;
  4. const PREF_BOOL   = 0x80;
  5.  
  6. const nsISupportsString = Components.interfaces.nsISupportsString;
  7.  
  8. var pref = Components.classes["@mozilla.org/preferences-service;1"]
  9.              .getService(Components.interfaces.nsIPrefBranch);
  10. var sstr = Components.classes["@mozilla.org/supports-string;1"]
  11.                      .createInstance(nsISupportsString);
  12.  
  13.  
  14. function getPrefValue(prefID) {
  15.     try {
  16.         switch(pref.getPrefType(prefID)) {
  17.             case PREF_NONE    : return null;
  18.             case PREF_BOOL    : return (pref.getBoolPref(prefID))?"true":"false";
  19.             case PREF_INT    : return pref.getIntPref(prefID).toString(10);
  20.             case PREF_STRING: return pref.getComplexValue(prefID,nsISupportsString).data;
  21. //            case PREF_STRING: return pref.getCharPref(prefID);
  22.             default         : return "[unknown PrefType: " + pref.getPrefType(prefID) + "]";
  23.         }
  24.     } catch(e) {
  25.         return null;
  26.     }
  27. }
  28. function restoreDefault(prefID) {
  29.     try {
  30.         pref.clearUserPref(prefID);
  31.     } catch(e) {}
  32. }
  33. function setIntPref(prefID,prefVal) {
  34.     if(prefVal) {
  35.         var re = new RegExp("^[0-9]+$");
  36.         if(re.test(prefVal))
  37.             pref.setIntPref(prefID,parseInt(prefVal));
  38.         else {
  39.             alert(document.getElementById("pref_bundle").getString("positive_integer_expected"));
  40.             document.getElementById(prefID).value = getPrefValue(prefID);
  41.             document.getElementById(prefID).focus();
  42.         }
  43.     } else
  44.         restoreDefault(prefID);
  45. }
  46. function setCharPref(prefID,prefVal) {
  47.     sstr.data = prefVal;
  48.     pref.setComplexValue(prefID,nsISupportsString,sstr);
  49. //    pref.setCharPref(prefID,prefVal);
  50. }
  51. function initCheckbox(prefID) {
  52.     var box = document.getElementById(prefID);
  53.  
  54.     try {
  55.         box.checked = (box.getAttribute("inverse")=="true") ? !pref.getBoolPref(prefID) : pref.getBoolPref(prefID);
  56.     } catch(e) {
  57.         box.disabled = true;
  58.     }
  59. }
  60. function toggleCheckbox(prefID) {
  61.     var val;
  62.  
  63.     try {
  64.         val = !pref.getBoolPref(prefID);
  65.     } catch(e) {
  66.         var box = document.getElementById(prefID);
  67.         val = (box.getAttribute("inverse")=="true") ? !box.checked : box.checked;
  68.     }
  69.     pref.setBoolPref(prefID,val);
  70. }
  71. function initRadiogroup(prefID) {
  72.     var grp = document.getElementById(prefID),
  73.         val = getPrefValue(prefID);
  74.  
  75.     if(val==null)
  76.         try {
  77.             for(grp.selectedIndex=0;grp.selectedItem.value;grp.selectedIndex++)
  78.                 grp.selectedItem.disabled = true;
  79.         } catch(e) {}
  80.     else
  81.         try {
  82.             for(grp.selectedIndex=0;grp.selectedItem.value!=val;grp.selectedIndex++);
  83.         } catch(e) {}
  84. }
  85. function toggleRadiogroup(prefID) {
  86.     var grp = document.getElementById(prefID),
  87.         val = grp.value;
  88.  
  89.     try {
  90.         switch(pref.getPrefType(prefID)) {
  91.             case PREF_BOOL    : pref.setBoolPref(prefID,(val=="true")?true:false); break;
  92.             case PREF_INT    : val = parseInt(val); if(val!=NaN) pref.setIntPref(prefID,val); break;
  93.             case PREF_STRING: pref.setCharPref(prefID,val); break;
  94.         }
  95.     } catch(e) {}
  96. }
  97. function initTextbox(prefID,emptyStr) {
  98.     var box = document.getElementById(prefID),
  99.         val = getPrefValue(prefID);
  100.  
  101.     box.removeAttribute("onfocus");
  102.     box.removeAttribute("onblur");
  103.     if(val==null) {
  104.         val = document.getElementById("pref_bundle").getString("pref_not_set");
  105.         if(!box.readonly) {
  106.             box.setAttribute("onfocus","this.value=''");
  107.             box.setAttribute("onblur","initTextbox('"+prefID+"',"+((emptyStr)?("'"+emptyStr+"'"):"false")+")");
  108.         }
  109.         box.value = (emptyStr) ? emptyStr : val;
  110.         return;
  111.     }
  112.     if(!val && emptyStr) {
  113.         if(!box.readonly) {
  114.             box.setAttribute("onfocus","this.value=''");
  115.             box.setAttribute("onblur","initTextbox('"+prefID+"','"+emptyStr+"')");
  116.         }
  117.         box.value = emptyStr;
  118.     } else
  119.         box.value = val;
  120. }
  121. function initMenulist(prefName,prefRoot,invalidNote) {
  122.     var lst = document.getElementById(prefName),
  123.         val = getPrefValue(prefRoot+prefName),
  124.         sel = null;
  125.  
  126.     lst.selectedIndex = 0;
  127.     lst.value = val;
  128.     try {
  129.         sel = lst.selectedItem.value;
  130.     } catch(e) {}
  131.     if(lst.value != sel) {
  132.         lst.firstChild.appendChild(document.createElement("menuseparator"));
  133.         lst.firstChild.appendChild(document.createElement("menuitem"));
  134.         lst.firstChild.lastChild.setAttribute("value",val);
  135.         lst.firstChild.lastChild.setAttribute("label",(val)?((invalidNote)?val+" "+invalidNote:val):document.getElementById("pref_bundle").getString("pref_not_set"));
  136.         lst.selectedItem = lst.firstChild.lastChild;
  137.     }
  138. }
  139. /* --- String Conversion ---------------------------------------------------------------------------------------- */
  140. const kmPrefsTemp = "kmprefs.temp";
  141.  
  142. function makeUTF8(string) {
  143.     setCharPref(kmPrefsTemp,string);
  144.     var ret = pref.getCharPref(kmPrefsTemp);
  145.     restoreDefault(kmPrefsTemp);
  146.     return ret;
  147. }
  148. /* --- Windows Registry Functions (Mozilla 1.8) ----------------------------------------------------------------- */
  149. const HKCR = 0x80000000;
  150. const HKCU = 0x80000001;
  151. const HKLM = 0x80000002;
  152. const HKU  = 0x80000003;
  153. const HKCC = 0x80000005;
  154.  
  155. function getKey(keyRoot,keyPath,keyName) {
  156.     var keyValue = null;
  157.  
  158.     try{
  159.         var reg = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey);
  160.         reg.open(keyRoot,keyPath,reg.ACCESS_READ);
  161. /*        switch(reg.getValueType(keyName)) {
  162. // getValueType() is not available
  163.             case reg.TYPE_STRING: keyValue = reg.readStringValue(keyName); break;
  164.             case reg.TYPE_BINARY: keyValue = reg.readBinaryValue(keyName); break;
  165.             case reg.TYPE_INT   : keyValue = reg.readIntValue(keyName); break;
  166.             case reg.TYPE_INT64 : keyValue = reg.readInt64Value(keyName); break;
  167.         }
  168. */        keyValue = reg.readStringValue(keyName);
  169.         reg.close();
  170.     } catch(e) {
  171.     }
  172.     return keyValue;
  173. }
  174. /* --- File & Folder Functions ---------------------------------------------------------------------------------- */
  175. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  176. const nsILocalFile  = Components.interfaces.nsILocalFile;
  177. const nsIFile       = Components.interfaces.nsIFile;
  178. const nsIProperties = Components.interfaces.nsIProperties;
  179.  
  180. const MODE_RDONLY   = 0x01;
  181. const MODE_WRONLY   = 0x02;
  182. const MODE_RDWR     = 0x04;
  183. const MODE_CREATE   = 0x08;
  184. const MODE_APPEND   = 0x10;
  185. const MODE_TRUNCATE = 0x20;
  186. const MODE_SYNC     = 0x40;
  187. const MODE_EXCL     = 0x80;
  188.  
  189. function getFolder(prefID) {
  190.     var path;
  191.     try {
  192.             path = pref.getComplexValue(prefID,nsILocalFile);
  193.     } catch(e) {
  194.         try {
  195.             path = Components.classes["@mozilla.org/file/directory_service;1"]
  196.                      .getService(nsIProperties)
  197.                      .get(prefID,nsIFile);
  198.         } catch(e) {
  199.             path = false;
  200.         }
  201.     }
  202.     return ((path) ? path.path : false);
  203. }
  204. function getFile(filePath,fileName) {
  205.     var file = Components.classes["@mozilla.org/file/local;1"]
  206.                  .createInstance(nsILocalFile);
  207.  
  208.     file.initWithPath(filePath);
  209.     if(fileName) file.append(fileName);
  210.     return file;
  211. }
  212. function getFileContents(file) {
  213.     var fileContents = "";
  214.  
  215.     if(file.exists()) {
  216.         var fis = Components.classes["@mozilla.org/network/file-input-stream;1"]
  217.                     .createInstance(Components.interfaces.nsIFileInputStream);
  218.         var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
  219.                     .createInstance(Components.interfaces.nsIScriptableInputStream);
  220.  
  221.         fis.init(file,MODE_RDONLY,0,fis.CLOSE_ON_EOF);
  222.         sis.init(fis);
  223.         while(sis.available() > 0) fileContents += sis.read(sis.available());
  224.         sis.close();
  225.         fis.close();
  226.     }
  227.     return fileContents;
  228. }
  229. function getFileContentsUTF8(file) {
  230.     var fileContents = "";
  231.  
  232.     if(file.exists()) {
  233.         var fis = Components.classes["@mozilla.org/network/file-input-stream;1"]
  234.                     .createInstance(Components.interfaces.nsIFileInputStream);
  235.         var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
  236.                     .createInstance(Components.interfaces.nsIScriptableInputStream);
  237.  
  238.         fis.init(file,MODE_RDONLY,0,fis.CLOSE_ON_EOF);
  239.         sis.init(fis);
  240.         while(sis.available() > 0) fileContents += makeUTF8(sis.read(sis.available()));
  241.         sis.close();
  242.         fis.close();
  243.     }
  244.     return fileContents;
  245. }
  246. function setFileContents(file,fileContents) {
  247.     var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  248.                 .createInstance(Components.interfaces.nsIFileOutputStream);
  249.  
  250.     fos.init(file,MODE_WRONLY|MODE_CREATE|MODE_TRUNCATE,0644,0);
  251.     var ret = fos.write(fileContents,fileContents.length);
  252.     fos.close();
  253.     return ret;
  254. }
  255. /* --- User StyleSheet Functions -------------------------------------------------------------------------------- */
  256. var UserPrefs = "user.js";
  257. var UserStyle = "userContent.css";
  258. var testInverse = false;
  259. var testResult  = true;
  260.  
  261. function getIntUserPref(prefID,emptyStr) {
  262.     var re = new RegExp("user_pref[\\s]*\\([\\s]*."+prefID+".[\\s]*,[\\s]*([\\d]+)[\\s]*\\)[\\s]*;","m");
  263.     try {
  264.         var ret = getFileContents(getFile(getFolder("ProfD"),UserPrefs)).match(re)[1];
  265.     } catch(e) {
  266.         var ret = emptyStr;
  267.     }
  268.     return ret;
  269. }
  270. function testMultiline(aString,aRegExpString) {
  271.     var re = new RegExp(aRegExpString,"m");
  272.  
  273.     return re.test(aString);
  274. }
  275. function addToUserStyle(aString) {
  276.     var fileContents = getFileContents(getFile(getFolder("UChrm"),UserStyle));
  277.  
  278.     if(aString.indexOf("@import") > -1)
  279.         // insert @import rules on top of others
  280.         fileContents = aString + "\r\n" + fileContents;
  281.     else
  282.         fileContents += "\r\n" + aString;
  283.  
  284.     return (setFileContents(getFile(getFolder("UChrm"),UserStyle),fileContents) == fileContents.length);
  285. }
  286. function addToUserPrefs(aString) {
  287.     var fileContents = getFileContents(getFile(getFolder("ProfD"),UserPrefs));
  288.  
  289.     fileContents = aString + "\r\n" + fileContents;
  290.  
  291.     return (setFileContents(getFile(getFolder("ProfD"),UserPrefs),fileContents) == fileContents.length);
  292. }
  293. function removeFromFile(file,aRegExpString) {
  294.     var fileContents = getFileContents(file);
  295.     if(testInverse)
  296.         var re = new RegExp("\r\n"+aRegExpString);
  297.     else {
  298.         var re = new RegExp(aRegExpString+"\r\n");
  299.         testResult = true;
  300.     }
  301.  
  302.     if(re.test(fileContents)) {
  303.         fileContents = fileContents.replace(re,"");
  304.         testResult &= (setFileContents(file,fileContents) == fileContents.length);
  305.     } else
  306.         testResult &= true;
  307.     if(testInverse) {
  308.         testInverse = false;
  309.         return testResult;
  310.     } else {
  311.         testInverse = true;
  312.         return removeFromFile(file,aRegExpString);
  313.     }
  314. }
  315. /* --- K-Meleon-specific Functions ------------------------------------------------------------------------------ */
  316. var kPlugin = {
  317.  
  318. absent    : function(pluginName) {
  319.     return !(getFile(getFolder("KAPlugins"),pluginName+".dll").exists()||getFile(getFolder("KUPlugins"),pluginName+".dll").exists());
  320. },
  321. load    : function(pluginName) {
  322.     if(this.absent(pluginName)) return false;
  323.     try {
  324.         var val = pref.getBoolPref("kmeleon.plugins."+pluginName+".load");
  325.     } catch(e) {
  326.         return false;
  327.     }
  328.     return val;
  329. },
  330. fullName: function(pluginName) {
  331.     try {
  332.         var val = document.getElementById("kplugin_bundle").getString(pluginName);
  333.     } catch(e) {
  334.         return document.getElementById("kplugin_bundle").getString("unknown_kplugin");
  335.     }
  336.     return val;
  337. }
  338.  
  339. };
  340.  
  341. var kLayers = {
  342.  
  343. load : null,
  344. only : null,
  345. init : function() {
  346.     this.load = kPlugin.load("layers");
  347.     try {
  348.         this.only = this.load && pref.getBoolPref("kmeleon.plugins.layers.catchOpen");
  349.     } catch(e) {
  350.         this.only = false;
  351.     }
  352. }
  353.  
  354. };
  355.  
  356. var kMacrosModule = {
  357.  
  358. load: function(moduleName) {
  359.     if( getFile(getFolder("KUserSettings"),      "macros.cfg").exists()) return false;
  360.     if(!getFile(getFolder("CurProcD")+"\\macros\\","main.kmm").exists()) return false;
  361.     if(moduleName == "main") return true;
  362.     return ((getFile(getFolder("CurProcD")+"\\macros\\",moduleName+".kmm").exists()||getFile(getFolder("KUserSettings")+"\\macros\\",moduleName+".kmm").exists())&&(getPrefValue("kmeleon.plugins.macros.modules."+moduleName+".load") != "false"));
  363. }
  364.  
  365. };
  366. /* --- Helper Functions ----------------------------------------------------------------------------------------- */
  367. var interactiveElements = new Array("button","checkbox","menulist","radio","textbox");
  368.  
  369. function disableAll(disable) {
  370.     for(var j=0;j<interactiveElements.length;j++)
  371.         for(var k=0,e=document.getElementsByTagName(interactiveElements[j]);k<e.length;k++)
  372.             e[k].disabled=disable;
  373.     for(var j=0,t=document.getElementsByTagName("tab");j<t.length;j++)
  374.         t[j].setAttribute("disabled",disable);
  375. }