home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 August / PCpro_2005_08.ISO / files / firefox / ScrapBook.xpi / chrome / scrapbook.jar / content / common.js < prev    next >
Encoding:
Text File  |  2005-06-04  |  11.4 KB  |  421 lines

  1. /**************************************************
  2. // commmon.js
  3. // Implementation file for ScrapBook
  4. // 
  5. // Description: common class, functions and services
  6. // Author: Gomita
  7. // Contributors: 
  8. // 
  9. // Version: 
  10. // License: see LICENSE.txt
  11. **************************************************/
  12.  
  13.  
  14. const NS_SCRAPBOOK = "http://amb.vis.ne.jp/mozilla/scrapbook-rdf#";
  15.  
  16. function ScrapBookItem(aID)
  17. {
  18.     this.id      = aID;
  19.     this.type    = "";
  20.     this.title   = "";
  21.     this.chars   = "";
  22.     this.icon    = "";
  23.     this.source  = "";
  24.     this.comment = "";
  25. }
  26.  
  27.  
  28.  
  29. var SBservice = {
  30.     RDF    : Components.classes['@mozilla.org/rdf/rdf-service;1'].getService(Components.interfaces.nsIRDFService),
  31.     RDFC   : Components.classes['@mozilla.org/rdf/container;1'].getService(Components.interfaces.nsIRDFContainer),
  32.     RDFCU  : Components.classes['@mozilla.org/rdf/container-utils;1'].getService(Components.interfaces.nsIRDFContainerUtils),
  33.     DIR    : Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties),
  34.     IO     : Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService),
  35.     UC     : Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].getService(Components.interfaces.nsIScriptableUnicodeConverter),
  36.     WM     : Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator),
  37.     PB     : Components.classes['@mozilla.org/preferences;1'].getService(Components.interfaces.nsIPrefBranch),
  38. };
  39.  
  40.  
  41.  
  42. var SBcommon = {
  43.  
  44.     getScrapBookDir : function()
  45.     {
  46.         try {
  47.             var isDefault = SBservice.PB.getBoolPref("scrapbook.data.default");
  48.             var myDataDir = SBservice.PB.getComplexValue("scrapbook.data.path", Components.interfaces.nsIPrefLocalizedString).data;
  49.             myDataDir = this.convertPathToFile(myDataDir);
  50.         } catch(ex) {
  51.             isDefault = true; 
  52.         }
  53.         if ( isDefault )
  54.         {
  55.             myDataDir = SBservice.DIR.get("ProfD", Components.interfaces.nsIFile);
  56.             myDataDir.append("ScrapBook");
  57.         }
  58.         if ( !myDataDir.exists() )
  59.         {
  60.             myDataDir.create(myDataDir.DIRECTORY_TYPE, 0700);
  61.         }
  62.         return myDataDir;
  63.     },
  64.  
  65.  
  66.     getContentDir : function(aID)
  67.     {
  68.         var myDir = this.getScrapBookDir().clone();
  69.         myDir.append("data");
  70.         if ( !myDir.exists() ) myDir.create(myDir.DIRECTORY_TYPE, 0700);
  71.         myDir.append(aID);
  72.         if ( !myDir.exists() ) myDir.create(myDir.DIRECTORY_TYPE, 0700);
  73.         return myDir;
  74.     },
  75.  
  76.  
  77.     removeDirSafety : function(aDir)
  78.     {
  79.         if ( !aDir.leafName.match(/^\d{14}$/) ) return;
  80.         var aFileList = aDir.directoryEntries;
  81.         while ( aFileList.hasMoreElements() )
  82.         {
  83.             var aFile = aFileList.getNext().QueryInterface(Components.interfaces.nsIFile);
  84.             if ( aFile.isFile() ) aFile.remove(false);
  85.         }
  86.         if ( aDir.isDirectory() ) aDir.remove(false);
  87.     },
  88.  
  89.  
  90.     loadURL : function(aURL, tabbed)
  91.     {
  92.         var topWindow = SBservice.WM.getMostRecentWindow("navigator:browser");
  93.         var myBrowser = topWindow.document.getElementById("content");
  94.         if ( tabbed ) {
  95.             myBrowser.selectedTab = myBrowser.addTab(aURL);
  96.         } else {
  97.             myBrowser.loadURI(aURL);
  98.         }
  99.     },
  100.  
  101.  
  102.     getTimeStamp : function(advance)
  103.     {
  104.         var dd = new Date;
  105.         if ( advance ) dd.setTime(dd.getTime() + 1000 * advance);
  106.         var y = dd.getFullYear();
  107.         var m = dd.getMonth() + 1; if ( m < 10 ) m = "0" + m;
  108.         var d = dd.getDate();      if ( d < 10 ) d = "0" + d;
  109.         var h = dd.getHours();     if ( h < 10 ) h = "0" + h;
  110.         var i = dd.getMinutes();   if ( i < 10 ) i = "0" + i;
  111.         var s = dd.getSeconds();   if ( s < 10 ) s = "0" + s;
  112.         return y.toString() + m.toString() + d.toString() + h.toString() + i.toString() + s.toString();
  113.     },
  114.  
  115.  
  116.     leftZeroPad3 : function(num)
  117.     {
  118.         if ( num < 10 ) {
  119.             return "00" + num;
  120.         } else if ( num < 100 ) {
  121.             return "0" + num;
  122.         } else {
  123.             return num;
  124.         }
  125.     },
  126.  
  127.  
  128.     getRootHref : function(aURLString)
  129.     {
  130.         var aURL = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURL);
  131.         aURL.spec = aURLString;
  132.         return aURL.scheme + "://" + aURL.host + "/";
  133.     },
  134.  
  135.  
  136.     getBaseHref : function(sURI)
  137.     {
  138.         var pos, Base;
  139.         Base = ( (pos = sURI.indexOf("?")) != -1 ) ? sURI.substring(0, pos) : sURI;
  140.         Base = ( (pos = Base.indexOf("#")) != -1 ) ? Base.substring(0, pos) : Base;
  141.         Base = ( (pos = Base.lastIndexOf("/")) != -1 ) ? Base.substring(0, ++pos) : Base;
  142.         return Base;
  143.     },
  144.  
  145.  
  146.     getFileName : function(aURI)
  147.     {
  148.         var pos, Name;
  149.         Name = ( (pos = aURI.indexOf("?")) != -1 ) ? aURI.substring(0, pos) : aURI;
  150.         Name = ( (pos = Name.indexOf("#")) != -1 ) ? Name.substring(0, pos) : Name;
  151.         Name = ( (pos = Name.lastIndexOf("/")) != -1 ) ? Name.substring(++pos) : Name;
  152.         return Name;
  153.     },
  154.  
  155.  
  156.     splitFileName : function(aFileName)
  157.     {
  158.         var pos = aFileName.lastIndexOf(".");
  159.         var ret = [];
  160.         if ( pos != -1 ) {
  161.             ret[0] = aFileName.substring(0, pos);
  162.             ret[1] = aFileName.substring(pos + 1, aFileName.length);
  163.         } else {
  164.             ret[0] = aFileName;
  165.             ret[1] = "";
  166.         }
  167.         return ret;
  168.     },
  169.  
  170.  
  171.     validateFileName : function(aFileName)
  172.     {
  173.         aFileName = aFileName.replace(/[\"]+/g, "'");
  174.         aFileName = aFileName.replace(/[\*\:\?]+/g, "-");
  175.         aFileName = aFileName.replace(/[\<]+/g, "(");
  176.         aFileName = aFileName.replace(/[\>]+/g, ")");
  177.         aFileName = aFileName.replace(/[\\\/\|]+/g, "_");
  178.         aFileName = aFileName.replace(/[\s]+/g, "_");
  179.         aFileName = aFileName.replace(/[%]+/g, "@");
  180.         return aFileName;
  181.     },
  182.  
  183.  
  184.     resolveURL : function(aBaseURL, aRelURL)
  185.     {
  186.         try {
  187.             var aBaseURLObj = this.convertURLToObject(aBaseURL);
  188.             return aBaseURLObj.resolve(aRelURL);
  189.         } catch(ex) {
  190.             alert("ScrapBook ERROR: Failed to resolve URL.\n" + aBaseURL + "\n" + aRelURL);
  191.         }
  192.     },
  193.  
  194.  
  195.  
  196.     readFile : function(aFile)
  197.     {
  198.         try {
  199.             var istream = Components.classes['@mozilla.org/network/file-input-stream;1'].createInstance(Components.interfaces.nsIFileInputStream);
  200.             istream.init(aFile, 1, 0, false);
  201.             var sstream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream);
  202.             sstream.init(istream);
  203.             var aContent = sstream.read(sstream.available());
  204.             sstream.close();
  205.             istream.close();
  206.             return aContent;
  207.         }
  208.         catch(ex)
  209.         {
  210.             dump("ScrapBook ERROR: Failed to read file.\n" + aFile.path + "\n");
  211.             return false;
  212.         }
  213.     },
  214.  
  215.  
  216.     writeFile : function(aFile, aContent, aChars)
  217.     {
  218.         if ( aFile.exists() ) aFile.remove(false);
  219.         try {
  220.             aFile.create(aFile.NORMAL_FILE_TYPE, 0666);
  221.             SBservice.UC.charset = aChars;
  222.             aContent = SBservice.UC.ConvertFromUnicode(aContent);
  223.             var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
  224.             ostream.init(aFile, 2, 0x200, false);
  225.             ostream.write(aContent, aContent.length);
  226.             ostream.close();
  227.         }
  228.         catch(ex)
  229.         {
  230.             alert("ScrapBook ERROR: Failed to write file: " + aFile.leafName);
  231.         }
  232.     },
  233.  
  234.  
  235.     writeIndexDat : function(aSBitem)
  236.     {
  237.         var myDAT = "";
  238.         var myDATFile = this.getContentDir(aSBitem.id).clone();
  239.         myDATFile.append("index.dat");
  240.         for ( var prop in aSBitem )
  241.         {
  242.             myDAT += prop + "\t" + aSBitem[prop] + "\n";
  243.         }
  244.         this.writeFile(myDATFile, myDAT, "UTF-8");
  245.     },
  246.  
  247.  
  248.     saveTemplateFile : function(aURISpec, aFile)
  249.     {
  250.         if ( aFile.exists() ) return;
  251.         var myURI = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURL);
  252.         myURI.spec = aURISpec;
  253.         var WBP = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].createInstance(Components.interfaces.nsIWebBrowserPersist);
  254.         WBP.saveURI(myURI, null, null, null, null, aFile);
  255.     },
  256.  
  257.  
  258.     convertStringToUTF8 : function(aString)
  259.     {
  260.         if ( !aString ) return "";
  261.         try {
  262.             SBservice.UC.charset = "UTF-8";
  263.             aString = SBservice.UC.ConvertToUnicode(aString);
  264.         } catch(ex) {
  265.             alert("ScrapBook ERROR: Failure in ConvertToUnicode.");
  266.         }
  267.         return aString;
  268.     },
  269.  
  270.  
  271.  
  272.     convertPathToFile : function(aPath)
  273.     {
  274.         var aFile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  275.         aFile.initWithPath(aPath);
  276.         return aFile;
  277.     },
  278.  
  279.  
  280.     convertFilePathToURL : function(aFilePath)
  281.     {
  282.         var tmpFile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  283.         tmpFile.initWithPath(aFilePath);
  284.         return SBservice.IO.newFileURI(tmpFile).spec;
  285.     },
  286.  
  287.  
  288.     convertURLToObject : function(aURLString)
  289.     {
  290.         var aURL = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURI);
  291.         aURL.spec = aURLString; 
  292.         return aURL;
  293.     },
  294.  
  295.  
  296.     convertURLToFile : function(aURLString)
  297.     {
  298.         var aURL = this.convertURLToObject(aURLString);
  299.         if ( !aURL.schemeIs("file") ) return; 
  300.         try {
  301.             var fileHandler = SBservice.IO.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
  302.             return fileHandler.getFileFromURLSpec(aURLString); 
  303.         } catch(ex) {
  304.             dump("*** ScrapBook ERROR: Failed to getFileFromURLSpec: " + aURLString + "\n");
  305.         }
  306.     },
  307.  
  308.  
  309.  
  310.     launchDirectory : function(aDir)
  311.     {
  312.         if ( this.getBoolPref("scrapbook.filer.default", true) )
  313.         {
  314.             try {
  315.                 aDir = aDir.QueryInterface(Components.interfaces.nsILocalFile);
  316.                 aDir.launch();
  317.             } catch(ex) {
  318.                 var aDirPath = SBservice.IO.newFileURI(aDir).spec;
  319.                 this.loadURL(aDirPath, false);
  320.             }
  321.         }
  322.         else
  323.         {
  324.             try {
  325.                 var filerPath = SBservice.PB.getComplexValue("scrapbook.filer.path", Components.interfaces.nsIPrefLocalizedString).data;
  326.                 this.execProgram(filerPath, [aDir.path]);
  327.             } catch(ex) {
  328.                 alert(ex);
  329.             }
  330.         }
  331.     },
  332.  
  333.  
  334.     execProgram : function(aExecFilePath, args)
  335.     {
  336.         var execfile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  337.         var process  = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
  338.         try {
  339.             execfile.initWithPath(aExecFilePath);
  340.             if ( !execfile.exists() )
  341.             {
  342.                 alert("ScrapBook ERROR: Following file is not exists.\n" + aExecFilePath);
  343.                 return;
  344.             }
  345.             process.init(execfile);
  346.             process.run(false, args, args.length);
  347.         }
  348.         catch (ex)
  349.         {
  350.             alert("ScrapBook ERROR: Following file is not executable.\n" + aExecFilePath);
  351.         }
  352.     },
  353.  
  354.  
  355.     getFocusedWindow : function()
  356.     {
  357.         var myWindow = document.commandDispatcher.focusedWindow;
  358.         if ( !myWindow || myWindow == window ) myWindow = window._content;
  359.         return myWindow;
  360.     },
  361.  
  362.  
  363.     getURL : function(aID, aType)
  364.     {
  365.         if ( aType == "note") {
  366.             return "chrome://scrapbook/content/note.xul?id=" + aID;
  367.         } else {
  368.             return SBservice.IO.newFileURI(this.getContentDir(aID)).spec + "index.html";
  369.         }
  370.     },
  371.  
  372.  
  373.     getDefaultIcon : function(type)
  374.     {
  375.         switch ( type )
  376.         {
  377.             case "folder" : return "chrome://scrapbook/skin/treefolder.png"; break;
  378.             case "note"   : return "chrome://scrapbook/skin/treenote.png";   break;
  379.             default       : return "chrome://scrapbook/skin/treeitem.png";   break;
  380.         }
  381.     },
  382.  
  383.  
  384.     setBoolPref: function (aName, aValue)
  385.     {
  386.         try {
  387.             SBservice.PB.setBoolPref(aName, aValue);
  388.         } catch(ex) {
  389.         }
  390.     },
  391.  
  392.  
  393.     getBoolPref : function(aName, aDefVal)
  394.     {
  395.         try {
  396.             return SBservice.PB.getBoolPref(aName);
  397.         } catch(ex) {
  398.             return aDefVal;
  399.         }
  400.     },
  401.  
  402.  
  403. };
  404.  
  405.  
  406.  
  407. function dumpObj(aObj)
  408. {
  409.     dump("\n\n\n----------------[DUMP_OBJECT]----------------\n\n\n");
  410.     for ( var i in aObj )
  411.     {
  412.         try {
  413.             dump("." + i + " -> " + aObj[i] + "\n");
  414.         } catch(ex) {
  415.             dump("XXXXXXXXXX ERROR XXXXXXXXXX\n" + ex + "\n");
  416.         }
  417.     }
  418. }
  419.  
  420.  
  421.