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

  1. var CreateHTML = {
  2.     HTML_SOURCE: CommonFunc.loadText("chrome://sage/content/res/template-html.txt"),
  3.     ITEM_SOURCE: CommonFunc.loadText("chrome://sage/content/res/template-item.txt"),
  4.     DEFAULT_CSS: "chrome://sage/content/res/sage.css",
  5.  
  6.     _tabbed: false,
  7.  
  8.     set tabbed(aValue){ this._tabbed = aValue },
  9.  
  10.     openHTML: function(feed) {
  11.         if(!feed) return;
  12.  
  13.         try {
  14.             var htmlURL = this.createHTML(feed);
  15.             if(this._tabbed) {
  16.                 getContentBrowser().addTab(htmlURL);
  17.             } else {
  18.                 getContentBrowser().loadURI(htmlURL);
  19.             }
  20.         } catch(e) {}
  21.     },
  22.  
  23.     createHTML: function(feed) {
  24.         var tmpFile = this.getSpecialDir("UChrm");
  25.         tmpFile.appendRelativePath("sage.html");
  26.  
  27.         var ioService = Components.classes["@mozilla.org/network/io-service;1"]
  28.                             .getService(Components.interfaces.nsIIOService);
  29.         var xmlFilePath = ioService.newFileURI(tmpFile).spec;
  30.  
  31.         if(tmpFile.exists()) {
  32.             tmpFile.remove(true);
  33.         }
  34.         tmpFile.create(tmpFile.NORMAL_FILE_TYPE, 0666);
  35.  
  36.         var stream = Components.classes['@mozilla.org/network/file-output-stream;1']
  37.                         .createInstance(Components.interfaces.nsIFileOutputStream);
  38.         stream.init(tmpFile, 2, 0x200, false); // open as "write only"
  39.         
  40.         var content = this.createHTMLSource(feed);
  41.         stream.write(content, content.length);
  42.         stream.flush();
  43.         stream.close();
  44.         
  45.         return xmlFilePath;
  46.     },
  47.  
  48.     getUserCssURL: function() {
  49.         var userCssEnable = CommonFunc.getPrefValue(CommonFunc.USER_CSS_ENABLE, "bool", false);
  50.         var userCssPath = CommonFunc.getPrefValue(CommonFunc.USER_CSS_PATH, "wstr", "");
  51.         if(!userCssEnable || !userCssPath) return null;
  52.  
  53.         var ioService = Components.classes["@mozilla.org/network/io-service;1"]
  54.                             .getService(Components.interfaces.nsIIOService);
  55.         var tmpFile = Components.classes['@mozilla.org/file/local;1']
  56.                             .createInstance(Components.interfaces.nsILocalFile);
  57.         try {        
  58.             tmpFile.initWithPath(userCssPath);
  59.             var cssUrl = ioService.newFileURI(tmpFile);
  60.             var contentType = ioService.newChannelFromURI(cssUrl).contentType;
  61.             if(contentType != "text/css") return null;
  62.  
  63.             return cssUrl.spec;
  64.         } catch(e) {
  65.             return null;
  66.         }
  67.     },
  68.  
  69.     createHTMLSource: function(feed) {
  70.         var allowEContent = CommonFunc.getPrefValue(CommonFunc.ALLOW_ENCODED_CONTENT, "bool", true);
  71.         var twelveHourClock = CommonFunc.getPrefValue(CommonFunc.TWELVE_HOUR_CLOCK, "bool", false);
  72.         var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
  73.  
  74.         var htmlSource = this.HTML_SOURCE;
  75.         var cssUrl    = this.getUserCssURL();
  76.         if(cssUrl) {
  77.             htmlSource = htmlSource.replace("**CSSURL**", cssUrl);
  78.         } else {
  79.             htmlSource = htmlSource.replace("**CSSURL**", this.DEFAULT_CSS);
  80.         }
  81.         htmlSource = htmlSource.replace("**HTMLTITLE**", feed.getTitle());
  82.         htmlSource = htmlSource.replace("**TITLE**", feed.getTitle());
  83.         htmlSource = htmlSource.replace(/\*\*LINK\*\*/g, feed.getLink());
  84.         htmlSource = htmlSource.replace("**DESCRIPTION**", feed.getDescription());
  85.  
  86.         var itemsSource = "";
  87.         var items = feed.getItems(feedItemOrder);
  88.         for(var i = 0; i < items.length; i++) {
  89.             var link = items[i].getLink();
  90.             var title = items[i].getTitle();
  91.             var description = "";
  92.             var pubDate = "";
  93.  
  94.             if(items[i].hasContent()) {
  95.                 description = allowEContent ? items[i].getContent() : htmlToText(items[i].getContent());
  96.                 description = "<div class=\"item-desc\">" + description + "</div>";
  97.             }
  98.  
  99.             if(items[i].hasPubDate()) {
  100.                 pubDate = "<div class=\"item-pubDate\">" + dateFormat(items[i].getPubDate(), twelveHourClock) + "</div>";
  101.             }
  102.  
  103.             var itemSource = this.ITEM_SOURCE;
  104.             itemSource = itemSource.replace("**NUMBER**", i+1);
  105.             itemSource = itemSource.replace("**LINK**", link);
  106.             itemSource = itemSource.replace("**TECHNORATI**", encodeURIComponent(link));
  107.             itemSource = itemSource.replace("**TITLE**", title);
  108.             itemSource = itemSource.replace("**DESCRIPTION**", description);
  109.             itemSource = itemSource.replace("**PUBDATE**", pubDate);
  110.             itemsSource += itemSource;
  111.         }
  112.         htmlSource = htmlSource.replace("**ITEMS**", itemsSource);
  113.  
  114.         return CommonFunc.convertCharCodeFrom(htmlSource, "UTF-8");
  115.     },
  116.  
  117.     getSpecialDir: function(aProp) {
  118.         var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties);
  119.         return dirService.get(aProp, Components.interfaces.nsILocalFile);
  120.     }
  121. }