home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 120 / cdrom120.iso / internet / sage / sage.xpi / chrome / sage.jar / content / commonfunc.js < prev    next >
Encoding:
Text File  |  2005-05-12  |  11.4 KB  |  385 lines

  1.  
  2. var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
  3.  
  4. function logMessage(message) {
  5.     aConsoleService.logStringMessage("Sage: " + message);
  6. }
  7.  
  8. function dateFormat(date, twelveHourClock, format) {
  9.     function padout(number) { return (number < 10) ? '0' + number : number; }
  10.  
  11.     if(!format) {
  12.         format = 0;
  13.     }
  14.  
  15.     var dayOfMonth = date.getDate();
  16.  
  17.     var day;
  18.     switch (date.getDay()) {
  19.         case 0: day = strRes.getString("date_sunday_short"); break
  20.         case 1: day = strRes.getString("date_monday_short"); break
  21.         case 2: day = strRes.getString("date_tuesday_short"); break
  22.         case 3: day = strRes.getString("date_wednesday_short"); break
  23.         case 4: day = strRes.getString("date_thursday_short"); break
  24.         case 5: day = strRes.getString("date_friday_short"); break
  25.         case 6: day = strRes.getString("date_saturday_short"); break
  26.     }
  27.  
  28.     var month, monthNum;
  29.     monthNum = date.getMonth() + 1;
  30.     switch (monthNum) {
  31.         case 1: month = strRes.getString("date_january_short"); break
  32.         case 2: month = strRes.getString("date_february_short"); break
  33.         case 3: month = strRes.getString("date_march_short"); break
  34.         case 4: month = strRes.getString("date_april_short"); break
  35.         case 5: month = strRes.getString("date_may_short"); break
  36.         case 6: month = strRes.getString("date_june_short"); break
  37.         case 7: month = strRes.getString("date_july_short"); break
  38.         case 8: month = strRes.getString("date_august_short"); break
  39.         case 9: month = strRes.getString("date_september_short"); break
  40.         case 10: month = strRes.getString("date_october_short"); break
  41.         case 11: month = strRes.getString("date_november_short"); break
  42.         case 12: month = strRes.getString("date_december_short"); break
  43.     }
  44.  
  45.     var year = date.getYear() + 1900;
  46.  
  47.     var date_str;
  48.     switch(format) {
  49.         case 0:
  50.             date_str = day + ", " + month + " " + dayOfMonth + ", " + year;
  51.             break
  52.         case 1:
  53.             date_str = monthNum + "/" + dayOfMonth + "/" + year;
  54.             break
  55.     }
  56.  
  57.     var hours = date.getHours(), minutes = padout(date.getMinutes()), seconds = padout(date.getSeconds());
  58.     var adjhours, time_str;
  59.     if(twelveHourClock) {
  60.         adjhours = (hours == 0) ? 12 : ((hours < 13) ? hours : hours-12);
  61.         time_str = adjhours + ":" + minutes + ((hours < 12) ? " AM" : " PM");
  62.     } else {
  63.         time_str = hours + ":" + minutes;
  64.     }
  65.     return date_str + " " + time_str;
  66. }
  67.  
  68.  
  69.  
  70. var CommonFunc = {
  71.  
  72.     VERSION: Array(1,3,3),
  73.     USER_AGENT: "Mozilla/5.0 (Sage)",
  74.  
  75.     FEED_FOLDER_ID: "sage.folder_id",
  76.     LAST_VERSION: "sage.last_version",
  77.     USER_CSS_ENABLE: "sage.user_css.enable",
  78.     USER_CSS_PATH: "sage.user_css.path",
  79.     ALLOW_ENCODED_CONTENT: "sage.allow_encoded_content",
  80.     AUTO_FEED_TITLE: "sage.auto_feed_title",
  81.     RENDER_FEEDS: "sage.render_feeds",
  82.     TWELVE_HOUR_CLOCK: "sage.twelve_hour_clock",
  83.     FEED_ITEM_ORDER: "sage.feed_item_order",
  84.     FEED_DISCOVERY_MODE: "sage.feed_discovery_mode",
  85.  
  86.  
  87. // ++++++++++ ++++++++++ Bookmark RDF ++++++++++ ++++++++++
  88.  
  89.     BM_LAST_VISIT:         "http://home.netscape.com/WEB-rdf#LastVisitDate",
  90.     BM_LAST_MODIFIED:    "http://home.netscape.com/WEB-rdf#LastModifiedDate",
  91.     BM_DESCRIPTION:        "http://home.netscape.com/NC-rdf#Description",
  92.     BM_NAME:                    "http://home.netscape.com/NC-rdf#Name",
  93.     BM_URL:                        "http://home.netscape.com/NC-rdf#URL",
  94.     BM_FEEDURL:                "http://home.netscape.com/NC-rdf#FeedURL",
  95.  
  96.     RDF_TYPE:                    "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
  97.  
  98.     STATUS_UPDATE: "updated",
  99.     STATUS_NO_UPDATE: "no-updated",
  100.     STATUS_UNKNOWN: "unknown",
  101.     STATUS_ERROR: "error",
  102.     STATUS_NO_CHECK: "no-check",
  103.  
  104.     setBMDSProperty: function(aInput, aArcURI, aNewValue) {
  105.         var changed = false;
  106.         var aOldValue = this.getBMDSTargetByURL(aInput, aArcURI);
  107.         if(typeof(aInput) == "string") {
  108.             aInput = RDF.GetResource(aInput);
  109.         }
  110.         if(typeof(aArcURI) == "string") {
  111.             aArcURI = RDF.GetResource(aArcURI);
  112.         }
  113.  
  114.         if(typeof(aNewValue) == "string") {
  115.             aNewValue = RDF.GetLiteral(aNewValue);
  116.         } else if(typeof(aNewValue) == "number") {
  117.             aNewValue = RDF.GetIntLiteral(aNewValue);
  118.         }
  119.  
  120.         if(aArcURI && (aOldValue || aNewValue) && aOldValue != aNewValue) {
  121.             if(aOldValue && !aNewValue) {
  122.                 BMDS.Unassert(aInput, aArcURI, aOldValue);
  123.             } else if(!aOldValue && aNewValue) {
  124.                 BMDS.Assert(aInput, aArcURI, aNewValue, true);
  125.             } else /* if(aOldValue && aNewValue) */ {
  126.                 BMDS.Change(aInput, aArcURI, aOldValue, aNewValue);
  127.             }
  128.             changed = true;
  129.         }
  130.         return changed;
  131.     },
  132.  
  133.     getBMDSProperty: function(aInput, aArcURI) {
  134.         if(typeof(aInput) == "string") {
  135.             aInput = RDF.GetResource(aInput);
  136.         }
  137.         if(typeof(aArcURI) == "string") {
  138.             aArcURI = RDF.GetResource(aArcURI);
  139.         }
  140.         return this.getBMDSTargetByURL(aInput, aArcURI).Value;
  141.     },
  142.     
  143.     getBMDSTargetByURL: function(aInput, aArcURI) {
  144.         if(typeof(aArcURI) == "string") {
  145.             aArcURI = RDF.GetResource(aArcURI);
  146.         }
  147.         var node = BMDS.GetTarget(aInput, aArcURI, true);
  148.         try {
  149.             return node.QueryInterface(kRDFRSCIID);
  150.         } catch(e) {
  151.             try {
  152.                 return node.QueryInterface(Components.interfaces.nsIRDFDate);
  153.             } catch(e) {
  154.                 return node? node.QueryInterface(kRDFLITIID) : RDF.GetLiteral("");
  155.             }
  156.         }
  157.     },
  158.  
  159.     getBMDSCChildren: function(aResource) {
  160.         if(typeof(aResource) == "string") {
  161.             aResource = RDF.GetResource(aResource);
  162.         }
  163.  
  164.         var rdfContainer = Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer);
  165.         rdfContainer.Init(BMDS, aResource);
  166.         var containerChildren = rdfContainer.GetElements();
  167.  
  168.         var resultArray = new Array();
  169.         while(containerChildren.hasMoreElements()) {
  170.             var res = containerChildren.getNext().QueryInterface(kRDFRSCIID);
  171.             if(RDFCU.IsContainer(BMDS, res)) {
  172.                 if(BMDS.HasAssertion(res, RDF.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), RDF.GetResource("http://home.netscape.com/NC-rdf#Livemark"), true)) {
  173.                     resultArray.push(res);
  174.                 } else {
  175.                     resultArray = resultArray.concat(this.getBMDSCChildren(res));
  176.                 }
  177.             } else {
  178.                 resultArray.push(res);
  179.             }
  180.         }
  181.         return resultArray;
  182.     },
  183.  
  184.  
  185.  
  186. // ++++++++++ ++++++++++ CharCode ++++++++++ ++++++++++
  187.  
  188.     convertCharCodeFrom: function(aString, aCharCode) {
  189.         var UConvID = "@mozilla.org/intl/scriptableunicodeconverter";
  190.         var UConvIF  = Components.interfaces.nsIScriptableUnicodeConverter;
  191.         var UConv = Components.classes[UConvID].getService(UConvIF);
  192.  
  193.         var tmpString = "";
  194.         try {
  195.             UConv.charset = aCharCode;
  196.             tmpString = UConv.ConvertFromUnicode(aString);
  197.         } catch(e) {
  198.             tmpString = null;
  199.         }
  200.         return tmpString;
  201.     },
  202.  
  203.  
  204.     getInnerText: function(aNode) {
  205.         if(!aNode.hasChildNodes()) return "";
  206.     
  207.         var resultArray = new Array();
  208.         var walker = aNode.ownerDocument.createTreeWalker(aNode, NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_TEXT, null, false);
  209.         while(walker.nextNode()) {
  210.             resultArray.push(walker.currentNode.nodeValue);
  211.         }
  212.         return resultArray.join('').replace(/^\s+|\s+$/g, "");
  213.     },
  214.  
  215.  
  216.     loadText: function(aURI) {
  217.         var    URI = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
  218.         URI.spec = aURI;
  219.     
  220.         var IOService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
  221.         var channel = IOService.newChannelFromURI(URI);
  222.         var stream    = channel.open();
  223.         var scriptableStream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream);
  224.         scriptableStream.init(stream);
  225.  
  226.         var fileContents = scriptableStream.read(scriptableStream.available());
  227.  
  228.         scriptableStream.close();
  229.         stream.close();
  230.  
  231.         return fileContents;
  232.     },
  233.  
  234.  
  235. // ++++++++++ ++++++++++ preferences ++++++++++ ++++++++++
  236.  
  237.     setPrefValue : function(aPrefString, aPrefType, aValue) {
  238.         var nsISupportsString = Components.interfaces.nsISupportsString;
  239.         var xpPref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPrefBranch);
  240.  
  241.         var prefType = xpPref.getPrefType(aPrefString);
  242.  
  243.         try {
  244.             switch(aPrefType) {
  245.                 case "wstr":
  246.                     var string = Components.classes['@mozilla.org/supports-string;1'].createInstance(nsISupportsString);
  247.                     string.data = aValue;
  248.                     return xpPref.setComplexValue(aPrefString, nsISupportsString, string);
  249.                     break;
  250.                 case "str":
  251.                     return xpPref.setCharPref(aPrefString, aValue);
  252.                     break;
  253.                 case "int":
  254.                     aValue = parseInt(aValue);
  255.                     return xpPref.setIntPref(aPrefString, aValue);
  256.                     break;
  257.                 case "bool":
  258.                 default:
  259.                     if(typeof(aValue) == "string") {
  260.                         aValue = (aValue == "true");
  261.                     }
  262.                     return xpPref.setBoolPref(aPrefString, aValue);
  263.                     break;
  264.             }
  265.         } catch(e) {
  266.         }
  267.         return null;
  268.     },
  269.  
  270.     getPrefValue : function(aPrefString, aPrefType, aDefault) {
  271.         var nsISupportsString = Components.interfaces.nsISupportsString;
  272.         var xpPref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPrefBranch);
  273.  
  274.         if(xpPref.getPrefType(aPrefString) == xpPref.PREF_INVALID) {
  275.             return aDefault;
  276.         }
  277.         try {
  278.             switch (aPrefType) {
  279.                 case "wstr":
  280.                     return xpPref.getComplexValue(aPrefString, nsISupportsString).data;
  281.                     break;
  282.                 case "str":
  283.                     return xpPref.getCharPref(aPrefString).toString();
  284.                     break;
  285.                 case "int":
  286.                     return xpPref.getIntPref(aPrefString);
  287.                     break;
  288.                 case "bool":
  289.                 default:
  290.                     return xpPref.getBoolPref(aPrefString);
  291.                     break;
  292.             }
  293.         } catch(e) {
  294.         }
  295.         return aDefault;
  296.     },
  297.  
  298.     clearPref: function(aPrefString) {
  299.         var xpPref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPrefBranch);
  300.  
  301.         try {
  302.             xpPref.clearUserPref(aPrefString);
  303.             return true;
  304.         } catch(e) {
  305.             return false;
  306.         }
  307.     },
  308.  
  309.         // remove all preferences
  310.     removePrefs: function() {
  311.         var xpPref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);
  312.  
  313.         var prefBranch = xpPref.getBranch("sage.");
  314.  
  315.         try {
  316.             prefBranch.deleteBranch("");
  317.             return true;
  318.         } catch(e) {
  319.             return false;
  320.         }
  321.     },
  322.  
  323.     addPrefListener: function(aPrefString, aFunc) {
  324.         var prefObserver;
  325.         try {
  326.             prefObserver = {
  327.                 domain: aPrefString,
  328.                 observe: aFunc
  329.             };
  330.  
  331.             var pbi = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal);
  332.             pbi.addObserver(prefObserver.domain, prefObserver, false);
  333.         } catch(e) {
  334.             alert(e);
  335.             prefObserver = null;
  336.         }
  337.  
  338.         return prefObserver;
  339.     },
  340.  
  341.     removePrefListener: function(aObserver) {
  342.         var prefObserver;
  343.         try {
  344.             var pbi = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal);
  345.             pbi.removeObserver(aObserver.domain, aObserver);
  346.         } catch(e) {
  347.             alert(e)
  348.         }
  349.     },
  350.  
  351.     // takes a version string, returns an integer triple containing (major version, minor version, patch level)
  352.     versionStrDecode: function(versionStr) {
  353.         var regexp = /([0-9]*)\.([0-9]*)\.([0-9]*)/;
  354.         var result = regexp.exec(versionStr);
  355.         return Array(parseInt(result[1]), parseInt(result[2]), parseInt(result[3]));
  356.     },
  357.  
  358.     // takes a version triple, returns an integer
  359.     versionToInt: function(versionTriple) {
  360.         return versionTriple[0]*100 + versionTriple[1]*10 + versionTriple[2];
  361.     },
  362.  
  363.     // takes two version triples, returns 1 if the first is more recent, 0 otherwise
  364.     versionCompare: function(versionA, versionB) {
  365.         if(this.versionToInt(versionA) > this.versionToInt(versionB)) {
  366.             return 1;
  367.         } else {
  368.             return 0;
  369.         }
  370.     },
  371.  
  372.     // takes a version triple, returns a formatted version string
  373.     versionString: function(version, pretty) {
  374.         var formatted;
  375.         if(pretty) {
  376.             formatted = version[0].toString() + '.' + version[1].toString();
  377.             formatted += version[2] != 0 ? "." + version[2] : ""
  378.         } else {
  379.             formatted = version[0].toString() + '.' + version[1].toString() + '.' + version[2].toString();
  380.         }
  381.         return formatted;
  382.     }
  383.  
  384. }
  385.