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

  1. /**************************************************
  2. // property.js
  3. // Implementation file for property.xul
  4. // 
  5. // Description: JavaScript for property.xul
  6. // Author: Gomita
  7. // Contributors: 
  8. // 
  9. // Version: 
  10. // License: see LICENSE.txt
  11. **************************************************/
  12.  
  13.  
  14.  
  15. var SBstring;
  16.  
  17. var gID;
  18. var gRes;
  19. var gSBitem;
  20. var gTypeFolder = false;
  21. var gTypeNote   = false;
  22. var gTypeFile   = false;
  23.  
  24.  
  25.  
  26. function SB_initProp()
  27. {
  28.     SBstring = document.getElementById("ScrapBookString");
  29.  
  30.     try {
  31.         gID = window.arguments[0];
  32.     } catch(ex) {
  33.         document.location.href.match(/\?id\=(.*)$/);
  34.         gID = RegExp.$1;
  35.     }
  36.     if ( !gID ) return;
  37.  
  38.     SBRDF.init();
  39.     gSBitem = new ScrapBookItem();
  40.     gRes = SBservice.RDF.GetResource("urn:scrapbook:item" + gID);
  41.     for ( var prop in gSBitem )
  42.     {
  43.         gSBitem[prop] = SBRDF.getProperty(prop, gRes);
  44.     }
  45.  
  46.     gID.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/);
  47.     try {
  48.         const SDF = Components.classes['@mozilla.org/intl/scriptabledateformat;1'].getService(Components.interfaces.nsIScriptableDateFormat);
  49.         var myDateTime = SDF.FormatDateTime("", SDF.dateFormatLong, SDF.timeFormatSeconds, RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);
  50.     } catch(ex) {
  51.         var myDateTime = [RegExp.$1, RegExp.$2, RegExp.$3].join("/") + " " + [RegExp.$4, RegExp.$5, RegExp.$6].join(":");
  52.     }
  53.  
  54.     document.getElementById("ScrapBookPropTitle").value   = gSBitem.title;
  55.     document.getElementById("ScrapBookPropSource").value  = gSBitem.source;
  56.     document.getElementById("ScrapBookPropDate").value    = myDateTime;
  57.     document.getElementById("ScrapBookPropChars").value   = gSBitem.chars;
  58.     document.getElementById("ScrapBookPropComment").value = gSBitem.comment.replace(/ __BR__ /g, "\n");
  59.     document.getElementById("ScrapBookPropIcon").src      = gSBitem.icon ? gSBitem.icon : SBcommon.getDefaultIcon(gSBitem.type);
  60.     document.getElementById("ScrapBookPropIcon").setAttribute("tooltiptext", gSBitem.icon);
  61.     document.getElementById("ScrapBookPropMark").setAttribute("checked", gSBitem.type == "marked");
  62.     document.getElementById("ScrapBookPropertyDialog").setAttribute("title", gSBitem.title);
  63.     document.title = gSBitem.title;
  64.  
  65.     if ( SBservice.RDFCU.IsContainer(SBRDF.data, gRes) ) gSBitem.type = "folder";
  66.  
  67.     switch ( gSBitem.type )
  68.     {
  69.         case "folder" :    
  70.             gTypeFolder = true;
  71.             document.getElementById("ScrapBookPropIconRow").setAttribute("hidden", true);
  72.             document.getElementById("ScrapBookPropSizeRow").setAttribute("hidden", true);
  73.             break;
  74.         case "file" : 
  75.         case "image" : 
  76.             gTypeFile = true;
  77.             break;
  78.         case "note" : 
  79.             gTypeNote = true;
  80.             document.getElementById("ScrapBookPropTitle").removeAttribute("editable");
  81.             break;
  82.     }
  83.     document.getElementById("ScrapBookPropSourceRow").setAttribute("hidden", gTypeFolder || gTypeNote);
  84.     document.getElementById("ScrapBookPropCharsRow").setAttribute("hidden",  gTypeFolder || gTypeFile);
  85.     document.getElementById("ScrapBookPropIconMenu").setAttribute("hidden",  gTypeNote   || gTypeFile);
  86.     document.getElementById("ScrapBookPropMark").setAttribute("hidden", gTypeFolder || gTypeNote || gTypeFile);
  87.  
  88.     SB_changeCommentTab(gSBitem.comment);
  89.  
  90.     setTimeout(SB_showFileSize, 0);
  91. }
  92.  
  93.  
  94. function SB_showFileSize()
  95. {
  96.     var mySizeText = ( gSBitem.type == "folder" ) ? "" : SB_formatFileSize( SB_getTotalFileSize(gID), "FILES_COUNT" );
  97.     document.getElementById("ScrapBookPropSize").value = mySizeText;
  98. }
  99.  
  100.  
  101. function SB_acceptProp()
  102. {
  103.     var newVals = {
  104.         title   : document.getElementById("ScrapBookPropTitle").value,
  105.         source  : document.getElementById("ScrapBookPropSource").value,
  106.         comment : document.getElementById("ScrapBookPropComment").value.replace(/\r|\n/g, " __BR__ "),
  107.         type    : gSBitem.type,
  108.         icon    : SB_getIconURL()
  109.     };
  110.     if ( !document.getElementById("ScrapBookPropMark").hidden )
  111.     {
  112.         newVals.type = document.getElementById("ScrapBookPropMark").checked ? "marked" : "";
  113.     }
  114.     var change = false;
  115.     var props = ["title","source","comment","type","icon"];
  116.     for ( var i = 0; i < props.length; i++ )
  117.     {
  118.         if ( gSBitem[props[i]] != newVals[props[i]] ) { gSBitem[props[i]] = newVals[props[i]]; change = true; }
  119.     }
  120.     if ( change )
  121.     {
  122.         for ( var prop in gSBitem ) 
  123.         {
  124.             SBRDF.updateItem(gRes, prop, gSBitem[prop]);
  125.         }
  126.         if ( !gTypeFolder ) SBcommon.writeIndexDat(gSBitem);
  127.         SBRDF.flush();
  128.     }
  129.     if ( window.arguments[1] ) window.arguments[1].accept = true;
  130. }
  131.  
  132.  
  133. function SB_cancelProp()
  134. {
  135.     if ( window.arguments[1] ) window.arguments[1].accept = false;
  136. }
  137.  
  138.  
  139.  
  140. function SB_fillHTMLTitle(popupXUL)
  141. {
  142.     if ( gTypeFolder || gTypeNote || gTypeFile ) return;
  143.     if ( !popupXUL.hasChildNodes() ) popupXUL.parentNode.appendItem( SB_getHTMLTitle(gID, gSBitem.chars) );
  144. }
  145.  
  146.  
  147. function SB_setDefaultIcon()
  148. {
  149.     document.getElementById("ScrapBookPropIcon").src = SBcommon.getDefaultIcon(gSBitem.type);
  150. }
  151.  
  152.  
  153. function SB_enterIconURL()
  154. {
  155.     const PS = Components.classes['@mozilla.org/embedcomp/prompt-service;1'].getService(Components.interfaces.nsIPromptService);
  156.     var ret = { value : SB_getIconURL() };
  157.     PS.prompt(window, SBstring.getString("ENTER_ICON_URL"), SBstring.getString("ENTER_ICON_URL"), ret, null, {});
  158.     var newIcon = ret.value;
  159.     if ( newIcon == null ) return;
  160.     if ( !newIcon ) newIcon = SBcommon.getDefaultIcon(gSBitem.type);
  161.     document.getElementById("ScrapBookPropIcon").src = newIcon;
  162. }
  163.  
  164.  
  165. function SB_getIconURL()
  166. {
  167.     var iconURL = document.getElementById("ScrapBookPropIcon").src;
  168.     return ( iconURL.substring(0,24) == "chrome://scrapbook/skin/" ) ? "" : iconURL;
  169. }
  170.  
  171.  
  172. function SB_pickupIcon(flag)
  173. {
  174.     if ( flag == "FAVICON" )
  175.     {
  176.         var strName = "SELECT_FAVICON";
  177.         var dispDir = SBcommon.getContentDir(gSBitem.id);
  178.     }
  179.     else
  180.     {
  181.         var strName = "SELECT_CUSTOM";
  182.         var dispDir = SBcommon.getScrapBookDir().clone();
  183.         dispDir.append("icon");
  184.         if ( !dispDir.exists() ) dispDir.create(dispDir.DIRECTORY_TYPE, 0700);
  185.     }
  186.     var FP = Components.classes['@mozilla.org/filepicker;1'].createInstance(Components.interfaces.nsIFilePicker);
  187.     FP.init(window, SBstring.getString(strName), FP.modeOpen);
  188.     FP.displayDirectory = dispDir;
  189.     FP.appendFilters(FP.filterImages);
  190.     var answer = FP.show();
  191.     if ( answer == FP.returnOK )
  192.     {
  193.         document.getElementById("ScrapBookPropIcon").src = SBcommon.convertFilePathToURL(FP.file.path);
  194.     }
  195. }
  196.  
  197.  
  198. function SB_changeCommentTab(comment)
  199. {
  200.     var commentTab = document.getElementById("ScrapBookPropCommentTab");
  201.     if ( comment ) {
  202.         commentTab.setAttribute("image", "chrome://scrapbook/skin/edit_comment.png");
  203.     } else {
  204.         commentTab.removeAttribute("image");
  205.     }
  206. }
  207.  
  208.  
  209.  
  210. function SB_getHTMLTitle(aID, aChars)
  211. {
  212.     var myFile  = SBcommon.getContentDir(aID);
  213.     myFile.append("index.html");
  214.     var myContent = SBcommon.readFile(myFile);
  215.     try {
  216.         SBservice.UC.charset = aChars;
  217.         myContent = SBservice.UC.ConvertToUnicode(myContent);
  218.         var isMatch = myContent.match(/<title>([^<]+?)<\/title>/im);
  219.         if ( isMatch ) return RegExp.$1;
  220.     } catch(ex) {
  221.         return "";
  222.     }
  223. }
  224.  
  225.  
  226. function SB_getTotalFileSize(aID)
  227. {
  228.     var totalSize = 0;
  229.     var totalFile = 0;
  230.     var aDir = SBcommon.getContentDir(aID);
  231.     if ( !aDir.isDirectory() ) return [0, 0];
  232.     var aFileList = aDir.directoryEntries;
  233.     while ( aFileList.hasMoreElements() )
  234.     {
  235.         var aFile = aFileList.getNext().QueryInterface(Components.interfaces.nsIFile);
  236.         totalSize += aFile.fileSize;
  237.         totalFile++;
  238.     }
  239.     return [totalSize, totalFile];
  240. }
  241.  
  242.  
  243. function SB_formatFileSize(aSizeAndCount, aBundleName)
  244. {
  245.     var aSize  = aSizeAndCount[0];
  246.     var aCount = aSizeAndCount[1];
  247.     var sCount = (aCount && aBundleName) ? SBstring.getFormattedString(aBundleName, [aCount]) : "";
  248.     var ret;
  249.     if ( aSize > 1000 * 1000 ) {
  250.         return SB_divideBy100( Math.round( aSize / 1024 / 1024 * 100 ) ) + " MB  " + sCount;
  251.     } else {
  252.         return Math.round( aSize / 1024 ) + " KB  " + sCount;
  253.     }
  254. }
  255.  
  256.  
  257. function SB_divideBy100(aInt)
  258. {
  259.     if ( aInt % 100 == 0 ) {
  260.         return aInt / 100 + ".00";
  261.     } else if ( aInt % 10 == 0 ) {
  262.         return aInt / 100 + "0";
  263.     } else {
  264.         return aInt / 100;
  265.     }
  266. }
  267.  
  268.  
  269.