[Pkg-mozext-commits] [sage-extension] 08/54: 1.2-branch merge
David Prévot
taffit at moszumanska.debian.org
Fri May 1 03:10:36 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to tag sage_1_3
in repository sage-extension.
commit cf63064b0007ea3d1da0fdd9d38fe702bfd37e5a
Author: Peter Andrews <petea at jhu.edu>
Date: Sat Sep 11 06:37:33 2004 +0000
1.2-branch merge
---
src/install.js | 2 +-
src/install.rdf | 2 +-
src/sage/content/feedlib.js | 12 +-
src/sage/content/opml/opml.js | 13 +-
src/sage/content/sage.js | 1569 +++++++++++++++++----------------
src/sage/content/updatechecker.js | 10 +-
src/sage/locale/en-US/sage.dtd | 104 +--
src/sage/locale/en-US/sage.properties | 180 ++--
src/sage/locale/fr-FR/sage.dtd | 29 +-
src/sage/locale/fr-FR/sage.properties | 180 ++--
src/sage/locale/hu-HU/sage.dtd | 106 +--
src/sage/locale/hu-HU/sage.properties | 182 ++--
src/sage/locale/it-IT/sage.dtd | 106 +--
src/sage/locale/it-IT/sage.properties | 180 ++--
src/sage/locale/ja-JP/sage.dtd | 108 +--
src/sage/locale/ja-JP/sage.properties | 182 ++--
src/sage/locale/nl-NL/sage.dtd | 104 +--
src/sage/locale/nl-NL/sage.properties | 180 ++--
18 files changed, 1631 insertions(+), 1618 deletions(-)
diff --git a/src/install.js b/src/install.js
index b77a05d..456c26d 100755
--- a/src/install.js
+++ b/src/install.js
@@ -1,6 +1,6 @@
const APP_NAME = "Sage";
const APP_CHROME_NAME = "sage";
-const APP_VERSION = "1.2";
+const APP_VERSION = "1.2.2";
const APP_FILE = "sage.jar";
const APP_CONTENTS_PATH = "content/";
const APP_SKIN_CLASSIC_PATH = "skin/classic/";
diff --git a/src/install.rdf b/src/install.rdf
index 1643919..821cf8f 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -6,7 +6,7 @@
<em:id>{a6ca9b3b-5e52-4f47-85d8-cca35bb57596}</em:id>
<em:name>Sage</em:name>
-<em:version>1.2</em:version>
+<em:version>1.3</em:version>
<em:description>A lightweight RSS and Atom feed aggregator.</em:description>
<em:creator>The Sage Project</em:creator>
<em:contributor>Peter Andrews</em:contributor>
diff --git a/src/sage/content/feedlib.js b/src/sage/content/feedlib.js
index f2cda39..5a4c11b 100644
--- a/src/sage/content/feedlib.js
+++ b/src/sage/content/feedlib.js
@@ -77,8 +77,10 @@ Feed.prototype.parseRSS = function() {
}
var itemNodes = feedXML.getElementsByTagName("item");
+ var item, guid;
for(i = 0; itemNodes.length > i; i++) {
- var item = {title:"", link:"", content:"", pubDate:""};
+ item = {title:"", link:"", content:"", pubDate:""};
+ guid = null;
for(var j = itemNodes[i].firstChild; j!=null; j=j.nextSibling) {
if(j.nodeType != j.ELEMENT_NODE) continue;
@@ -92,8 +94,8 @@ Feed.prototype.parseRSS = function() {
}
break;
case "guid":
- if(!item.link) {
- item.link = CommonFunc.getInnerText(j);
+ if(!guid) {
+ guid = CommonFunc.getInnerText(j);
}
break;
case "description":
@@ -120,6 +122,10 @@ Feed.prototype.parseRSS = function() {
}
}
+ if(!item.link && guid) {
+ item.link = guid;
+ }
+
var tmpFeedItem = new FeedItem(item.title, item.link, item.content, item.pubDate);
if(tmpFeedItem.hasPubDate()) {
diff --git a/src/sage/content/opml/opml.js b/src/sage/content/opml/opml.js
index c02d0c4..cb881aa 100755
--- a/src/sage/content/opml/opml.js
+++ b/src/sage/content/opml/opml.js
@@ -152,19 +152,22 @@ function outlineFilter(aNode) {
}
}
- // outline �v�f���� �u�b�N�}�[�N�A�C�e����쐬
function createRssItem(aOutlineNode, aRssFolder) {
var type = aOutlineNode.getAttribute("type");
var title = aOutlineNode.getAttribute("title");
if(!title) title = aOutlineNode.getAttribute("text");
- var xmlUrl = aOutlineNode.getAttribute("xmlUrl");
- // �s���S�� OUTLINE �͖�������
+ if(aOutlineNode.hasAttribute("xmlUrl")) {
+ var xmlUrl = aOutlineNode.getAttribute("xmlUrl");
+ } else {
+ var xmlUrl = aOutlineNode.getAttribute("xmlurl");
+ }
+
if(type!="rss" && !title && xmlUrl) return;
if(BMSVC.createBookmarkInContainer.length == 7) { // firefox 0.8 and lower
- BMSVC.createBookmarkInContainer(title, xmlUrl, null, null, null, aRssFolder, null);
+ BMSVC.createBookmarkInContainer(title, xmlUrl, null, "no-updated", null, aRssFolder, null);
} else {
- BMSVC.createBookmarkInContainer(title, xmlUrl, null, null, null, null, aRssFolder, null);
+ BMSVC.createBookmarkInContainer(title, xmlUrl, null, "no-updated", null, null, aRssFolder, null);
}
}
diff --git a/src/sage/content/sage.js b/src/sage/content/sage.js
index dc5636e..3904315 100755
--- a/src/sage/content/sage.js
+++ b/src/sage/content/sage.js
@@ -1,784 +1,785 @@
-const USER_AGENT = CommonFunc.USER_AGENT;
-
-const RESULT_OK = 0;
-const RESULT_PARSE_ERROR = 1;
-const RESULT_NOT_RSS = 2;
-const RESULT_NOT_FOUND = 3;
-const RESULT_NOT_AVAILABLE = 4;
-const RESULT_ERROR_FAILURE = 5;
-
-var resultStrArray = null;
-
- // XUL Object
-var strRes, bmStrRes; // stringbundle Object
-var bookmarksTree;
-var rssItemListBox;
-var rssStatusImage;
-var rssStatusLabel;
-var rssTitleLabel;
-var rssItemToolTip;
-
-var currentFeed;
-var httpReq;
-var prefObserverSageFolder;
-var responseXML;
-var lastResource;
-var rssLoading = false;
-var sageFolderID = "";
-var enableTooltip = true;
-var popupTimeoutId=0;
-
-
-function init() {
- bookmarksTree = document.getElementById("bookmarksTree");
- rssItemListBox = document.getElementById("rssItemListBox");
- rssStatusImage = document.getElementById("rssStatusImage");
- rssStatusLabel = document.getElementById("rssStatusLabel");
- rssTitleLabel = document.getElementById("rssTitleLabel");
- rssItemToolTip = document.getElementById("rssItemToolTip");
-
- strRes = document.getElementById("strRes");
- bmStrRes = document.getElementById("bmStrRes");
- resultStrArray = new Array(
- strRes.getString("RESULT_OK_STR"),
- strRes.getString("RESULT_PARSE_ERROR_STR"),
- strRes.getString("RESULT_NOT_RSS_STR"),
- strRes.getString("RESULT_NOT_FOUND_STR"),
- strRes.getString("RESULT_NOT_AVAILABLE_STR"),
- strRes.getString("RESULT_ERROR_FAILURE_STR")
- );
-
- // if feed folder has not been set, assume new user and install default feed folder and demo feeds
- if(!CommonFunc.getPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", null)) {
- logMessage("setting default preferences...");
- var new_folder = BMSVC.createFolderInContainer("Sage Feeds", RDF.GetResource("NC:BookmarksRoot"), null);
- CommonFunc.setPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", new_folder.Value);
- if(BMSVC.createBookmarkInContainer.length == 7) { // firefox 0.8 and lower
- BMSVC.createBookmarkInContainer("BBC News | News Front Page | World Edition", "http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss091.xml", null, "updated", null, new_folder, null);
- BMSVC.createBookmarkInContainer("Yahoo! News - Sports", "http://rss.news.yahoo.com/rss/sports", null, "updated", null, new_folder, null);
- BMSVC.createBookmarkInContainer("Sage Project News", "http://sage.mozdev.org/rss.xml", null, "updated", null, new_folder, null);
- } else {
- BMSVC.createBookmarkInContainer("BBC News | News Front Page | World Edition", "http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss091.xml", null, "updated", null, null, new_folder, null);
- BMSVC.createBookmarkInContainer("Yahoo! News - Sports", "http://rss.news.yahoo.com/rss/sports", null, "updated", null, null, new_folder, null);
- BMSVC.createBookmarkInContainer("Sage Project News", "http://sage.mozdev.org/rss.xml", null, "updated", null, null, new_folder, null);
- }
- setCheckbox("chkShowSearchBar", "false");
- setCheckbox("chkShowTooltip", "true");
- setCheckbox("chkShowFeedItemList", "true");
- }
-
- // get feed folder location
- sageFolderID = CommonFunc.getPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", "NC:BookmarksRoot");
- // check for changes to the feed folder
- prefObserverSageFolder = CommonFunc.addPrefListener(CommonFunc.RSS_READER_FOLDER_ID, sageFolderChanged);
- // set feed folder location
- bookmarksTree.tree.setAttribute("ref", sageFolderID);
- // select first entry
- bookmarksTree.treeBoxObject.selection.select(0);
-
- FeedSearch.init();
- toggleShowSearchBar();
- toggleShowFeedItemList();
-
- logMessage("initialized");
-}
-
-function discoverFeeds() {
- window.openDialog("chrome://sage/contents/discover_feeds.xul", "sage_discover_feeds", "chrome,modal,close", bookmarksTree);
-}
-
-// TODO: This does not work in 0.9.x since the implementation for smart bookmarks
-// has been removed. Too bad because this feature was really nice
-function showOnlyUpdated() {
- if(getCheckboxCheck("chkOnlyUpdate")) {
- var findURL = "find:datasource=rdf:bookmarks&match=";
- findURL += CommonFunc.BM_DESCRIPTION;
- findURL += "&method=is&text=updated";
- bookmarksTree.tree.setAttribute("ref", findURL);
- } else {
- bookmarksTree.tree.setAttribute("ref", sageFolderID);
- }
-}
-
-function sageFolderChanged(subject, topic, prefName) {
- // observe Preference
- sageFolderID = CommonFunc.getPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", "NC:BookmarksRoot");
- bookmarksTree.tree.setAttribute("ref", sageFolderID);
- bookmarksTree.treeBoxObject.selection.select(0);
-}
-
-function done() {
- if(prefObserverSageFolder) {
- CommonFunc.removePrefListener(prefObserverSageFolder);
- }
-
- if(rssLoading) {
- httpReq.abort();
- rssLoading = false;
- }
- UpdateChecker.done();
-
- logMessage("shutdown");
-}
-
-function openOPMLWizard() {
- var dialogURL = "chrome://sage/content/opml/opml.xul";
- window.openDialog(dialogURL, "", "chrome,modal,close");
-}
-
-function openSettingDialog() {
- var dialogURL = "chrome://sage/content/settings/settings.xul";
- window.openDialog(dialogURL, "", "chrome,modal,close");
-}
-
-function openSageProjectFeed() {
- lastResource = null;
- var feedURL = "http://sage.mozdev.org/rss.xml";
- setStatusLoading("Sage Project News");
- httpGet(feedURL);
-}
-
-function manageRSSList() {
- var dialogURL = "chrome://browser/content/bookmarks/bookmarksManager.xul";
- window.openDialog(dialogURL, "", "chrome,all,dialog=no", sageFolderID);
-}
-
-function updateCheck(aCheckFolderId) {
- UpdateChecker.onCheck = function(aName, aURL) {
- rssStatusImage.setAttribute("loading", "true");
- rssStatusLabel.value = strRes.getString("RESULT_CHECKING") + ": " + aName;
- }
- UpdateChecker.onChecked = function(aName, aURL) {
- setStatusDone();
- }
-
- if(aCheckFolderId) {
- UpdateChecker.startCheck(aCheckFolderId);
- } else {
- UpdateChecker.startCheck(sageFolderID);
- }
-}
-
-function BookmarkResource(aRes, aDB){
- this.res = aRes;
- this.db = aDB;
- this.name = BookmarksUtils.getProperty(this.res, NC_NS + "Name", this.db);
- this.url = BookmarksUtils.getProperty(this.res, NC_NS + "URL", this.db);
-}
-
-function bookmarksOpen(){
- lastResource = new BookmarkResource(bookmarksTree.currentResource, bookmarksTree.db);
- setStatusLoading();
- httpGet(lastResource.url);
-}
-
-function createTreeContextMenu2(aEvent) {
- var popup = aEvent.target;
- if(popup.localName != "menupopup") return;
-
- var selection = bookmarksTree._selection;
- var itemId = selection.item[0].Value;
- var cmdSrc = "";
- var tempMenuItem;
-
- if(selection.type == "Bookmark") {
- cmdSrc = "GetRssTitle.getRssTitle('" + itemId + "')";
- tempMenuItem = document.createElement("menuitem");
- tempMenuItem.setAttribute("label", strRes.getString("GET_RSS_TITLE"));
- tempMenuItem.setAttribute("oncommand", cmdSrc);
- popup.appendChild(document.createElement("menuseparator"));
- popup.appendChild(tempMenuItem);
- } else if(selection.type == "Folder") {
- cmdSrc = "updateCheck('" + itemId + "')";
- tempMenuItem = document.createElement("menuitem");
- tempMenuItem.setAttribute("label", strRes.getString("CHECK_UPDATE"));
- tempMenuItem.setAttribute("oncommand", cmdSrc);
- popup.appendChild(document.createElement("menuseparator"));
- popup.appendChild(tempMenuItem);
- }
-}
-
-function bookmarksTreeClick(aEvent){
- if(aEvent.type == "click") {
- if(aEvent.button == 2 || aEvent.originalTarget.localName != "treechildren") {
- return;
- }
- var obj = {};
- bookmarksTree.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, {}, {}, obj);
- if(obj.value == "twisty") return;
- } else if(aEvent.type == "keypress") {
- if(aEvent.originalTarget.localName != "tree") {
- return;
- }
- }
-
- CreateHTML.tabbed = false;
- if(aEvent.button == 1) { CreateHTML.tabbed = true; } // click middle button
- if(aEvent.ctrlKey) { CreateHTML.tabbed = true; } // press Ctrl Key
-
- const BOOKMARK_TYPE = RDF_NS + "type";
- const BOOKMARK_SEPARATOR = NC_NS + "BookmarkSeparator";
- const BOOKMARK_FOLDER = NC_NS + "Folder"
- var bookmarkType = (BookmarksUtils.getProperty(bookmarksTree.currentResource, BOOKMARK_TYPE , bookmarksTree.db))
- if(bookmarkType == BOOKMARK_SEPARATOR || bookmarkType == BOOKMARK_FOLDER) {
- return;
- }
-
- bookmarksOpen();
-}
-
-function rssItemListBoxClick(aEvent) {
- if(aEvent.type == "click") {
- if(aEvent.button == 2 || aEvent.originalTarget.localName != "listitem") {
- return;
- }
- } else if(aEvent.type == "keypress") {
- if(aEvent.originalTarget.localName != "listbox") {
- return;
- }
- }
-
- var listItem = rssItemListBox.selectedItem;
- var feedItem = getFeedItemFromListItem( listItem );
-
- openURI( feedItem.getLink(), aEvent );
- listItem.setAttribute("visited", "true");
-}
-
-function rssTitleLabelClick(aNode, aEvent){
- var tabbed = false;
- if(!aNode.hasAttribute("href") || aEvent.button == 2) {
- return;
- }
-
- var link = aNode.getAttribute("href");
- openURI( link, aEvent );
-}
-
-function setStatusLoading(label) {
- rssStatusImage.setAttribute("loading", "true");
- if(label) {
- rssStatusLabel.value = strRes.getString("RESULT_LOADING") + ": " + label;
- } else {
- rssStatusLabel.value = strRes.getString("RESULT_LOADING") + ": " + lastResource.name;
- }
-}
-
-function setStatusDone() {
- rssStatusImage.setAttribute("loading", "false");
- rssStatusLabel.value = "";
-
- if(currentFeed) {
- rssTitleLabel.value = htmlToText(currentFeed.getTitle());
- if(currentFeed.getLink()) {
- rssTitleLabel.setAttribute("href", currentFeed.getLink());
- rssTitleLabel.tooltipText = currentFeed.getLink();
- } else {
- rssTitleLabel.removeAttribute("href");
- rssTitleLabel.tooltipText = "";
- }
- }
-}
-
-function setStatusError(aStatus) {
- rssStatusImage.setAttribute("loading", "error");
- rssStatusLabel.value = "Error: " + aStatus;
-}
-
-function getContentBrowser() {
- var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
- var topWindowOfType = windowManager.getMostRecentWindow("navigator:browser");
- if (topWindowOfType) {
- return topWindowOfType.document.getElementById('content');
- }
- return null;
-}
-
-function toggleShowSearchBar() {
- var showSearchBar = getCheckboxCheck("chkShowSearchBar");
- document.getElementById("barSearch").hidden = !showSearchBar;
-}
-
-function toggleShowFeedItemList() {
- var showFeedItemList = getCheckboxCheck("chkShowFeedItemList");
- document.getElementById("sage-splitter").hidden = !showFeedItemList;
- document.getElementById("rssItemListBoxBox").hidden = !showFeedItemList;
- if(showFeedItemList) setRssItemListBox();
-}
-
-function setRssItemListBox() {
- if(!currentFeed) return;
- if(document.getElementById("rssItemListBoxBox").hidden) return;
-
- while(rssItemListBox.getRowCount() != 0) {
- rssItemListBox.removeItemAt(0);
- }
-
- var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
-
- var items = currentFeed.getItems(feedItemOrder);
-
- for(var i = 0; items.length > i; i++) {
- var item = items[i];
- var itemLabel = item.getTitle();
- itemLabel = (i+1) + ". " + itemLabel;
- var listItem = rssItemListBox.appendItem(itemLabel, i);
- if(isVisited(item.getLink())) {
- listItem.setAttribute("visited", "true");
- }
- }
-}
-
-function getCheckboxCheck(element_id) {
- var checkboxNode = document.getElementById(element_id);
- return checkboxNode.getAttribute("checked") == "true";
-}
-
-function setCheckbox(element_id, value) {
- var checkboxNode = document.getElementById(element_id);
- checkboxNode.setAttribute("checked", value);
-}
-
-// TODO: Is this still used?
-function showRssItemListPopup(aEvent) {
- if(aEvent.originalTarget.localName != "listitem") {
- rssItemListPopup.hidePopup();
- return;
- }
- if(!getCheckboxCheck("chkShowTooltip")) {
- rssItemListPopup.hidePopup();
- return;
- }
-
- var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
-
- var items = currentFeed.getItems(feedItemOrder);
-
- var description = htmlToText(items[aEvent.originalTarget.value].getContent());
- if(description.indexOf("/") != -1) {
- description = description.replace(/\//gm, "/\u200B");
- }
- // description 400ȓɂ
- if(description.length > 400) {
- description = description.substring(0,400) + "...";
- }
-
- var popX = aEvent.screenX + 10;
- var popY = aEvent.screenY + 20;
-
- rssItemListPopup.title = aEvent.originalTarget.label;
- rssItemListPopup.description = description;
- rssItemListPopup.autoPosition = false;
- rssItemListPopup.moveTo(popX, popY);
- popupTimeoutId = setTimeout("rssItemListPopup.showPopup(rssItemListBox)", 150);
-}
-
-function populateToolTip(e) {
- // if setting disabled
- if(!getCheckboxCheck("chkShowTooltip")) {
- e.preventDefault();
- return;
- }
-
- if(document.tooltipNode == rssItemListBox) {
- e.preventDefault();
- return;
- }
- var listItem = document.tooltipNode;
- var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
- var items = currentFeed.getItems(feedItemOrder);
- var description = htmlToText(items[listItem.value].getContent());
- if(description.indexOf("/") != -1) {
- description = description.replace(/\//gm, "/\u200B");
- }
- if(description.length > 400) {
- description = description.substring(0,400) + "...";
- }
-
- rssItemToolTip.title = listItem.label;
- rssItemToolTip.description = description;
-}
-
-// TODO: Is this still used?
-function hideRssItemListPopup(aEvent) {
- clearTimeout(popupTimeoutId);
- rssItemListPopup.hidePopup();
-}
-
-function htmlToText(aStr) {
- var formatConverter = Components.classes["@mozilla.org/widget/htmlformatconverter;1"].createInstance(Components.interfaces.nsIFormatConverter);
- var fromStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
- fromStr.data = aStr;
- var toStr = { value: null };
-
- try {
- formatConverter.convert("text/html", fromStr, fromStr.toString().length, "text/unicode", toStr, {});
- } catch(e) {
- return aStr;
- }
- if(toStr.value) {
- toStr = toStr.value.QueryInterface(Components.interfaces.nsISupportsString);
- return toStr.toString();
- }
- return aStr;
-}
-
-
-
-// ++++++++++ +++++++++ HTTP ++++++++++ +++++++++
-
-function httpGet(aURL) {
- if(rssLoading) {
- httpReq.abort();
- rssLoading = false;
- }
-
- responseXML = null;
-
- httpReq = new XMLHttpRequest();
-
- httpReq.open("GET", aURL);
-
- httpReq.onload = httpLoaded;
- httpReq.onerror = httpError;
- httpReq.onreadystatechange = httpReadyStateChange;
-
- try {
- httpReq.setRequestHeader("User-Agent", USER_AGENT);
- httpReq.overrideMimeType("application/xml");
- } catch(e) {
- httpGetResult(RESULT_ERROR_FAILURE);
- }
-
- try {
- httpReq.send(null);
- rssLoading = true;
- } catch(e) {
- httpGetResult(RESULT_ERROR_FAILURE);
- }
-}
-
-function httpError(e) {
- logMessage("HTTP Error");
-}
-
-function httpReadyStateChange() {
-
- if(httpReq.readyState == 2) {
- try {
- if(httpReq.status == 404) {
- httpGetResult(RESULT_NOT_FOUND);
- }
- } catch(e) {
- httpGetResult(RESULT_NOT_AVAILABLE);
- return;
- }
- } else if(httpReq.readyState == 3) {}
-}
-
-function httpLoaded(e) {
- responseXML = httpReq.responseXML;
- var rootNodeName = responseXML.documentElement.localName.toLowerCase();
-
- switch(rootNodeName) {
- case "parsererror":
- // XML Parse Error
- httpGetResult(RESULT_PARSE_ERROR);
- break;
- case "rss":
- case "rdf":
- case "feed":
- httpGetResult(RESULT_OK);
- break;
- default:
- // Not RSS or Atom
- httpGetResult(RESULT_NOT_RSS);
- break;
- }
-}
-
-function httpGetResult(aResultCode) {
- httpReq.abort();
- rssLoading = false;
-
- if(aResultCode == RESULT_OK) {
- currentFeed = new Feed(responseXML);
-
- if(lastResource && lastResource.res) {
- if(CommonFunc.getPrefValue(CommonFunc.AUTO_FEED_TITLE, "bool", true)) {
- if(CommonFunc.getBMDSProperty(lastResource.res, CommonFunc.BM_NAME) != currentFeed.getTitle()) {
- CommonFunc.setBMDSProperty(lastResource.res, CommonFunc.BM_NAME, currentFeed.getTitle());
- }
- }
-
- BMSVC.updateLastVisitedDate(lastResource.url, "UTF-8");
- CommonFunc.setBMDSProperty(lastResource.res, CommonFunc.BM_DESCRIPTION, CommonFunc.STATUS_NO_UPDATE + " " + currentFeed.getSignature());
- }
-
- setStatusDone();
- setRssItemListBox();
-
- if(CommonFunc.getPrefValue(CommonFunc.RENDER_FEEDS, "bool", true)) {
- CreateHTML.openHTML(currentFeed);
- }
- } else {
- setStatusError(resultStrArray[aResultCode]);
- }
-}
-
-
-// link visit code based on LinkVisitor.mozdev.org
-
-
-const _uriFixup = Components.classes["@mozilla.org/docshell/urifixup;1"].getService(Components.interfaces.nsIURIFixup);
-const _globalHistory = Components.classes['@mozilla.org/browser/global-history;2'].getService(Components.interfaces.nsIGlobalHistory2);
-const _browserHistory = Components.classes["@mozilla.org/browser/global-history;2"].getService(Components.interfaces.nsIBrowserHistory);
-
-function markURIAsRead( sURI )
-{
- markURIReadState( sURI, true );
-}
-
-function markURIAsUnread( sURI )
-{
- markURIReadState( sURI, false );
-}
-
-function markURIReadState( sURI, bRead )
-{
- if ( !sURI )
- return;
-
- // why do we need to fixup the URI?
- var fixupURI = _getFixupURI( sURI );
- var visited = _globalHistory.isVisited( fixupURI );
- if ( visited == bRead )
- return;
-
- if ( bRead )
- _globalHistory.addURI( fixupURI, false, true );
- else
- _browserHistory.removePage( fixupURI.spec );
-}
-
-function _getFixupURI( sURI )
-{
- try
- {
- return _uriFixup.createFixupURI( sURI, 0 );
- }
- catch( e )
- {
- return null;
- }
-}
-
-function isVisited( sURI )
-{
- var fixupURI = _getFixupURI( sURI );
- return _globalHistory.isVisited( fixupURI );
-}
-
-
-// RSS Item Context Menu
-
-/**
- * This is called before the context menu for the listbox is shown. Here we enabled/disable
- * menu items as well as change the text to correctly reflect the read state
- * @param e : Event
- * @returns void
- */
-function updateItemContextMenu( e )
-{
- var popupNode = document.popupNode;
-
- var menuItemIds = ["rssOpenItem", "rssOpenNewTabItem", "rssOpenNewWindowItem",
- "rssMarkAsReadItem", "rssMarkAllAsReadItem", "rssMarkAllAsUnreadItem"];
- var menuItems = {};
- for ( var i = 0; i < menuItemIds.length; i++ )
- {
- menuItems[ menuItemIds[i] ] = document.getElementById( menuItemIds[i] );
- }
-
- // cmd_bm_open
- // cmd_bm_openinnewwindow
- // cmd_bm_openinnewtab
- menuItems.rssOpenItem.label = bmStrRes.getString("cmd_bm_open");
- menuItems.rssOpenNewTabItem.label = bmStrRes.getString("cmd_bm_openinnewtab");
- menuItems.rssOpenNewWindowItem.label = bmStrRes.getString("cmd_bm_openinnewwindow");
-
- menuItems.rssMarkAsReadItem.label = strRes.getString("itemcontext_markasread");
- menuItems.rssMarkAllAsReadItem.label = strRes.getString("itemcontext_markallasread");
- menuItems.rssMarkAllAsUnreadItem.label = strRes.getString("itemcontext_markallasunread");
-
- if ( popupNode.localName == "listbox" )
- {
- // only mark all should work
- for ( var id in menuItems )
- {
- if ( (id == "rssMarkAllAsReadItem" || id == "rssMarkAllAsUnreadItem") &&
- currentFeed && rssItemListBox.getRowCount() > 0 )
- menuItems[id].removeAttribute( "disabled" );
- else
- menuItems[id].setAttribute( "disabled", "true" );;
- }
- }
- else
- {
- for ( id in menuItems )
- menuItems[id].removeAttribute( "disabled" );
-
- // need to figure out if the current list item is visited
- var listItem = popupNode;
- var feedItem = getFeedItemFromListItem( listItem );
- var visited = isVisited( feedItem.getLink() );
- menuItems.rssMarkAsReadItem.label =
- strRes.getString( visited ? "itemcontext_markasunread" : "itemcontext_markasread" );
-
- // lets make sure the visited flag is correct in the ui
- if ( visited )
- listItem.setAttribute( "visited", "true" );
- else
- listItem.removeAttribute( "visited" );
- }
-}
-
-
-/**
- * This marks the selected items as read/unread. This works with multiple
- * selection as well if we want to enable that in the future.
- * @param e : Event
- * @returns void
- */
-function toggleMarkAsRead( e )
-{
- var listItems = rssItemListBox.selectedItems;
- for ( var i = 0; i < listItems.length; i++ )
- {
- var listItem = listItems[i];
- var feedItem = getFeedItemFromListItem( listItem );
- var uri = feedItem.getLink();
- var visited = isVisited( uri );
- markURIReadState( uri, !visited );
- if ( !visited )
- listItem.setAttribute( "visited", "true" );
- else
- listItem.removeAttribute( "visited" );
- }
-}
-
-/**
- * This called from the context menu.
- * @param e : Event
- * @returns void
- */
-function markAllAsRead( e )
-{
- markAllReadState( true );
-}
-
-/**
- * This called from the context menu.
- * @param e : Event
- * @returns void
- */
-function markAllAsUnread( e )
-{
- markAllReadState( false );
-}
-
-/**
- * Marks all read or unread
- * @param bRead : Boolean Whether to mark as read or unread
- * @returns void
- */
-function markAllReadState( bRead )
-{
- if ( currentFeed )
- {
- var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
- var feedItems = currentFeed.getItems( feedItemOrder );
-
- for ( var i = 0; i < feedItems.length; i++ )
- markURIReadState( feedItems[i].getLink(), bRead );
-
- var listItem;
- for ( var y = 0; y < rssItemListBox.getRowCount(); y++ )
- {
- listItem = rssItemListBox.getItemAtIndex( y );
- if ( bRead )
- listItem.setAttribute( "visited", "true" );
- else
- listItem.removeAttribute( "visited" );
- }
- }
-}
-
-// This takes a list item from the rss list box and returns the uri it represents
-// this seems a bit inefficient. Shouldn't there be a direct mapping between these?
-
-/**
- * This takes a listitem element and returns the FeedItem it represents
- * @param oListItem : XULListItem
- * @returns FeedItem
- */
-function getFeedItemFromListItem( oListItem )
-{
- var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
- var items = currentFeed.getItems( feedItemOrder );
- return items[ oListItem.value ];
-}
-
-
-
-/**
- * Opens a link in the same window, a new tab or a new window
- *
- * @param sURI : String
- * @param oType : Object If this is an Event object we check the modifiers.
- * Otherwise we assume it is a string describing the
- * window type.
- * @returns void
- */
-function openURI( sURI, oType )
-{
- var windowType;
- if ( oType instanceof Event )
- {
- // figure out what kind of open we want
- if ( oType.button == 1 || oType.ctrlKey ) // click middle button or ctrl click
- windowType = "tab";
- else if ( oType.shiftKey )
- windowType = "window";
- }
- else
- {
- windowType = oType;
- }
-
- switch ( windowType )
- {
- case "tab":
- getContentBrowser().addTab( sURI );
- break;
- case "window":
- document.commandDispatcher.focusedWindow.open( sURI );
- break;
-
- default:
- getContentBrowser().loadURI( sURI );
- }
-}
-
-/**
- * This is called by the context menu
- * @param oType : String
- * @returns void
- */
-function openListItem( oType )
-{
- var listItem = document.popupNode;
- var feedItem = getFeedItemFromListItem( listItem );
- openURI( feedItem.getLink(), oType );
- listItem.setAttribute( "visited", "true" );
-}
+const USER_AGENT = CommonFunc.USER_AGENT;
+
+const RESULT_OK = 0;
+const RESULT_PARSE_ERROR = 1;
+const RESULT_NOT_RSS = 2;
+const RESULT_NOT_FOUND = 3;
+const RESULT_NOT_AVAILABLE = 4;
+const RESULT_ERROR_FAILURE = 5;
+
+var resultStrArray = null;
+
+ // XUL Object
+var strRes, bmStrRes; // stringbundle Object
+var bookmarksTree;
+var rssItemListBox;
+var rssStatusImage;
+var rssStatusLabel;
+var rssTitleLabel;
+var rssItemToolTip;
+
+var currentFeed;
+var httpReq;
+var prefObserverSageFolder;
+var responseXML;
+var lastResource;
+var rssLoading = false;
+var sageFolderID = "";
+var enableTooltip = true;
+var popupTimeoutId=0;
+
+
+function init() {
+ bookmarksTree = document.getElementById("bookmarksTree");
+ rssItemListBox = document.getElementById("rssItemListBox");
+ rssStatusImage = document.getElementById("rssStatusImage");
+ rssStatusLabel = document.getElementById("rssStatusLabel");
+ rssTitleLabel = document.getElementById("rssTitleLabel");
+ rssItemToolTip = document.getElementById("rssItemToolTip");
+
+ strRes = document.getElementById("strRes");
+ bmStrRes = document.getElementById("bmStrRes");
+ resultStrArray = new Array(
+ strRes.getString("RESULT_OK_STR"),
+ strRes.getString("RESULT_PARSE_ERROR_STR"),
+ strRes.getString("RESULT_NOT_RSS_STR"),
+ strRes.getString("RESULT_NOT_FOUND_STR"),
+ strRes.getString("RESULT_NOT_AVAILABLE_STR"),
+ strRes.getString("RESULT_ERROR_FAILURE_STR")
+ );
+
+ // if feed folder has not been set, assume new user and install default feed folder and demo feeds
+ if(!CommonFunc.getPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", null)) {
+ logMessage("setting default preferences...");
+ var new_folder = BMSVC.createFolderInContainer("Sage Feeds", RDF.GetResource("NC:BookmarksRoot"), null);
+ CommonFunc.setPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", new_folder.Value);
+ if(BMSVC.createBookmarkInContainer.length == 7) { // firefox 0.8 and lower
+ BMSVC.createBookmarkInContainer("BBC News | News Front Page | World Edition", "http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss091.xml", null, "updated", null, new_folder, null);
+ BMSVC.createBookmarkInContainer("Yahoo! News - Sports", "http://rss.news.yahoo.com/rss/sports", null, "updated", null, new_folder, null);
+ BMSVC.createBookmarkInContainer("Sage Project News", "http://sage.mozdev.org/rss.xml", null, "updated", null, new_folder, null);
+ } else {
+ BMSVC.createBookmarkInContainer("BBC News | News Front Page | World Edition", "http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss091.xml", null, "updated", null, null, new_folder, null);
+ BMSVC.createBookmarkInContainer("Yahoo! News - Sports", "http://rss.news.yahoo.com/rss/sports", null, "updated", null, null, new_folder, null);
+ BMSVC.createBookmarkInContainer("Sage Project News", "http://sage.mozdev.org/rss.xml", null, "updated", null, null, new_folder, null);
+ }
+ setCheckbox("chkShowSearchBar", "false");
+ setCheckbox("chkShowTooltip", "true");
+ setCheckbox("chkShowFeedItemList", "true");
+ }
+
+ // get feed folder location
+ sageFolderID = CommonFunc.getPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", "NC:BookmarksRoot");
+ // check for changes to the feed folder
+ prefObserverSageFolder = CommonFunc.addPrefListener(CommonFunc.RSS_READER_FOLDER_ID, sageFolderChanged);
+ // set feed folder location
+ bookmarksTree.tree.setAttribute("ref", sageFolderID);
+ // select first entry
+ bookmarksTree.treeBoxObject.selection.select(0);
+
+ FeedSearch.init();
+ toggleShowSearchBar();
+ toggleShowFeedItemList();
+
+ logMessage("initialized");
+}
+
+function discoverFeeds() {
+ window.openDialog("chrome://sage/contents/discover_feeds.xul", "sage_discover_feeds", "chrome,modal,close", bookmarksTree);
+}
+
+// TODO: This does not work in 0.9.x since the implementation for smart bookmarks
+// has been removed. Too bad because this feature was really nice
+function showOnlyUpdated() {
+ if(getCheckboxCheck("chkOnlyUpdate")) {
+ var findURL = "find:datasource=rdf:bookmarks&match=";
+ findURL += CommonFunc.BM_DESCRIPTION;
+ findURL += "&method=is&text=updated";
+ bookmarksTree.tree.setAttribute("ref", findURL);
+ } else {
+ bookmarksTree.tree.setAttribute("ref", sageFolderID);
+ }
+}
+
+function sageFolderChanged(subject, topic, prefName) {
+ // observe Preference
+ sageFolderID = CommonFunc.getPrefValue(CommonFunc.RSS_READER_FOLDER_ID, "str", "NC:BookmarksRoot");
+ bookmarksTree.tree.setAttribute("ref", sageFolderID);
+ bookmarksTree.treeBoxObject.selection.select(0);
+}
+
+function done() {
+ if(prefObserverSageFolder) {
+ CommonFunc.removePrefListener(prefObserverSageFolder);
+ }
+
+ if(rssLoading) {
+ httpReq.abort();
+ rssLoading = false;
+ }
+ UpdateChecker.done();
+
+ logMessage("shutdown");
+}
+
+function openOPMLWizard() {
+ var dialogURL = "chrome://sage/content/opml/opml.xul";
+ window.openDialog(dialogURL, "", "chrome,modal,close");
+}
+
+function openSettingDialog() {
+ var dialogURL = "chrome://sage/content/settings/settings.xul";
+ window.openDialog(dialogURL, "", "chrome,modal,close");
+}
+
+function openSageProjectFeed() {
+ lastResource = null;
+ var feedURL = "http://sage.mozdev.org/rss.xml";
+ setStatusLoading("Sage Project News");
+ httpGet(feedURL);
+}
+
+function manageRSSList() {
+ var dialogURL = "chrome://browser/content/bookmarks/bookmarksManager.xul";
+ window.openDialog(dialogURL, "", "chrome,all,dialog=no", sageFolderID);
+}
+
+function updateCheck(aCheckFolderId) {
+ UpdateChecker.onCheck = function(aName, aURL) {
+ rssStatusImage.setAttribute("loading", "true");
+ rssStatusLabel.value = strRes.getString("RESULT_CHECKING") + ": " + aName;
+ }
+ UpdateChecker.onChecked = function(aName, aURL) {
+ setStatusDone();
+ }
+
+ if(aCheckFolderId) {
+ UpdateChecker.startCheck(aCheckFolderId);
+ } else {
+ UpdateChecker.startCheck(sageFolderID);
+ }
+}
+
+function BookmarkResource(aRes, aDB){
+ this.res = aRes;
+ this.db = aDB;
+ this.name = BookmarksUtils.getProperty(this.res, NC_NS + "Name", this.db);
+ this.url = BookmarksUtils.getProperty(this.res, NC_NS + "URL", this.db);
+}
+
+function bookmarksOpen(){
+ lastResource = new BookmarkResource(bookmarksTree.currentResource, bookmarksTree.db);
+ setStatusLoading();
+ httpGet(lastResource.url);
+}
+
+function createTreeContextMenu2(aEvent) {
+ var popup = aEvent.target;
+ if(popup.localName != "menupopup") return;
+
+ var selection = bookmarksTree._selection;
+ var itemId = selection.item[0].Value;
+ var cmdSrc = "";
+ var tempMenuItem;
+
+ if(selection.type == "Bookmark") {
+ cmdSrc = "GetRssTitle.getRssTitle('" + itemId + "')";
+ tempMenuItem = document.createElement("menuitem");
+ tempMenuItem.setAttribute("label", strRes.getString("GET_RSS_TITLE"));
+ tempMenuItem.setAttribute("oncommand", cmdSrc);
+ popup.appendChild(document.createElement("menuseparator"));
+ popup.appendChild(tempMenuItem);
+ } else if(selection.type == "Folder") {
+ cmdSrc = "updateCheck('" + itemId + "')";
+ tempMenuItem = document.createElement("menuitem");
+ tempMenuItem.setAttribute("label", strRes.getString("CHECK_UPDATE"));
+ tempMenuItem.setAttribute("oncommand", cmdSrc);
+ popup.appendChild(document.createElement("menuseparator"));
+ popup.appendChild(tempMenuItem);
+ }
+}
+
+function bookmarksTreeClick(aEvent){
+ if(aEvent.type == "click") {
+ if(aEvent.button == 2 || aEvent.originalTarget.localName != "treechildren") {
+ return;
+ }
+ var obj = {};
+ bookmarksTree.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, {}, {}, obj);
+ if(obj.value == "twisty") return;
+ } else if(aEvent.type == "keypress") {
+ if(aEvent.originalTarget.localName != "tree") {
+ return;
+ }
+ }
+
+ CreateHTML.tabbed = false;
+ if(aEvent.button == 1) { CreateHTML.tabbed = true; } // click middle button
+ if(aEvent.ctrlKey) { CreateHTML.tabbed = true; } // press Ctrl Key
+
+ const BOOKMARK_TYPE = RDF_NS + "type";
+ const BOOKMARK_SEPARATOR = NC_NS + "BookmarkSeparator";
+ const BOOKMARK_FOLDER = NC_NS + "Folder"
+ var bookmarkType = (BookmarksUtils.getProperty(bookmarksTree.currentResource, BOOKMARK_TYPE , bookmarksTree.db))
+ if(bookmarkType == BOOKMARK_SEPARATOR || bookmarkType == BOOKMARK_FOLDER) {
+ return;
+ }
+
+ bookmarksOpen();
+}
+
+function rssItemListBoxClick(aEvent) {
+ if(aEvent.type == "click") {
+ if(aEvent.button == 2 || aEvent.originalTarget.localName != "listitem") {
+ return;
+ }
+ } else if(aEvent.type == "keypress") {
+ if(aEvent.originalTarget.localName != "listbox") {
+ return;
+ }
+ }
+
+ var listItem = rssItemListBox.selectedItem;
+ var feedItem = getFeedItemFromListItem( listItem );
+
+ openURI( feedItem.getLink(), aEvent );
+ listItem.setAttribute("visited", "true");
+}
+
+function rssTitleLabelClick(aNode, aEvent){
+ var tabbed = false;
+ if(!aNode.hasAttribute("href") || aEvent.button == 2) {
+ return;
+ }
+
+ var link = aNode.getAttribute("href");
+ openURI( link, aEvent );
+}
+
+function setStatusLoading(label) {
+ rssStatusImage.setAttribute("loading", "true");
+ if(label) {
+ rssStatusLabel.value = strRes.getString("RESULT_LOADING") + ": " + label;
+ } else {
+ rssStatusLabel.value = strRes.getString("RESULT_LOADING") + ": " + lastResource.name;
+ }
+}
+
+function setStatusDone() {
+ rssStatusImage.setAttribute("loading", "false");
+ rssStatusLabel.value = "";
+
+ if(currentFeed) {
+ rssTitleLabel.value = htmlToText(currentFeed.getTitle());
+ if(currentFeed.getLink()) {
+ rssTitleLabel.setAttribute("href", currentFeed.getLink());
+ rssTitleLabel.tooltipText = currentFeed.getLink();
+ } else {
+ rssTitleLabel.removeAttribute("href");
+ rssTitleLabel.tooltipText = "";
+ }
+ }
+}
+
+function setStatusError(aStatus) {
+ rssStatusImage.setAttribute("loading", "error");
+ rssStatusLabel.value = "Error: " + aStatus;
+}
+
+function getContentBrowser() {
+ var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
+ var topWindowOfType = windowManager.getMostRecentWindow("navigator:browser");
+ if (topWindowOfType) {
+ return topWindowOfType.document.getElementById('content');
+ }
+ return null;
+}
+
+function toggleShowSearchBar() {
+ var showSearchBar = getCheckboxCheck("chkShowSearchBar");
+ document.getElementById("barSearch").hidden = !showSearchBar;
+}
+
+function toggleShowFeedItemList() {
+ var showFeedItemList = getCheckboxCheck("chkShowFeedItemList");
+ document.getElementById("sage-splitter").hidden = !showFeedItemList;
+ document.getElementById("rssItemListBoxBox").hidden = !showFeedItemList;
+ if(showFeedItemList) setRssItemListBox();
+}
+
+function setRssItemListBox() {
+ if(!currentFeed) return;
+ if(document.getElementById("rssItemListBoxBox").hidden) return;
+
+ while(rssItemListBox.getRowCount() != 0) {
+ rssItemListBox.removeItemAt(0);
+ }
+
+ var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
+
+ var items = currentFeed.getItems(feedItemOrder);
+
+ for(var i = 0; items.length > i; i++) {
+ var item = items[i];
+ var itemLabel = item.getTitle();
+ itemLabel = (i+1) + ". " + itemLabel;
+ var listItem = rssItemListBox.appendItem(itemLabel, i);
+ if(isVisited(item.getLink())) {
+ listItem.setAttribute("visited", "true");
+ }
+ }
+}
+
+function getCheckboxCheck(element_id) {
+ var checkboxNode = document.getElementById(element_id);
+ return checkboxNode.getAttribute("checked") == "true";
+}
+
+function setCheckbox(element_id, value) {
+ var checkboxNode = document.getElementById(element_id);
+ checkboxNode.setAttribute("checked", value);
+}
+
+// TODO: Is this still used?
+function showRssItemListPopup(aEvent) {
+ if(aEvent.originalTarget.localName != "listitem") {
+ rssItemListPopup.hidePopup();
+ return;
+ }
+ if(!getCheckboxCheck("chkShowTooltip")) {
+ rssItemListPopup.hidePopup();
+ return;
+ }
+
+ var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
+
+ var items = currentFeed.getItems(feedItemOrder);
+
+ var description = htmlToText(items[aEvent.originalTarget.value].getContent());
+ if(description.indexOf("/") != -1) {
+ description = description.replace(/\//gm, "/\u200B");
+ }
+ // description 400ȓɂ
+ if(description.length > 400) {
+ description = description.substring(0,400) + "...";
+ }
+
+ var popX = aEvent.screenX + 10;
+ var popY = aEvent.screenY + 20;
+
+ rssItemListPopup.title = aEvent.originalTarget.label;
+ rssItemListPopup.description = description;
+ rssItemListPopup.autoPosition = false;
+ rssItemListPopup.moveTo(popX, popY);
+ popupTimeoutId = setTimeout("rssItemListPopup.showPopup(rssItemListBox)", 150);
+}
+
+function populateToolTip(e) {
+ // if setting disabled
+ if(!getCheckboxCheck("chkShowTooltip")) {
+ e.preventDefault();
+ return;
+ }
+
+ if(document.tooltipNode == rssItemListBox) {
+ e.preventDefault();
+ return;
+ }
+ var listItem = document.tooltipNode;
+ var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
+ var items = currentFeed.getItems(feedItemOrder);
+ var description = htmlToText(items[listItem.value].getContent());
+ if(description.indexOf("/") != -1) {
+ description = description.replace(/\//gm, "/\u200B");
+ }
+ if(description.length > 400) {
+ description = description.substring(0,400) + "...";
+ }
+
+ rssItemToolTip.title = listItem.label;
+ rssItemToolTip.description = description;
+}
+
+// TODO: Is this still used?
+function hideRssItemListPopup(aEvent) {
+ clearTimeout(popupTimeoutId);
+ rssItemListPopup.hidePopup();
+}
+
+function htmlToText(aStr) {
+ var formatConverter = Components.classes["@mozilla.org/widget/htmlformatconverter;1"].createInstance(Components.interfaces.nsIFormatConverter);
+ var fromStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
+ fromStr.data = aStr;
+ var toStr = { value: null };
+
+ try {
+ formatConverter.convert("text/html", fromStr, fromStr.toString().length, "text/unicode", toStr, {});
+ } catch(e) {
+ return aStr;
+ }
+ if(toStr.value) {
+ toStr = toStr.value.QueryInterface(Components.interfaces.nsISupportsString);
+ return toStr.toString();
+ }
+ return aStr;
+}
+
+
+
+// ++++++++++ +++++++++ HTTP ++++++++++ +++++++++
+
+function httpGet(aURL) {
+ if(rssLoading) {
+ httpReq.abort();
+ rssLoading = false;
+ }
+
+ responseXML = null;
+
+ httpReq = new XMLHttpRequest();
+
+ httpReq.open("GET", aURL);
+
+ httpReq.onload = httpLoaded;
+ httpReq.onerror = httpError;
+ httpReq.onreadystatechange = httpReadyStateChange;
+
+ try {
+ httpReq.setRequestHeader("User-Agent", USER_AGENT);
+ httpReq.overrideMimeType("application/xml");
+ } catch(e) {
+ httpGetResult(RESULT_ERROR_FAILURE);
+ }
+
+ try {
+ httpReq.send(null);
+ rssLoading = true;
+ } catch(e) {
+ httpGetResult(RESULT_ERROR_FAILURE);
+ }
+}
+
+function httpError(e) {
+ logMessage("HTTP Error: " + e.target.status + " - " + e.target.statusText);
+ httpGetResult(RESULT_NOT_AVAILABLE);
+}
+
+function httpReadyStateChange() {
+
+ if(httpReq.readyState == 2) {
+ try {
+ if(httpReq.status == 404) {
+ httpGetResult(RESULT_NOT_FOUND);
+ }
+ } catch(e) {
+ httpGetResult(RESULT_NOT_AVAILABLE);
+ return;
+ }
+ } else if(httpReq.readyState == 3) {}
+}
+
+function httpLoaded(e) {
+ responseXML = httpReq.responseXML;
+ var rootNodeName = responseXML.documentElement.localName.toLowerCase();
+
+ switch(rootNodeName) {
+ case "parsererror":
+ // XML Parse Error
+ httpGetResult(RESULT_PARSE_ERROR);
+ break;
+ case "rss":
+ case "rdf":
+ case "feed":
+ httpGetResult(RESULT_OK);
+ break;
+ default:
+ // Not RSS or Atom
+ httpGetResult(RESULT_NOT_RSS);
+ break;
+ }
+}
+
+function httpGetResult(aResultCode) {
+ httpReq.abort();
+ rssLoading = false;
+
+ if(aResultCode == RESULT_OK) {
+ currentFeed = new Feed(responseXML);
+
+ if(lastResource && lastResource.res) {
+ if(CommonFunc.getPrefValue(CommonFunc.AUTO_FEED_TITLE, "bool", true)) {
+ if(CommonFunc.getBMDSProperty(lastResource.res, CommonFunc.BM_NAME) != currentFeed.getTitle()) {
+ CommonFunc.setBMDSProperty(lastResource.res, CommonFunc.BM_NAME, currentFeed.getTitle());
+ }
+ }
+
+ BMSVC.updateLastVisitedDate(lastResource.url, "UTF-8");
+ CommonFunc.setBMDSProperty(lastResource.res, CommonFunc.BM_DESCRIPTION, CommonFunc.STATUS_NO_UPDATE + " " + currentFeed.getSignature());
+ }
+
+ setStatusDone();
+ setRssItemListBox();
+
+ if(CommonFunc.getPrefValue(CommonFunc.RENDER_FEEDS, "bool", true)) {
+ CreateHTML.openHTML(currentFeed);
+ }
+ } else {
+ setStatusError(resultStrArray[aResultCode]);
+ }
+}
+
+
+// link visit code based on LinkVisitor.mozdev.org
+
+
+const _uriFixup = Components.classes["@mozilla.org/docshell/urifixup;1"].getService(Components.interfaces.nsIURIFixup);
+const _globalHistory = Components.classes['@mozilla.org/browser/global-history;2'].getService(Components.interfaces.nsIGlobalHistory2);
+const _browserHistory = Components.classes["@mozilla.org/browser/global-history;2"].getService(Components.interfaces.nsIBrowserHistory);
+
+function markURIAsRead( sURI )
+{
+ markURIReadState( sURI, true );
+}
+
+function markURIAsUnread( sURI )
+{
+ markURIReadState( sURI, false );
+}
+
+function markURIReadState( sURI, bRead )
+{
+ if ( !sURI )
+ return;
+
+ // why do we need to fixup the URI?
+ var fixupURI = _getFixupURI( sURI );
+ var visited = _globalHistory.isVisited( fixupURI );
+ if ( visited == bRead )
+ return;
+
+ if ( bRead )
+ _globalHistory.addURI( fixupURI, false, true );
+ else
+ _browserHistory.removePage( fixupURI.spec );
+}
+
+function _getFixupURI( sURI )
+{
+ try
+ {
+ return _uriFixup.createFixupURI( sURI, 0 );
+ }
+ catch( e )
+ {
+ return null;
+ }
+}
+
+function isVisited( sURI )
+{
+ var fixupURI = _getFixupURI( sURI );
+ return _globalHistory.isVisited( fixupURI );
+}
+
+
+// RSS Item Context Menu
+
+/**
+ * This is called before the context menu for the listbox is shown. Here we enabled/disable
+ * menu items as well as change the text to correctly reflect the read state
+ * @param e : Event
+ * @returns void
+ */
+function updateItemContextMenu( e )
+{
+ var popupNode = document.popupNode;
+
+ var menuItemIds = ["rssOpenItem", "rssOpenNewTabItem", "rssOpenNewWindowItem",
+ "rssMarkAsReadItem", "rssMarkAllAsReadItem", "rssMarkAllAsUnreadItem"];
+ var menuItems = {};
+ for ( var i = 0; i < menuItemIds.length; i++ )
+ {
+ menuItems[ menuItemIds[i] ] = document.getElementById( menuItemIds[i] );
+ }
+
+ // cmd_bm_open
+ // cmd_bm_openinnewwindow
+ // cmd_bm_openinnewtab
+ menuItems.rssOpenItem.label = bmStrRes.getString("cmd_bm_open");
+ menuItems.rssOpenNewTabItem.label = bmStrRes.getString("cmd_bm_openinnewtab");
+ menuItems.rssOpenNewWindowItem.label = bmStrRes.getString("cmd_bm_openinnewwindow");
+
+ menuItems.rssMarkAsReadItem.label = strRes.getString("itemcontext_markasread");
+ menuItems.rssMarkAllAsReadItem.label = strRes.getString("itemcontext_markallasread");
+ menuItems.rssMarkAllAsUnreadItem.label = strRes.getString("itemcontext_markallasunread");
+
+ if ( popupNode.localName == "listbox" )
+ {
+ // only mark all should work
+ for ( var id in menuItems )
+ {
+ if ( (id == "rssMarkAllAsReadItem" || id == "rssMarkAllAsUnreadItem") &&
+ currentFeed && rssItemListBox.getRowCount() > 0 )
+ menuItems[id].removeAttribute( "disabled" );
+ else
+ menuItems[id].setAttribute( "disabled", "true" );;
+ }
+ }
+ else
+ {
+ for ( id in menuItems )
+ menuItems[id].removeAttribute( "disabled" );
+
+ // need to figure out if the current list item is visited
+ var listItem = popupNode;
+ var feedItem = getFeedItemFromListItem( listItem );
+ var visited = isVisited( feedItem.getLink() );
+ menuItems.rssMarkAsReadItem.label =
+ strRes.getString( visited ? "itemcontext_markasunread" : "itemcontext_markasread" );
+
+ // lets make sure the visited flag is correct in the ui
+ if ( visited )
+ listItem.setAttribute( "visited", "true" );
+ else
+ listItem.removeAttribute( "visited" );
+ }
+}
+
+
+/**
+ * This marks the selected items as read/unread. This works with multiple
+ * selection as well if we want to enable that in the future.
+ * @param e : Event
+ * @returns void
+ */
+function toggleMarkAsRead( e )
+{
+ var listItems = rssItemListBox.selectedItems;
+ for ( var i = 0; i < listItems.length; i++ )
+ {
+ var listItem = listItems[i];
+ var feedItem = getFeedItemFromListItem( listItem );
+ var uri = feedItem.getLink();
+ var visited = isVisited( uri );
+ markURIReadState( uri, !visited );
+ if ( !visited )
+ listItem.setAttribute( "visited", "true" );
+ else
+ listItem.removeAttribute( "visited" );
+ }
+}
+
+/**
+ * This called from the context menu.
+ * @param e : Event
+ * @returns void
+ */
+function markAllAsRead( e )
+{
+ markAllReadState( true );
+}
+
+/**
+ * This called from the context menu.
+ * @param e : Event
+ * @returns void
+ */
+function markAllAsUnread( e )
+{
+ markAllReadState( false );
+}
+
+/**
+ * Marks all read or unread
+ * @param bRead : Boolean Whether to mark as read or unread
+ * @returns void
+ */
+function markAllReadState( bRead )
+{
+ if ( currentFeed )
+ {
+ var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
+ var feedItems = currentFeed.getItems( feedItemOrder );
+
+ for ( var i = 0; i < feedItems.length; i++ )
+ markURIReadState( feedItems[i].getLink(), bRead );
+
+ var listItem;
+ for ( var y = 0; y < rssItemListBox.getRowCount(); y++ )
+ {
+ listItem = rssItemListBox.getItemAtIndex( y );
+ if ( bRead )
+ listItem.setAttribute( "visited", "true" );
+ else
+ listItem.removeAttribute( "visited" );
+ }
+ }
+}
+
+// This takes a list item from the rss list box and returns the uri it represents
+// this seems a bit inefficient. Shouldn't there be a direct mapping between these?
+
+/**
+ * This takes a listitem element and returns the FeedItem it represents
+ * @param oListItem : XULListItem
+ * @returns FeedItem
+ */
+function getFeedItemFromListItem( oListItem )
+{
+ var feedItemOrder = CommonFunc.getPrefValue(CommonFunc.FEED_ITEM_ORDER, "str", "chrono");
+ var items = currentFeed.getItems( feedItemOrder );
+ return items[ oListItem.value ];
+}
+
+
+
+/**
+ * Opens a link in the same window, a new tab or a new window
+ *
+ * @param sURI : String
+ * @param oType : Object If this is an Event object we check the modifiers.
+ * Otherwise we assume it is a string describing the
+ * window type.
+ * @returns void
+ */
+function openURI( sURI, oType )
+{
+ var windowType;
+ if ( oType instanceof Event )
+ {
+ // figure out what kind of open we want
+ if ( oType.button == 1 || oType.ctrlKey ) // click middle button or ctrl click
+ windowType = "tab";
+ else if ( oType.shiftKey )
+ windowType = "window";
+ }
+ else
+ {
+ windowType = oType;
+ }
+
+ switch ( windowType )
+ {
+ case "tab":
+ getContentBrowser().addTab( sURI );
+ break;
+ case "window":
+ document.commandDispatcher.focusedWindow.open( sURI );
+ break;
+
+ default:
+ getContentBrowser().loadURI( sURI );
+ }
+}
+
+/**
+ * This is called by the context menu
+ * @param oType : String
+ * @returns void
+ */
+function openListItem( oType )
+{
+ var listItem = document.popupNode;
+ var feedItem = getFeedItemFromListItem( listItem );
+ openURI( feedItem.getLink(), oType );
+ listItem.setAttribute( "visited", "true" );
+}
diff --git a/src/sage/content/updatechecker.js b/src/sage/content/updatechecker.js
index 59e5a85..5273c6c 100755
--- a/src/sage/content/updatechecker.js
+++ b/src/sage/content/updatechecker.js
@@ -66,8 +66,10 @@ var UpdateChecker = {
}
},
- httpError: function() {
- logMessage("HTTP Error");
+ httpError: function(e) {
+ logMessage("HTTP Error: " + e.target.status + " - " + e.target.statusText);
+ UpdateChecker.httpReq.abort();
+ UpdateChecker.checkResult(false, 0);
},
httpReadyStateChange: function() {
@@ -112,14 +114,14 @@ var UpdateChecker = {
}
if(aSucceed) {
+ var sig = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_DESCRIPTION).match(/\[.*\]/);
if(aLastModified) {
- if(aLastModified > lastVisit) {
+ if((aLastModified > lastVisit) && (sig != feed.getSignature())) {
status = CommonFunc.STATUS_UPDATE;
} else {
status = CommonFunc.STATUS_NO_UPDATE;
}
} else {
- var sig = CommonFunc.getBMDSProperty(this.lastResource, CommonFunc.BM_DESCRIPTION).match(/\[.*\]/);
if(sig != feed.getSignature()) {
//logMessage("signature mismatch: " + feed.getTitle() + "; old sig: " + sig + " new sig: " + feed.getSignature());
status = CommonFunc.STATUS_UPDATE;
diff --git a/src/sage/locale/en-US/sage.dtd b/src/sage/locale/en-US/sage.dtd
index c7b6463..879fa04 100755
--- a/src/sage/locale/en-US/sage.dtd
+++ b/src/sage/locale/en-US/sage.dtd
@@ -1,52 +1,52 @@
-<!ENTITY sage.label "Sage">
-<!ENTITY sage.version "1.2">
-<!ENTITY sage.version.label "version">
-
-<!ENTITY sage.toolbarLabel "Sage">
-<!ENTITY sage.sidebarTitle "Sage">
-<!ENTITY sage.tooltip "Displays Sage">
-
-<!ENTITY menu.view "View">
-<!ENTITY menu.showSearchBar "Show Feed Search Bar">
-<!ENTITY menu.showFeedItemList "Show Feed Item List">
-<!ENTITY menu.showDescTooltip "Show Description Tooltips">
-<!ENTITY menu.openHTML "Open Feeds In Contents Area">
-<!ENTITY menu.tools "Options">
-<!ENTITY menu.checkUpdate "Check Feeds">
-<!ENTITY menu.manageRSSList "Manage Feed List...">
-<!ENTITY menu.opmlImportExport "OPML Import/Export...">
-<!ENTITY menu.setting "Settings...">
-<!ENTITY menu.sageProjectFeed "Sage Project News">
-<!ENTITY menu.discoverFeeds "Discover Feeds">
-
-<!-- Feed Discovery -->
-<!ENTITY discovery.status.searching "Searching current page">
-<!ENTITY discovery.button.addFeed "Add Feed">
-<!ENTITY discovery.button.close "Close">
-<!ENTITY discovery.header.title "Title">
-<!ENTITY discovery.header.format "Format">
-<!ENTITY discovery.header.lastPubDate "Last Update">
-<!ENTITY discovery.header.itemCount "Items">
-<!ENTITY discovery.header.url "URL">
-
-<!-- Settings Dialog -->
-<!ENTITY settings.general.caption "General">
-<!ENTITY settings.autoFeedTitle.label "Automatically update feed titles">
-<!ENTITY settings.renderFeeds.label "Render feeds in contents area">
-<!ENTITY settings.twelveHourClock.label "Use 12 hour clock">
-<!ENTITY settings.feedItemOrder.label "Feed item order">
-<!ENTITY settings.feedItemOrder.chrono "Chronological">
-<!ENTITY settings.feedItemOrder.source "Source">
-<!ENTITY settings.feedDiscoveryMode.label "Feed discovery mode">
-<!ENTITY settings.feedDiscoveryMode.exhaustive "Exhaustive">
-<!ENTITY settings.feedDiscoveryMode.conservative "Conservative">
-<!ENTITY settingWindow.title "Sage Settings">
-<!ENTITY selectFolder.label "Select Feed Folder">
-<!ENTITY openInContentsArea.caption "Feed Rendering">
-<!ENTITY enableUserCss.label "Use custom CSS">
-<!ENTITY browseCss.label "Browse...">
-<!ENTITY allowEContent.label "Allow HTML tags">
-
-
-<!ENTITY openSageSidebar.commandkey "S">
-<!ENTITY openSageSidebar.modifiersKey "alt">
+<!ENTITY sage.label "Sage">
+<!ENTITY sage.version "1.3">
+<!ENTITY sage.version.label "version">
+
+<!ENTITY sage.toolbarLabel "Sage">
+<!ENTITY sage.sidebarTitle "Sage">
+<!ENTITY sage.tooltip "Displays Sage">
+
+<!ENTITY menu.view "View">
+<!ENTITY menu.showSearchBar "Show Feed Search Bar">
+<!ENTITY menu.showFeedItemList "Show Feed Item List">
+<!ENTITY menu.showDescTooltip "Show Description Tooltips">
+<!ENTITY menu.openHTML "Open Feeds In Contents Area">
+<!ENTITY menu.tools "Options">
+<!ENTITY menu.checkUpdate "Check Feeds">
+<!ENTITY menu.manageRSSList "Manage Feed List...">
+<!ENTITY menu.opmlImportExport "OPML Import/Export...">
+<!ENTITY menu.setting "Settings...">
+<!ENTITY menu.sageProjectFeed "Sage Project News">
+<!ENTITY menu.discoverFeeds "Discover Feeds">
+
+<!-- Feed Discovery -->
+<!ENTITY discovery.status.searching "Searching current page">
+<!ENTITY discovery.button.addFeed "Add Feed">
+<!ENTITY discovery.button.close "Close">
+<!ENTITY discovery.header.title "Title">
+<!ENTITY discovery.header.format "Format">
+<!ENTITY discovery.header.lastPubDate "Last Update">
+<!ENTITY discovery.header.itemCount "Items">
+<!ENTITY discovery.header.url "URL">
+
+<!-- Settings Dialog -->
+<!ENTITY settings.general.caption "General">
+<!ENTITY settings.autoFeedTitle.label "Automatically update feed titles">
+<!ENTITY settings.renderFeeds.label "Render feeds in contents area">
+<!ENTITY settings.twelveHourClock.label "Use 12 hour clock">
+<!ENTITY settings.feedItemOrder.label "Feed item order">
+<!ENTITY settings.feedItemOrder.chrono "Chronological">
+<!ENTITY settings.feedItemOrder.source "Source">
+<!ENTITY settings.feedDiscoveryMode.label "Feed discovery mode">
+<!ENTITY settings.feedDiscoveryMode.exhaustive "Exhaustive">
+<!ENTITY settings.feedDiscoveryMode.conservative "Conservative">
+<!ENTITY settingWindow.title "Sage Settings">
+<!ENTITY selectFolder.label "Select Feed Folder">
+<!ENTITY openInContentsArea.caption "Feed Rendering">
+<!ENTITY enableUserCss.label "Use custom CSS">
+<!ENTITY browseCss.label "Browse...">
+<!ENTITY allowEContent.label "Allow HTML tags">
+
+
+<!ENTITY openSageSidebar.commandkey "S">
+<!ENTITY openSageSidebar.modifiersKey "alt">
diff --git a/src/sage/locale/en-US/sage.properties b/src/sage/locale/en-US/sage.properties
index 607a971..80e4a6f 100755
--- a/src/sage/locale/en-US/sage.properties
+++ b/src/sage/locale/en-US/sage.properties
@@ -1,90 +1,90 @@
-RESULT_OK_STR = OK
-RESULT_PARSE_ERROR_STR = XML Parse Error
-RESULT_NOT_RSS_STR = Feed Parse Error
-RESULT_NOT_FOUND_STR = File Not Found
-RESULT_NOT_AVAILABLE_STR = URL Not Available
-RESULT_ERROR_FAILURE_STR = Load Failure
-RESULT_LOADING = Loading
-RESULT_CHECKING = Checking
-
-CHECK_UPDATE = Check Feeds
-GET_RSS_TITLE= Get Feed Title
-
-
-# feed discovery messages
-
-discovery_external_feeds_category = External Feeds
-discovery_status_discovered = Discovered
-discovery_status_site_feed = site feed
-discovery_status_site_feeds = site feeds
-discovery_status_and = and
-discovery_status_external_feed = external feed
-discovery_status_external_feeds = external feeds
-discovery_status_none_found = No feeds were discovered
-
-
-# get feed title dialog
-
-get_feed_title = New Feed Title
-
-
-# OPML wizzard
-
-opml_import_done = Import Complete
-opml_export_done = Export Complete
-opml_path_blank = Please choose an OPML file.
-opml_path_nofile = The specified file does not exist.
-opml_path_invalid = Invalid file path.
-opml_import_fail = Load Failure
-opml_import_badfile = This does not appear to be an OPML file.
-opml_export_nocreate = File creation error
-opml_select_file = Select OPML File
-opml_opml_file = OPML File
-
-# Date rendering values
-
-date_sunday = Sunday
-date_sunday_short = Sun
-date_monday = Monday
-date_monday_short = Mon
-date_tuesday = Tuesday
-date_tuesday_short = Tue
-date_wednesday = Wednesday
-date_wednesday_short = Wed
-date_thursday = Thursday
-date_thursday_short = Thu
-date_friday = Friday
-date_friday_short = Fri
-date_saturday = Saturday
-date_saturday_short = Sat
-
-date_january = January
-date_january_short = Jan
-date_february = February
-date_february_short = Feb
-date_march = March
-date_march_short = Mar
-date_april = April
-date_april_short = Apr
-date_may = May
-date_may_short = May
-date_june = June
-date_june_short = Jun
-date_july = July
-date_july_short = Jul
-date_august = August
-date_august_short = Aug
-date_september = September
-date_september_short = Sep
-date_october = October
-date_october_short = Oct
-date_november = November
-date_november_short = Nov
-date_december = December
-date_december_short = Dec
-
-# Item context menu
-itemcontext_markasread = Mark as Read
-itemcontext_markasunread = Mark as Unread
-itemcontext_markallasread = Mark All as Read
-itemcontext_markallasunread = Mark All as Unread
+RESULT_OK_STR = OK
+RESULT_PARSE_ERROR_STR = XML Parse Error
+RESULT_NOT_RSS_STR = Feed Parse Error
+RESULT_NOT_FOUND_STR = File Not Found
+RESULT_NOT_AVAILABLE_STR = URL Not Available
+RESULT_ERROR_FAILURE_STR = Load Failure
+RESULT_LOADING = Loading
+RESULT_CHECKING = Checking
+
+CHECK_UPDATE = Check Feeds
+GET_RSS_TITLE= Get Feed Title
+
+
+# feed discovery messages
+
+discovery_external_feeds_category = External Feeds
+discovery_status_discovered = Discovered
+discovery_status_site_feed = site feed
+discovery_status_site_feeds = site feeds
+discovery_status_and = and
+discovery_status_external_feed = external feed
+discovery_status_external_feeds = external feeds
+discovery_status_none_found = No feeds were discovered
+
+
+# get feed title dialog
+
+get_feed_title = New Feed Title
+
+
+# OPML wizzard
+
+opml_import_done = Import Complete
+opml_export_done = Export Complete
+opml_path_blank = Please choose an OPML file.
+opml_path_nofile = The specified file does not exist.
+opml_path_invalid = Invalid file path.
+opml_import_fail = Load Failure
+opml_import_badfile = This does not appear to be an OPML file.
+opml_export_nocreate = File creation error
+opml_select_file = Select OPML File
+opml_opml_file = OPML File
+
+# Date rendering values
+
+date_sunday = Sunday
+date_sunday_short = Sun
+date_monday = Monday
+date_monday_short = Mon
+date_tuesday = Tuesday
+date_tuesday_short = Tue
+date_wednesday = Wednesday
+date_wednesday_short = Wed
+date_thursday = Thursday
+date_thursday_short = Thu
+date_friday = Friday
+date_friday_short = Fri
+date_saturday = Saturday
+date_saturday_short = Sat
+
+date_january = January
+date_january_short = Jan
+date_february = February
+date_february_short = Feb
+date_march = March
+date_march_short = Mar
+date_april = April
+date_april_short = Apr
+date_may = May
+date_may_short = May
+date_june = June
+date_june_short = Jun
+date_july = July
+date_july_short = Jul
+date_august = August
+date_august_short = Aug
+date_september = September
+date_september_short = Sep
+date_october = October
+date_october_short = Oct
+date_november = November
+date_november_short = Nov
+date_december = December
+date_december_short = Dec
+
+# Item context menu
+itemcontext_markasread = Mark as Read
+itemcontext_markasunread = Mark as Unread
+itemcontext_markallasread = Mark All as Read
+itemcontext_markallasunread = Mark All as Unread
diff --git a/src/sage/locale/fr-FR/sage.dtd b/src/sage/locale/fr-FR/sage.dtd
index ab5c7c8..b418c2c 100644
--- a/src/sage/locale/fr-FR/sage.dtd
+++ b/src/sage/locale/fr-FR/sage.dtd
@@ -1,10 +1,10 @@
<!ENTITY sage.label "Sage">
-<!ENTITY sage.version "1.2">
+<!ENTITY sage.version "1.2.2">
<!ENTITY sage.version.label "">
<!ENTITY sage.toolbarLabel "Sage">
<!ENTITY sage.sidebarTitle "Sage">
-<!ENTITY sage.tooltip "Affiche le panneau latéral Sage">
+<!ENTITY sage.tooltip "Affiche le panneau latéral Sage">
<!ENTITY menu.view "Affichage">
<!ENTITY menu.showSearchBar "Afficher la barre de recherche des fils">
@@ -12,12 +12,12 @@
<!ENTITY menu.showDescTooltip "Afficher les bulles descriptives">
<!ENTITY menu.openHTML "Afficher le contenu des fils dans la zone de navigation">
<!ENTITY menu.tools "Options">
-<!ENTITY menu.checkUpdate "Vérifier les fils">
-<!ENTITY menu.manageRSSList "Gérer la liste des fils...">
+<!ENTITY menu.checkUpdate "Vérifier les fils">
+<!ENTITY menu.manageRSSList "Gérer la liste des fils...">
<!ENTITY menu.opmlImportExport "Import/Export OPML...">
<!ENTITY menu.setting "Configuration...">
-<!ENTITY menu.sageProjectFeed "Nouveautés du projet Sage">
-<!ENTITY menu.discoverFeeds "Découvrir de nouveaux fils">
+<!ENTITY menu.sageProjectFeed "Nouveautés du projet Sage">
+<!ENTITY menu.discoverFeeds "Découvrir de nouveaux fils">
<!-- Feed Discovery -->
<!ENTITY discovery.status.searching "Chercher dans la page en cours">
@@ -25,25 +25,25 @@
<!ENTITY discovery.button.close "Fermer">
<!ENTITY discovery.header.title "Nom">
<!ENTITY discovery.header.format "Format">
-<!ENTITY discovery.header.lastPubDate "Dernière mise à jour">
-<!ENTITY discovery.header.itemCount "Ãléments">
+<!ENTITY discovery.header.lastPubDate "Dernière mise à jour">
+<!ENTITY discovery.header.itemCount "Éléments">
<!ENTITY discovery.header.url "Adresse">
<!-- Setting Dialog -->
-<!ENTITY settings.general.caption "Général">
-<!ENTITY settings.autoFeedTitle.label "Mise à jour automatique des titres des fils">
+<!ENTITY settings.general.caption "Général">
+<!ENTITY settings.autoFeedTitle.label "Mise à jour automatique des titres des fils">
<!ENTITY settings.renderFeeds.label "Afficher les fils dans la zone de navigation">
<!ENTITY settings.twelveHourClock.label "Utiliser une horloge sur 12 heures">
<!ENTITY settingWindow.title "Configuration de Sage">
-<!ENTITY selectFolder.label "Sélection du dossier des fils">
-<!ENTITY settings.feedItemOrder.label "Ordre des éléments du fil">
+<!ENTITY selectFolder.label "Sélection du dossier des fils">
+<!ENTITY settings.feedItemOrder.label "Ordre des éléments du fil">
<!ENTITY settings.feedItemOrder.chrono "Chronologique">
<!ENTITY settings.feedItemOrder.source "Source">
-<!ENTITY settings.feedDiscoveryMode.label "Mode de découverte des fils">
+<!ENTITY settings.feedDiscoveryMode.label "Mode de découverte des fils">
<!ENTITY settings.feedDiscoveryMode.exhaustive "Exhaustif">
<!ENTITY settings.feedDiscoveryMode.conservative "Prudent">
<!ENTITY openInContentsArea.caption "Ouverture dans la zone de navigation">
-<!ENTITY enableUserCss.label "Utiliser une feuille de style CSS personnalisée">
+<!ENTITY enableUserCss.label "Utiliser une feuille de style CSS personnalisée">
<!ENTITY browseCss.label "Parcourir...">
<!ENTITY allowEContent.label "Autoriser les balises HTML">
@@ -51,3 +51,4 @@
<!ENTITY openSageSidebar.commandkey "S">
<!ENTITY openSageSidebar.modifiersKey "alt">
+
diff --git a/src/sage/locale/fr-FR/sage.properties b/src/sage/locale/fr-FR/sage.properties
index 1b87af0..dee591d 100644
--- a/src/sage/locale/fr-FR/sage.properties
+++ b/src/sage/locale/fr-FR/sage.properties
@@ -1,90 +1,90 @@
-RESULT_OK_STR = OK
-RESULT_PARSE_ERROR_STR = Erreur de syntaxe XML
-RESULT_NOT_RSS_STR = Ce fichier XML n'est pas un fil
-RESULT_NOT_FOUND_STR = Fichier introuvable
-RESULT_NOT_AVAILABLE_STR = URL non disponible
-RESULT_ERROR_FAILURE_STR = Erreur de chargement
-RESULT_LOADING = Cherche
-RESULT_CHECKING = Checking
-
-CHECK_UPDATE = V\u00e9rification des fils
-GET_RSS_TITLE= Trouver le nom du fil
-
-
-# feed discovery messages
-
-discovery_external_feeds_category = Fils externes
-discovery_status_discovered = D\u00e9couvert
-discovery_status_site_feed = fil du site
-discovery_status_site_feeds = fils du site
-discovery_status_and = et
-discovery_status_external_feed = fil externe
-discovery_status_external_feeds = fils externes
-discovery_status_none_found = Aucun fil d\u00e9couvert
-
-
-# get feed title dialog
-
-get_feed_title = Nouveau nom du fil
-
-
-# OPML wizzard
-
-opml_import_done = Import termin\u00e9
-opml_export_done = Export termin\u00e9
-opml_path_blank = Choisir un fichier OPML
-opml_path_nofile = Le fichier n'existe pas.
-opml_path_invalid = Chemin incorrect.
-opml_import_fail = \u00c9chec de chargement.
-opml_import_badfile = Ce fichier n'est pas une liste OPML.
-opml_export_nocreate = Erreur de cr\u00e9ation de fichier
-opml_select_file = S\u00e9lectionner un fichier OPML
-opml_opml_file = Liste OPML
-
-# Date rendering values
-
-date_sunday = Dimanche
-date_sunday_short = Dim
-date_monday = Lundi
-date_monday_short = Lun
-date_tuesday = Mardi
-date_tuesday_short = Mar
-date_wednesday = Mercredi
-date_wednesday_short = Mer
-date_thursday = Jeudi
-date_thursday_short = Jeu
-date_friday = Vendredi
-date_friday_short = Ven
-date_saturday = Samedi
-date_saturday_short = Sam
-
-date_january = Janvier
-date_january_short = Jan
-date_february = F\u00e9vrier
-date_february_short = F\u00e9v
-date_march = Mars
-date_march_short = Mar
-date_april = Avril
-date_april_short = Avr
-date_may = Mai
-date_may_short = Mai
-date_june = Juin
-date_june_short = Juin
-date_july = Juillet
-date_july_short = Juil
-date_august = Ao\u00fbt
-date_august_short = Ao\u00fbt
-date_september = Septembre
-date_september_short = Sep
-date_october = Octobre
-date_october_short = Oct
-date_november = Novembre
-date_november_short = Nov
-date_december = D\u00e9cembre
-date_december_short = D\u00e9c
-
-# Item context menu
-itemcontext_markasread = Mark as Read
-itemcontext_markasunread = Mark as Unread
-itemcontext_markallasread = Mark All as Read
-itemcontext_markallasunread = Mark All as Unread
+RESULT_OK_STR = OK
+RESULT_PARSE_ERROR_STR = Erreur de syntaxe XML
+RESULT_NOT_RSS_STR = Ce fichier XML n'est pas un fil
+RESULT_NOT_FOUND_STR = Fichier introuvable
+RESULT_NOT_AVAILABLE_STR = URL non disponible
+RESULT_ERROR_FAILURE_STR = Erreur de chargement
+RESULT_LOADING = Cherche
+RESULT_CHECKING = Checking
+
+CHECK_UPDATE = V\u00e9rification des fils
+GET_RSS_TITLE= Trouver le nom du fil
+
+
+# feed discovery messages
+
+discovery_external_feeds_category = Fils externes
+discovery_status_discovered = D\u00e9couvert
+discovery_status_site_feed = fil du site
+discovery_status_site_feeds = fils du site
+discovery_status_and = et
+discovery_status_external_feed = fil externe
+discovery_status_external_feeds = fils externes
+discovery_status_none_found = Aucun fil d\u00e9couvert
+
+
+# get feed title dialog
+
+get_feed_title = Nouveau nom du fil
+
+
+# OPML wizzard
+
+opml_import_done = Import termin\u00e9
+opml_export_done = Export termin\u00e9
+opml_path_blank = Choisir un fichier OPML
+opml_path_nofile = Le fichier n'existe pas.
+opml_path_invalid = Chemin incorrect.
+opml_import_fail = \u00c9chec de chargement.
+opml_import_badfile = Ce fichier n'est pas une liste OPML.
+opml_export_nocreate = Erreur de cr\u00e9ation de fichier
+opml_select_file = S\u00e9lectionner un fichier OPML
+opml_opml_file = Liste OPML
+
+# Date rendering values
+
+date_sunday = Dimanche
+date_sunday_short = Dim
+date_monday = Lundi
+date_monday_short = Lun
+date_tuesday = Mardi
+date_tuesday_short = Mar
+date_wednesday = Mercredi
+date_wednesday_short = Mer
+date_thursday = Jeudi
+date_thursday_short = Jeu
+date_friday = Vendredi
+date_friday_short = Ven
+date_saturday = Samedi
+date_saturday_short = Sam
+
+date_january = Janvier
+date_january_short = Jan
+date_february = F\u00e9vrier
+date_february_short = F\u00e9v
+date_march = Mars
+date_march_short = Mar
+date_april = Avril
+date_april_short = Avr
+date_may = Mai
+date_may_short = Mai
+date_june = Juin
+date_june_short = Juin
+date_july = Juillet
+date_july_short = Juil
+date_august = Ao\u00fbt
+date_august_short = Ao\u00fbt
+date_september = Septembre
+date_september_short = Sep
+date_october = Octobre
+date_october_short = Oct
+date_november = Novembre
+date_november_short = Nov
+date_december = D\u00e9cembre
+date_december_short = D\u00e9c
+
+# Item context menu
+itemcontext_markasread = Mark as Read
+itemcontext_markasunread = Mark as Unread
+itemcontext_markallasread = Mark All as Read
+itemcontext_markallasunread = Mark All as Unread
diff --git a/src/sage/locale/hu-HU/sage.dtd b/src/sage/locale/hu-HU/sage.dtd
index ddf2b0c..0fbfcb4 100755
--- a/src/sage/locale/hu-HU/sage.dtd
+++ b/src/sage/locale/hu-HU/sage.dtd
@@ -1,53 +1,53 @@
-<!ENTITY sage.label "Sage">
-<!ENTITY sage.version "1.2">
-<!ENTITY sage.version.label "">
-
-<!ENTITY sage.toolbarLabel "Sage">
-<!ENTITY sage.sidebarTitle "Sage">
-<!ENTITY sage.tooltip "Sage megjelen�t�se">
-
-<!ENTITY menu.view "Megn�z">
-<!ENTITY menu.showSearchBar "Keres�mez� mutat�sa">
-<!ENTITY menu.showFeedItemList "Mutassa a let�lt�tt elemek list�j�t">
-<!ENTITY menu.showDescTooltip "Le�r�s-tooltip megjelen�t�se">
-<!ENTITY menu.openHTML "Megnyit�s a tartalmi r�szben">
-<!ENTITY menu.tools "Eszk�z�k">
-<!ENTITY menu.checkUpdate "Friss�l�sek ellen�rz�se">
-<!ENTITY menu.manageRSSList "RSS lista menedzsel�se...">
-<!ENTITY menu.opmlImportExport "OPML import/export...">
-<!ENTITY menu.setting "Be�ll�t�sok...">
-<!ENTITY menu.sageProjectFeed "A Sage projekt h�rei">
-<!ENTITY menu.discoverFeeds "Adagol�k keres�se">
-
-<!-- Feed Discovery -->
-<!ENTITY discovery.status.searching "Keres�s a jelenlegi oldalon">
-<!ENTITY discovery.button.addFeed "Adagol� hozz�ad�sa">
-<!ENTITY discovery.button.close "Bez�r">
-<!ENTITY discovery.header.title "C�m">
-<!ENTITY discovery.header.format "Form�tum">
-<!ENTITY discovery.header.lastPubDate "Utols� friss��s">
-<!ENTITY discovery.header.itemCount "Elemek">
-<!ENTITY discovery.header.url "URL">
-
-<!-- Setting Dialog -->
-<!ENTITY settings.general.caption "�ltal�nos">
-<!ENTITY settings.autoFeedTitle.label "C�mek automatikus friss�t�se">
-<!ENTITY settings.renderFeeds.label "Megnyit�s a tartalmi r�szben">
-<!ENTITY settings.twelveHourClock.label "">
-<!ENTITY settingWindow.title "Az RSS olvas�panel be�ll�t�sai">
-<!ENTITY settings.feedItemOrder.label "Adagol� elemeinek sorrendje">
-<!ENTITY settings.feedItemOrder.chrono "Id�rendben">
-<!ENTITY settings.feedItemOrder.source "Forr�s szerint">
-<!ENTITY settings.feedDiscoveryMode.label "Adagol�k keres�si m�dja">
-<!ENTITY settings.feedDiscoveryMode.exhaustive "Alapos">
-<!ENTITY settings.feedDiscoveryMode.conservative "Hagyom�nyos">
-<!ENTITY selectFolder.label "V�lassza ki az RSS listamapp�t">
-<!ENTITY openInContentsArea.caption "Let�lt�ttek megjelen�t�se">
-<!ENTITY enableUserCss.label "Egy�ni st�luslap enged�lyez�se">
-<!ENTITY browseCss.label "B�ng�sz�s...">
-<!ENTITY allowEContent.label "HTML tagek enged�lyez�se">
-
-
-<!ENTITY openSageSidebar.commandkey "S">
-<!ENTITY openSageSidebar.modifiersKey "alt">
-
+<!ENTITY sage.label "Sage">
+<!ENTITY sage.version "1.2.2">
+<!ENTITY sage.version.label "">
+
+<!ENTITY sage.toolbarLabel "Sage">
+<!ENTITY sage.sidebarTitle "Sage">
+<!ENTITY sage.tooltip "Sage megjelen�t�se">
+
+<!ENTITY menu.view "Megn�z">
+<!ENTITY menu.showSearchBar "Keres�mez� mutat�sa">
+<!ENTITY menu.showFeedItemList "Mutassa a let�lt�tt elemek list�j�t">
+<!ENTITY menu.showDescTooltip "Le�r�s-tooltip megjelen�t�se">
+<!ENTITY menu.openHTML "Megnyit�s a tartalmi r�szben">
+<!ENTITY menu.tools "Eszk�z�k">
+<!ENTITY menu.checkUpdate "Friss�l�sek ellen�rz�se">
+<!ENTITY menu.manageRSSList "RSS lista menedzsel�se...">
+<!ENTITY menu.opmlImportExport "OPML import/export...">
+<!ENTITY menu.setting "Be�ll�t�sok...">
+<!ENTITY menu.sageProjectFeed "A Sage projekt h�rei">
+<!ENTITY menu.discoverFeeds "Adagol�k keres�se">
+
+<!-- Feed Discovery -->
+<!ENTITY discovery.status.searching "Keres�s a jelenlegi oldalon">
+<!ENTITY discovery.button.addFeed "Adagol� hozz�ad�sa">
+<!ENTITY discovery.button.close "Bez�r">
+<!ENTITY discovery.header.title "C�m">
+<!ENTITY discovery.header.format "Form�tum">
+<!ENTITY discovery.header.lastPubDate "Utols� friss��s">
+<!ENTITY discovery.header.itemCount "Elemek">
+<!ENTITY discovery.header.url "URL">
+
+<!-- Setting Dialog -->
+<!ENTITY settings.general.caption "�ltal�nos">
+<!ENTITY settings.autoFeedTitle.label "C�mek automatikus friss�t�se">
+<!ENTITY settings.renderFeeds.label "Megnyit�s a tartalmi r�szben">
+<!ENTITY settings.twelveHourClock.label "">
+<!ENTITY settingWindow.title "Az RSS olvas�panel be�ll�t�sai">
+<!ENTITY settings.feedItemOrder.label "Adagol� elemeinek sorrendje">
+<!ENTITY settings.feedItemOrder.chrono "Id�rendben">
+<!ENTITY settings.feedItemOrder.source "Forr�s szerint">
+<!ENTITY settings.feedDiscoveryMode.label "Adagol�k keres�si m�dja">
+<!ENTITY settings.feedDiscoveryMode.exhaustive "Alapos">
+<!ENTITY settings.feedDiscoveryMode.conservative "Hagyom�nyos">
+<!ENTITY selectFolder.label "V�lassza ki az RSS listamapp�t">
+<!ENTITY openInContentsArea.caption "Let�lt�ttek megjelen�t�se">
+<!ENTITY enableUserCss.label "Egy�ni st�luslap enged�lyez�se">
+<!ENTITY browseCss.label "B�ng�sz�s...">
+<!ENTITY allowEContent.label "HTML tagek enged�lyez�se">
+
+
+<!ENTITY openSageSidebar.commandkey "S">
+<!ENTITY openSageSidebar.modifiersKey "alt">
+
diff --git a/src/sage/locale/hu-HU/sage.properties b/src/sage/locale/hu-HU/sage.properties
index 9a7664f..2f52447 100755
--- a/src/sage/locale/hu-HU/sage.properties
+++ b/src/sage/locale/hu-HU/sage.properties
@@ -1,91 +1,91 @@
-RESULT_OK_STR = OK
-RESULT_PARSE_ERROR_STR = XML �rtelmez�si hiba
-RESULT_NOT_RSS_STR = Ez az XML f�jl nem RSS form�tum�
-RESULT_NOT_FOUND_STR = A f�jl nem tal�lhat�
-RESULT_NOT_AVAILABLE_STR = Nem el�rhet� URL
-RESULT_ERROR_FAILURE_STR = Bet�lt�si hiba
-RESULT_LOADING = Loading
-RESULT_CHECKING = Checking
-
-CHECK_UPDATE = Friss�l�sek ellen�rz�se
-GET_RSS_TITLE= RSS c�m let�lt�se
-
-
-# feed discovery messages
-
-discovery_external_feeds_category = K�ls� adagol�
-discovery_status_discovered = Megtal�lva
-discovery_status_site_feed = oldaladagol�
-discovery_status_site_feeds = oldaladagol�k
-discovery_status_and = �s
-discovery_status_external_feed = k�ls� adagol�
-discovery_status_external_feeds = k�ls� adagol�k
-discovery_status_none_found = Nem siker�lt adagol�t tal�lni
-
-
-# get feed title dialog
-
-get_feed_title = Az �j adagol� c�me
-
-
-# OPML wizzard
-
-opml_import_done = Import�l�s befejezve
-opml_export_done = Exportport�l�s befejezve
-opml_path_blank = V�lasszon ki egy OPML f�jlt.
-opml_path_nofile = A megadott f�jl nem l�tezik.
-opml_path_invalid = �rv�nytelen �tvonal.
-opml_import_fail = Bet�lt�si hiba
-opml_import_badfile = �gy t�nik, ez nem egy OPML f�jl.
-opml_export_nocreate = F�jl l�trehoz�si hiba
-opml_select_file = Select OPML File
-opml_opml_file = OPML File
-
-
-# Date rendering values
-
-date_sunday = Vas�rnap
-date_sunday_short = Vas
-date_monday = H�tf�
-date_monday_short = H�t
-date_tuesday = Kedd
-date_tuesday_short = Ked
-date_wednesday = Szerda
-date_wednesday_short = Sze
-date_thursday = Cs�t�rt�k
-date_thursday_short = Cs�
-date_friday = P�ntek
-date_friday_short = P�n
-date_saturday = Szombat
-date_saturday_short = Szo
-
-date_january = Janu�r
-date_january_short = Jan
-date_february = Febru�r
-date_february_short = Feb
-date_march = M�rcius
-date_march_short = M�r
-date_april = �prilis
-date_april_short = �pr
-date_may = M�jus
-date_may_short = M�j
-date_june = J�nius
-date_june_short = J�n
-date_july = J�lius
-date_july_short = J�l
-date_august = Augusztus
-date_august_short = Aug
-date_september = Szeptember
-date_september_short = Sze
-date_october = Okt�ber
-date_october_short = Okt
-date_november = November
-date_november_short = Nov
-date_december = December
-date_december_short = Dec
-
-# Item context menu
-itemcontext_markasread = Mark as Read
-itemcontext_markasunread = Mark as Unread
-itemcontext_markallasread = Mark All as Read
-itemcontext_markallasunread = Mark All as Unread
+RESULT_OK_STR = OK
+RESULT_PARSE_ERROR_STR = XML �rtelmez�si hiba
+RESULT_NOT_RSS_STR = Ez az XML f�jl nem RSS form�tum�
+RESULT_NOT_FOUND_STR = A f�jl nem tal�lhat�
+RESULT_NOT_AVAILABLE_STR = Nem el�rhet� URL
+RESULT_ERROR_FAILURE_STR = Bet�lt�si hiba
+RESULT_LOADING = Loading
+RESULT_CHECKING = Checking
+
+CHECK_UPDATE = Friss�l�sek ellen�rz�se
+GET_RSS_TITLE= RSS c�m let�lt�se
+
+
+# feed discovery messages
+
+discovery_external_feeds_category = K�ls� adagol�
+discovery_status_discovered = Megtal�lva
+discovery_status_site_feed = oldaladagol�
+discovery_status_site_feeds = oldaladagol�k
+discovery_status_and = �s
+discovery_status_external_feed = k�ls� adagol�
+discovery_status_external_feeds = k�ls� adagol�k
+discovery_status_none_found = Nem siker�lt adagol�t tal�lni
+
+
+# get feed title dialog
+
+get_feed_title = Az �j adagol� c�me
+
+
+# OPML wizzard
+
+opml_import_done = Import�l�s befejezve
+opml_export_done = Exportport�l�s befejezve
+opml_path_blank = V�lasszon ki egy OPML f�jlt.
+opml_path_nofile = A megadott f�jl nem l�tezik.
+opml_path_invalid = �rv�nytelen �tvonal.
+opml_import_fail = Bet�lt�si hiba
+opml_import_badfile = �gy t�nik, ez nem egy OPML f�jl.
+opml_export_nocreate = F�jl l�trehoz�si hiba
+opml_select_file = Select OPML File
+opml_opml_file = OPML File
+
+
+# Date rendering values
+
+date_sunday = Vas�rnap
+date_sunday_short = Vas
+date_monday = H�tf�
+date_monday_short = H�t
+date_tuesday = Kedd
+date_tuesday_short = Ked
+date_wednesday = Szerda
+date_wednesday_short = Sze
+date_thursday = Cs�t�rt�k
+date_thursday_short = Cs�
+date_friday = P�ntek
+date_friday_short = P�n
+date_saturday = Szombat
+date_saturday_short = Szo
+
+date_january = Janu�r
+date_january_short = Jan
+date_february = Febru�r
+date_february_short = Feb
+date_march = M�rcius
+date_march_short = M�r
+date_april = �prilis
+date_april_short = �pr
+date_may = M�jus
+date_may_short = M�j
+date_june = J�nius
+date_june_short = J�n
+date_july = J�lius
+date_july_short = J�l
+date_august = Augusztus
+date_august_short = Aug
+date_september = Szeptember
+date_september_short = Sze
+date_october = Okt�ber
+date_october_short = Okt
+date_november = November
+date_november_short = Nov
+date_december = December
+date_december_short = Dec
+
+# Item context menu
+itemcontext_markasread = Mark as Read
+itemcontext_markasunread = Mark as Unread
+itemcontext_markallasread = Mark All as Read
+itemcontext_markallasunread = Mark All as Unread
diff --git a/src/sage/locale/it-IT/sage.dtd b/src/sage/locale/it-IT/sage.dtd
index d1a6522..c16ebf7 100644
--- a/src/sage/locale/it-IT/sage.dtd
+++ b/src/sage/locale/it-IT/sage.dtd
@@ -1,53 +1,53 @@
-<!ENTITY sage.label "Sage">
-<!ENTITY sage.version "1.2">
-<!ENTITY sage.version.label "">
-
-<!ENTITY sage.toolbarLabel "Sage">
-<!ENTITY sage.sidebarTitle "Sage">
-<!ENTITY sage.tooltip "Mostra il pannello laterale di Sage">
-
-<!ENTITY menu.view "Visualizza">
-<!ENTITY menu.showSearchBar "Mostra Barra di Ricerca dei Feed">
-<!ENTITY menu.showFeedItemList "Mostra la Lista dei Feed">
-<!ENTITY menu.showDescTooltip "Mostra Descrizione Suggerimenti">
-<!ENTITY menu.openHTML "Mostra i Feed nel Browser">
-<!ENTITY menu.tools "Opzioni">
-<!ENTITY menu.checkUpdate "Controlla i Feed">
-<!ENTITY menu.manageRSSList "Gestione Lista dei Feed...">
-<!ENTITY menu.opmlImportExport "Importazione/Esportazione File OPML...">
-<!ENTITY menu.setting "Preferenze...">
-<!ENTITY menu.sageProjectFeed "Novita' sul Progetto Sage">
-<!ENTITY menu.discoverFeeds "Ricerca Feed Esterni">
-
-<!-- Feed Discovery -->
-<!ENTITY discovery.status.searching "Ricerca nella Pagina Corrente">
-<!ENTITY discovery.button.addFeed "Aggiungi un Feed">
-<!ENTITY discovery.button.close "Chiudi">
-<!ENTITY discovery.header.title "Titolo">
-<!ENTITY discovery.header.format "Formato">
-<!ENTITY discovery.header.lastPubDate "Ultimo Aggiornamento">
-<!ENTITY discovery.header.itemCount "Elementi">
-<!ENTITY discovery.header.url "URL">
-
-<!-- Settings Dialog -->
-<!ENTITY settings.general.caption "Generale">
-<!ENTITY settings.autoFeedTitle.label "Aggiorna Automaticamente il Titolo dei feed">
-<!ENTITY settings.renderFeeds.label "Mostra i Feed nel Browser">
-<!ENTITY settings.twelveHourClock.label "Usa Modalita' 12 ore">
-<!ENTITY settings.feedItemOrder.label "Ordinamento dei Feed">
-<!ENTITY settings.feedItemOrder.chrono "Cronologico">
-<!ENTITY settings.feedItemOrder.source "Sorgente">
-<!ENTITY settings.feedDiscoveryMode.label "Modalita' di Ricerca Feed">
-<!ENTITY settings.feedDiscoveryMode.exhaustive "Esaustiva">
-<!ENTITY settings.feedDiscoveryMode.conservative "Conservativa">
-<!ENTITY settingWindow.title "Configurazione di Sage">
-<!ENTITY selectFolder.label "Selezionare la Cartella dei Feed">
-<!ENTITY openInContentsArea.caption "Interpretazione dei Feed">
-<!ENTITY enableUserCss.label "Usa CSS Personalizzato">
-<!ENTITY browseCss.label "Sfoglia...">
-<!ENTITY allowEContent.label "Permetti i Tag HTML">
-
-
-<!ENTITY openSageSidebar.commandkey "S">
-<!ENTITY openSageSidebar.modifiersKey "alt">
-
+<!ENTITY sage.label "Sage">
+<!ENTITY sage.version "1.2.2">
+<!ENTITY sage.version.label "">
+
+<!ENTITY sage.toolbarLabel "Sage">
+<!ENTITY sage.sidebarTitle "Sage">
+<!ENTITY sage.tooltip "Mostra il pannello laterale di Sage">
+
+<!ENTITY menu.view "Visualizza">
+<!ENTITY menu.showSearchBar "Mostra Barra di Ricerca dei Feed">
+<!ENTITY menu.showFeedItemList "Mostra la Lista dei Feed">
+<!ENTITY menu.showDescTooltip "Mostra Descrizione Suggerimenti">
+<!ENTITY menu.openHTML "Mostra i Feed nel Browser">
+<!ENTITY menu.tools "Opzioni">
+<!ENTITY menu.checkUpdate "Controlla i Feed">
+<!ENTITY menu.manageRSSList "Gestione Lista dei Feed...">
+<!ENTITY menu.opmlImportExport "Importazione/Esportazione File OPML...">
+<!ENTITY menu.setting "Preferenze...">
+<!ENTITY menu.sageProjectFeed "Novita' sul Progetto Sage">
+<!ENTITY menu.discoverFeeds "Ricerca Feed Esterni">
+
+<!-- Feed Discovery -->
+<!ENTITY discovery.status.searching "Ricerca nella Pagina Corrente">
+<!ENTITY discovery.button.addFeed "Aggiungi un Feed">
+<!ENTITY discovery.button.close "Chiudi">
+<!ENTITY discovery.header.title "Titolo">
+<!ENTITY discovery.header.format "Formato">
+<!ENTITY discovery.header.lastPubDate "Ultimo Aggiornamento">
+<!ENTITY discovery.header.itemCount "Elementi">
+<!ENTITY discovery.header.url "URL">
+
+<!-- Settings Dialog -->
+<!ENTITY settings.general.caption "Generale">
+<!ENTITY settings.autoFeedTitle.label "Aggiorna Automaticamente il Titolo dei feed">
+<!ENTITY settings.renderFeeds.label "Mostra i Feed nel Browser">
+<!ENTITY settings.twelveHourClock.label "Usa Modalita' 12 ore">
+<!ENTITY settings.feedItemOrder.label "Ordinamento dei Feed">
+<!ENTITY settings.feedItemOrder.chrono "Cronologico">
+<!ENTITY settings.feedItemOrder.source "Sorgente">
+<!ENTITY settings.feedDiscoveryMode.label "Modalita' di Ricerca Feed">
+<!ENTITY settings.feedDiscoveryMode.exhaustive "Esaustiva">
+<!ENTITY settings.feedDiscoveryMode.conservative "Conservativa">
+<!ENTITY settingWindow.title "Configurazione di Sage">
+<!ENTITY selectFolder.label "Selezionare la Cartella dei Feed">
+<!ENTITY openInContentsArea.caption "Interpretazione dei Feed">
+<!ENTITY enableUserCss.label "Usa CSS Personalizzato">
+<!ENTITY browseCss.label "Sfoglia...">
+<!ENTITY allowEContent.label "Permetti i Tag HTML">
+
+
+<!ENTITY openSageSidebar.commandkey "S">
+<!ENTITY openSageSidebar.modifiersKey "alt">
+
diff --git a/src/sage/locale/it-IT/sage.properties b/src/sage/locale/it-IT/sage.properties
index ea81047..9734396 100644
--- a/src/sage/locale/it-IT/sage.properties
+++ b/src/sage/locale/it-IT/sage.properties
@@ -1,90 +1,90 @@
-RESULT_OK_STR = OK
-RESULT_PARSE_ERROR_STR = Errore analisi XML
-RESULT_NOT_RSS_STR = Errore analisi Feed
-RESULT_NOT_FOUND_STR = File non trovato
-RESULT_NOT_AVAILABLE_STR = URL non disponibile
-RESULT_ERROR_FAILURE_STR = Errore di caricamento
-RESULT_LOADING = Caricamento
-RESULT_CHECKING = Controllo di
-
-CHECK_UPDATE = Controlla i Feed
-GET_RSS_TITLE= Ottieni il titolo dei Feed
-
-
-# feed discovery messages
-
-discovery_external_feeds_category = Feed Esterni
-discovery_status_discovered = Trovati
-discovery_status_site_feed = sito con feed
-discovery_status_site_feeds = siti con feed
-discovery_status_and = and
-discovery_status_external_feed = feed esterno
-discovery_status_external_feeds = feed esterni
-discovery_status_none_found = Nessun feed trovato
-
-
-# get feed title dialog
-
-get_feed_title = Nuovo Titolo Feed
-
-
-# OPML wizzard
-
-opml_import_done = Importazione Completa
-opml_export_done = Esportazione Completa
-opml_path_blank = Per favore scegliere un file OPML.
-opml_path_nofile = Il file specificato non esiste.
-opml_path_invalid = Percorso del file non valido.
-opml_import_fail = Errore di caricamento
-opml_import_badfile = Questo non sembra essere un file OPML.
-opml_export_nocreate = Errore creazione file
-opml_select_file = Selezionare un file OPML
-opml_opml_file = File OPML
-
-# Date rendering values
-
-date_sunday = Domenica
-date_sunday_short = Dom
-date_monday = Lunedi
-date_monday_short = Lun
-date_tuesday = Martedi
-date_tuesday_short = Mar
-date_wednesday = Mercoledi
-date_wednesday_short = Mer
-date_thursday = Giovedi
-date_thursday_short = Gio
-date_friday = Venerdi
-date_friday_short = Ven
-date_saturday = Sabato
-date_saturday_short = Sab
-
-date_january = Gennaio
-date_january_short = Gen
-date_february = Febbraio
-date_february_short = Feb
-date_march = Marzo
-date_march_short = Mar
-date_april = Aprile
-date_april_short = Apr
-date_may = Maggio
-date_may_short = Mag
-date_june = Giugno
-date_june_short = Giu
-date_july = Luglio
-date_july_short = Lug
-date_august = Agosto
-date_august_short = Ago
-date_september = Settembre
-date_september_short = Set
-date_october = Ottobre
-date_october_short = Ott
-date_november = Novembre
-date_november_short = Nov
-date_december = Dicembre
-date_december_short = Dic
-
-# Item context menu
-itemcontext_markasread = Mark as Read
-itemcontext_markasunread = Mark as Unread
-itemcontext_markallasread = Mark All as Read
-itemcontext_markallasunread = Mark All as Unread
+RESULT_OK_STR = OK
+RESULT_PARSE_ERROR_STR = Errore analisi XML
+RESULT_NOT_RSS_STR = Errore analisi Feed
+RESULT_NOT_FOUND_STR = File non trovato
+RESULT_NOT_AVAILABLE_STR = URL non disponibile
+RESULT_ERROR_FAILURE_STR = Errore di caricamento
+RESULT_LOADING = Caricamento
+RESULT_CHECKING = Controllo di
+
+CHECK_UPDATE = Controlla i Feed
+GET_RSS_TITLE= Ottieni il titolo dei Feed
+
+
+# feed discovery messages
+
+discovery_external_feeds_category = Feed Esterni
+discovery_status_discovered = Trovati
+discovery_status_site_feed = sito con feed
+discovery_status_site_feeds = siti con feed
+discovery_status_and = and
+discovery_status_external_feed = feed esterno
+discovery_status_external_feeds = feed esterni
+discovery_status_none_found = Nessun feed trovato
+
+
+# get feed title dialog
+
+get_feed_title = Nuovo Titolo Feed
+
+
+# OPML wizzard
+
+opml_import_done = Importazione Completa
+opml_export_done = Esportazione Completa
+opml_path_blank = Per favore scegliere un file OPML.
+opml_path_nofile = Il file specificato non esiste.
+opml_path_invalid = Percorso del file non valido.
+opml_import_fail = Errore di caricamento
+opml_import_badfile = Questo non sembra essere un file OPML.
+opml_export_nocreate = Errore creazione file
+opml_select_file = Selezionare un file OPML
+opml_opml_file = File OPML
+
+# Date rendering values
+
+date_sunday = Domenica
+date_sunday_short = Dom
+date_monday = Lunedi
+date_monday_short = Lun
+date_tuesday = Martedi
+date_tuesday_short = Mar
+date_wednesday = Mercoledi
+date_wednesday_short = Mer
+date_thursday = Giovedi
+date_thursday_short = Gio
+date_friday = Venerdi
+date_friday_short = Ven
+date_saturday = Sabato
+date_saturday_short = Sab
+
+date_january = Gennaio
+date_january_short = Gen
+date_february = Febbraio
+date_february_short = Feb
+date_march = Marzo
+date_march_short = Mar
+date_april = Aprile
+date_april_short = Apr
+date_may = Maggio
+date_may_short = Mag
+date_june = Giugno
+date_june_short = Giu
+date_july = Luglio
+date_july_short = Lug
+date_august = Agosto
+date_august_short = Ago
+date_september = Settembre
+date_september_short = Set
+date_october = Ottobre
+date_october_short = Ott
+date_november = Novembre
+date_november_short = Nov
+date_december = Dicembre
+date_december_short = Dic
+
+# Item context menu
+itemcontext_markasread = Mark as Read
+itemcontext_markasunread = Mark as Unread
+itemcontext_markallasread = Mark All as Read
+itemcontext_markallasunread = Mark All as Unread
diff --git a/src/sage/locale/ja-JP/sage.dtd b/src/sage/locale/ja-JP/sage.dtd
index 7c33c3a..d4d4967 100755
--- a/src/sage/locale/ja-JP/sage.dtd
+++ b/src/sage/locale/ja-JP/sage.dtd
@@ -1,54 +1,54 @@
-<!ENTITY sage.label "RSS リーダパネル">
-<!ENTITY sage.version "1.2">
-<!ENTITY sage.version.label "">
-
-<!ENTITY sage.toolbarLabel "RSS リーダ">
-<!ENTITY sage.sidebarTitle "RSS リーダ">
-<!ENTITY sage.tooltip "RSS リーダパネルを表示">
-
-
-<!ENTITY menu.view "表示">
-<!ENTITY menu.showSearchBar "Feed 検索バーの表示">
-<!ENTITY menu.showFeedItemList "">
-<!ENTITY menu.showDescTooltip "Description ツールチップの表示">
-<!ENTITY menu.openHTML "コンテンツエリアで開く">
-<!ENTITY menu.tools "ツール">
-<!ENTITY menu.checkUpdate "更新チェック">
-<!ENTITY menu.manageRSSList "RSS リストの管理">
-<!ENTITY menu.opmlImportExport "OPML インポート/エクスポート...">
-<!ENTITY menu.setting "設定...">
-<!ENTITY menu.sageProjectFeed "Sage Project News">
-<!ENTITY menu.discoverFeeds "Discover Feeds">
-
-<!-- Feed Discovery -->
-<!ENTITY discovery.status.searching "Searching current page">
-<!ENTITY discovery.button.addFeed "Add Feed">
-<!ENTITY discovery.button.close "Close">
-<!ENTITY discovery.header.title "Title">
-<!ENTITY discovery.header.format "Format">
-<!ENTITY discovery.header.lastPubDate "Last Update">
-<!ENTITY discovery.header.itemCount "Items">
-<!ENTITY discovery.header.url "URL">
-
-<!-- Setting Dialog -->
-<!ENTITY settings.general.caption "General">
-<!ENTITY settings.autoFeedTitle.label "Automatically update feed titles">
-<!ENTITY settings.renderFeeds.label "Render feeds in contents area">
-<!ENTITY settings.twelveHourClock.label "Use 12 hour clock">
-<!ENTITY settingWindow.title "設定: RSS リーダパネル">
-<!ENTITY selectFolder.label "RSS リストフォルダの選択">
-<!ENTITY settings.feedItemOrder.label "Feed Item Order">
-<!ENTITY settings.feedItemOrder.chrono "Chronological">
-<!ENTITY settings.feedItemOrder.source "Source">
-<!ENTITY settings.feedDiscoveryMode.label "Feed discovery mode">
-<!ENTITY settings.feedDiscoveryMode.exhaustive "Exhaustive">
-<!ENTITY settings.feedDiscoveryMode.conservative "Conservative">
-<!ENTITY openInContentsArea.caption "コンテンツエリアで開く">
-<!ENTITY enableUserCss.label "ユーザー CSS を使う">
-<!ENTITY browseCss.label "参照...">
-<!ENTITY allowEContent.label "HTML タグを許可する">
-
-
-<!ENTITY openSageSidebar.commandkey "S">
-<!ENTITY openSageSidebar.modifiersKey "alt">
-
+<!ENTITY sage.label "RSS リーダパネル">
+<!ENTITY sage.version "1.2.2">
+<!ENTITY sage.version.label "">
+
+<!ENTITY sage.toolbarLabel "RSS リーダ">
+<!ENTITY sage.sidebarTitle "RSS リーダ">
+<!ENTITY sage.tooltip "RSS リーダパネルを表示">
+
+
+<!ENTITY menu.view "表示">
+<!ENTITY menu.showSearchBar "Feed 検索バーの表示">
+<!ENTITY menu.showFeedItemList "">
+<!ENTITY menu.showDescTooltip "Description ツールチップの表示">
+<!ENTITY menu.openHTML "コンテンツエリアで開く">
+<!ENTITY menu.tools "ツール">
+<!ENTITY menu.checkUpdate "更新チェック">
+<!ENTITY menu.manageRSSList "RSS リストの管理">
+<!ENTITY menu.opmlImportExport "OPML インポート/エクスポート...">
+<!ENTITY menu.setting "設定...">
+<!ENTITY menu.sageProjectFeed "Sage Project News">
+<!ENTITY menu.discoverFeeds "Discover Feeds">
+
+<!-- Feed Discovery -->
+<!ENTITY discovery.status.searching "Searching current page">
+<!ENTITY discovery.button.addFeed "Add Feed">
+<!ENTITY discovery.button.close "Close">
+<!ENTITY discovery.header.title "Title">
+<!ENTITY discovery.header.format "Format">
+<!ENTITY discovery.header.lastPubDate "Last Update">
+<!ENTITY discovery.header.itemCount "Items">
+<!ENTITY discovery.header.url "URL">
+
+<!-- Setting Dialog -->
+<!ENTITY settings.general.caption "General">
+<!ENTITY settings.autoFeedTitle.label "Automatically update feed titles">
+<!ENTITY settings.renderFeeds.label "Render feeds in contents area">
+<!ENTITY settings.twelveHourClock.label "Use 12 hour clock">
+<!ENTITY settingWindow.title "設定: RSS リーダパネル">
+<!ENTITY selectFolder.label "RSS リストフォルダの選択">
+<!ENTITY settings.feedItemOrder.label "Feed Item Order">
+<!ENTITY settings.feedItemOrder.chrono "Chronological">
+<!ENTITY settings.feedItemOrder.source "Source">
+<!ENTITY settings.feedDiscoveryMode.label "Feed discovery mode">
+<!ENTITY settings.feedDiscoveryMode.exhaustive "Exhaustive">
+<!ENTITY settings.feedDiscoveryMode.conservative "Conservative">
+<!ENTITY openInContentsArea.caption "コンテンツエリアで開く">
+<!ENTITY enableUserCss.label "ユーザー CSS を使う">
+<!ENTITY browseCss.label "参照...">
+<!ENTITY allowEContent.label "HTML タグを許可する">
+
+
+<!ENTITY openSageSidebar.commandkey "S">
+<!ENTITY openSageSidebar.modifiersKey "alt">
+
diff --git a/src/sage/locale/ja-JP/sage.properties b/src/sage/locale/ja-JP/sage.properties
index 32de364..43c934f 100755
--- a/src/sage/locale/ja-JP/sage.properties
+++ b/src/sage/locale/ja-JP/sage.properties
@@ -1,91 +1,91 @@
-RESULT_OK_STR = OK
-RESULT_PARSE_ERROR_STR = XML \u30d1\u30fc\u30b9\u30a8\u30e9\u30fc
-RESULT_NOT_RSS_STR = \u3053\u306e XML \u30d5\u30a1\u30a4\u30eb\u306f RSS \u3067\u306f\u3042\u308a\u307e\u305b\u3093
-RESULT_NOT_FOUND_STR = \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
-RESULT_NOT_AVAILABLE_STR = \u5b58\u5728\u3057\u306a\u3044 URL \u3067\u3059
-RESULT_ERROR_FAILURE_STR = \u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f
-RESULT_LOADING = Loading
-RESULT_CHECKING = Checking
-
-CHECK_UPDATE = \u66f4\u65b0\u30c1\u30a7\u30c3\u30af
-GET_RSS_TITLE= RSS \u30bf\u30a4\u30c8\u30eb\u306e\u53d6\u5f97
-
-
-# feed discovery messages
-
-discovery_external_feeds_category = External Feeds
-discovery_status_discovered = Discovered
-discovery_status_site_feed = site feed
-discovery_status_site_feeds = site feeds
-discovery_status_and = and
-discovery_status_external_feed = external feed
-discovery_status_external_feeds = external feeds
-discovery_status_none_found = No feeds were discovered
-
-
-# get feed title dialog
-
-get_feed_title = New Feed Title
-
-
-# OPML wizzard
-
-opml_import_done = Import Complete
-opml_export_done = Export Complete
-opml_path_blank = Please choose an OPML file.
-opml_path_nofile = The specified file does not exist.
-opml_path_invalid = Invalid file path.
-opml_import_fail = Load Failure
-opml_import_badfile = This does not appear to be an OPML file.
-opml_export_nocreate = File creation error
-opml_select_file = Select OPML File
-opml_opml_file = OPML File
-
-
-# Date rendering values
-
-date_sunday = Sunday
-date_sunday_short = Sun
-date_monday = Monday
-date_monday_short = Mon
-date_tuesday = Tuesday
-date_tuesday_short = Tue
-date_wednesday = Wednesday
-date_wednesday_short = Wed
-date_thursday = Thursday
-date_thursday_short = Thu
-date_friday = Friday
-date_friday_short = Fri
-date_saturday = Saturday
-date_saturday_short = Sat
-
-date_january = January
-date_january_short = Jan
-date_february = February
-date_february_short = Feb
-date_march = March
-date_march_short = Mar
-date_april = April
-date_april_short = Apr
-date_may = May
-date_may_short = May
-date_june = June
-date_june_short = Jun
-date_july = July
-date_july_short = Jul
-date_august = August
-date_august_short = Aug
-date_september = September
-date_september_short = Sep
-date_october = October
-date_october_short = Oct
-date_november = November
-date_november_short = Nov
-date_december = December
-date_december_short = Dec
-
-# Item context menu
-itemcontext_markasread = Mark as Read
-itemcontext_markasunread = Mark as Unread
-itemcontext_markallasread = Mark All as Read
-itemcontext_markallasunread = Mark All as Unread
+RESULT_OK_STR = OK
+RESULT_PARSE_ERROR_STR = XML \u30d1\u30fc\u30b9\u30a8\u30e9\u30fc
+RESULT_NOT_RSS_STR = \u3053\u306e XML \u30d5\u30a1\u30a4\u30eb\u306f RSS \u3067\u306f\u3042\u308a\u307e\u305b\u3093
+RESULT_NOT_FOUND_STR = \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093
+RESULT_NOT_AVAILABLE_STR = \u5b58\u5728\u3057\u306a\u3044 URL \u3067\u3059
+RESULT_ERROR_FAILURE_STR = \u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f
+RESULT_LOADING = Loading
+RESULT_CHECKING = Checking
+
+CHECK_UPDATE = \u66f4\u65b0\u30c1\u30a7\u30c3\u30af
+GET_RSS_TITLE= RSS \u30bf\u30a4\u30c8\u30eb\u306e\u53d6\u5f97
+
+
+# feed discovery messages
+
+discovery_external_feeds_category = External Feeds
+discovery_status_discovered = Discovered
+discovery_status_site_feed = site feed
+discovery_status_site_feeds = site feeds
+discovery_status_and = and
+discovery_status_external_feed = external feed
+discovery_status_external_feeds = external feeds
+discovery_status_none_found = No feeds were discovered
+
+
+# get feed title dialog
+
+get_feed_title = New Feed Title
+
+
+# OPML wizzard
+
+opml_import_done = Import Complete
+opml_export_done = Export Complete
+opml_path_blank = Please choose an OPML file.
+opml_path_nofile = The specified file does not exist.
+opml_path_invalid = Invalid file path.
+opml_import_fail = Load Failure
+opml_import_badfile = This does not appear to be an OPML file.
+opml_export_nocreate = File creation error
+opml_select_file = Select OPML File
+opml_opml_file = OPML File
+
+
+# Date rendering values
+
+date_sunday = Sunday
+date_sunday_short = Sun
+date_monday = Monday
+date_monday_short = Mon
+date_tuesday = Tuesday
+date_tuesday_short = Tue
+date_wednesday = Wednesday
+date_wednesday_short = Wed
+date_thursday = Thursday
+date_thursday_short = Thu
+date_friday = Friday
+date_friday_short = Fri
+date_saturday = Saturday
+date_saturday_short = Sat
+
+date_january = January
+date_january_short = Jan
+date_february = February
+date_february_short = Feb
+date_march = March
+date_march_short = Mar
+date_april = April
+date_april_short = Apr
+date_may = May
+date_may_short = May
+date_june = June
+date_june_short = Jun
+date_july = July
+date_july_short = Jul
+date_august = August
+date_august_short = Aug
+date_september = September
+date_september_short = Sep
+date_october = October
+date_october_short = Oct
+date_november = November
+date_november_short = Nov
+date_december = December
+date_december_short = Dec
+
+# Item context menu
+itemcontext_markasread = Mark as Read
+itemcontext_markasunread = Mark as Unread
+itemcontext_markallasread = Mark All as Read
+itemcontext_markallasunread = Mark All as Unread
diff --git a/src/sage/locale/nl-NL/sage.dtd b/src/sage/locale/nl-NL/sage.dtd
index 9bd5c27..ce81070 100644
--- a/src/sage/locale/nl-NL/sage.dtd
+++ b/src/sage/locale/nl-NL/sage.dtd
@@ -1,52 +1,52 @@
-<!ENTITY sage.label "Sage">
-<!ENTITY sage.version "1.2">
-<!ENTITY sage.version.label "versie">
-
-<!ENTITY sage.toolbarLabel "Sage">
-<!ENTITY sage.sidebarTitle "Sage">
-<!ENTITY sage.tooltip "Toon Sage">
-
-<!ENTITY menu.view "Beeld">
-<!ENTITY menu.showSearchBar "Toon feed zoekbalk">
-<!ENTITY menu.showFeedItemList "Toon feed itemlijst">
-<!ENTITY menu.showDescTooltip "Toon beschrijvende tooltips">
-<!ENTITY menu.openHTML "Open feeds in Contents Area">
-<!ENTITY menu.tools "Opties">
-<!ENTITY menu.checkUpdate "Controleer feeds">
-<!ENTITY menu.manageRSSList "Beheer feedlijst...">
-<!ENTITY menu.opmlImportExport "OPML Importeren/Exporteren...">
-<!ENTITY menu.setting "Instellingen...">
-<!ENTITY menu.sageProjectFeed "Sage Projectnieuws">
-<!ENTITY menu.discoverFeeds "Ontdek feeds">
-
-<!-- Feed Discovery -->
-<!ENTITY discovery.status.searching "Zoeken op huidige pagina">
-<!ENTITY discovery.button.addFeed "Feed toevoegen">
-<!ENTITY discovery.button.close "Sluiten">
-<!ENTITY discovery.header.title "Titel">
-<!ENTITY discovery.header.format "Formaat">
-<!ENTITY discovery.header.lastPubDate "Laatste update">
-<!ENTITY discovery.header.itemCount "Items">
-<!ENTITY discovery.header.url "URL">
-
-<!-- Settings Dialog -->
-<!ENTITY settings.general.caption "Algemeen">
-<!ENTITY settings.autoFeedTitle.label "Automatisch feedtitels bijwerken">
-<!ENTITY settings.renderFeeds.label "Feeds weergeven in Contents Area">
-<!ENTITY settings.twelveHourClock.label "Gebruik 12-uurs klok">
-<!ENTITY settings.feedItemOrder.label "Volgorde van feeditems">
-<!ENTITY settings.feedItemOrder.chrono "Chronologisch">
-<!ENTITY settings.feedItemOrder.source "Bron">
-<!ENTITY settings.feedDiscoveryMode.label "Feed ontdekkingsmodus">
-<!ENTITY settings.feedDiscoveryMode.exhaustive "Grondig">
-<!ENTITY settings.feedDiscoveryMode.conservative "Conservatief">
-<!ENTITY settingWindow.title "Sage instellingen">
-<!ENTITY selectFolder.label "Selecteer map met feeds">
-<!ENTITY openInContentsArea.caption "Feedweergave">
-<!ENTITY enableUserCss.label "Gebruik aangepaste CSS">
-<!ENTITY browseCss.label "Verkennen...">
-<!ENTITY allowEContent.label "HTML tags toestaan">
-
-
-<!ENTITY openSageSidebar.commandkey "S">
-<!ENTITY openSageSidebar.modifiersKey "alt">
+<!ENTITY sage.label "Sage">
+<!ENTITY sage.version "1.2.2">
+<!ENTITY sage.version.label "versie">
+
+<!ENTITY sage.toolbarLabel "Sage">
+<!ENTITY sage.sidebarTitle "Sage">
+<!ENTITY sage.tooltip "Toon Sage">
+
+<!ENTITY menu.view "Beeld">
+<!ENTITY menu.showSearchBar "Toon feed zoekbalk">
+<!ENTITY menu.showFeedItemList "Toon feed itemlijst">
+<!ENTITY menu.showDescTooltip "Toon beschrijvende tooltips">
+<!ENTITY menu.openHTML "Open feeds in Contents Area">
+<!ENTITY menu.tools "Opties">
+<!ENTITY menu.checkUpdate "Controleer feeds">
+<!ENTITY menu.manageRSSList "Beheer feedlijst...">
+<!ENTITY menu.opmlImportExport "OPML Importeren/Exporteren...">
+<!ENTITY menu.setting "Instellingen...">
+<!ENTITY menu.sageProjectFeed "Sage Projectnieuws">
+<!ENTITY menu.discoverFeeds "Ontdek feeds">
+
+<!-- Feed Discovery -->
+<!ENTITY discovery.status.searching "Zoeken op huidige pagina">
+<!ENTITY discovery.button.addFeed "Feed toevoegen">
+<!ENTITY discovery.button.close "Sluiten">
+<!ENTITY discovery.header.title "Titel">
+<!ENTITY discovery.header.format "Formaat">
+<!ENTITY discovery.header.lastPubDate "Laatste update">
+<!ENTITY discovery.header.itemCount "Items">
+<!ENTITY discovery.header.url "URL">
+
+<!-- Settings Dialog -->
+<!ENTITY settings.general.caption "Algemeen">
+<!ENTITY settings.autoFeedTitle.label "Automatisch feedtitels bijwerken">
+<!ENTITY settings.renderFeeds.label "Feeds weergeven in Contents Area">
+<!ENTITY settings.twelveHourClock.label "Gebruik 12-uurs klok">
+<!ENTITY settings.feedItemOrder.label "Volgorde van feeditems">
+<!ENTITY settings.feedItemOrder.chrono "Chronologisch">
+<!ENTITY settings.feedItemOrder.source "Bron">
+<!ENTITY settings.feedDiscoveryMode.label "Feed ontdekkingsmodus">
+<!ENTITY settings.feedDiscoveryMode.exhaustive "Grondig">
+<!ENTITY settings.feedDiscoveryMode.conservative "Conservatief">
+<!ENTITY settingWindow.title "Sage instellingen">
+<!ENTITY selectFolder.label "Selecteer map met feeds">
+<!ENTITY openInContentsArea.caption "Feedweergave">
+<!ENTITY enableUserCss.label "Gebruik aangepaste CSS">
+<!ENTITY browseCss.label "Verkennen...">
+<!ENTITY allowEContent.label "HTML tags toestaan">
+
+
+<!ENTITY openSageSidebar.commandkey "S">
+<!ENTITY openSageSidebar.modifiersKey "alt">
diff --git a/src/sage/locale/nl-NL/sage.properties b/src/sage/locale/nl-NL/sage.properties
index a8bbb41..8b865f7 100644
--- a/src/sage/locale/nl-NL/sage.properties
+++ b/src/sage/locale/nl-NL/sage.properties
@@ -1,90 +1,90 @@
-RESULT_OK_STR = OK
-RESULT_PARSE_ERROR_STR = XML parse fout
-RESULT_NOT_RSS_STR = Feed parse fout
-RESULT_NOT_FOUND_STR = Bestand niet gevonden
-RESULT_NOT_AVAILABLE_STR = URL niet beschikbaar
-RESULT_ERROR_FAILURE_STR = Laadfout
-RESULT_LOADING = Bezig met laden
-RESULT_CHECKING = Bezig met controleren
-
-CHECK_UPDATE = Controleer feeds
-GET_RSS_TITLE= Feedtitel ophalen
-
-
-# feed discovery messages
-
-discovery_external_feeds_category = Externe feeds
-discovery_status_discovered = Ontdekt
-discovery_status_site_feed = site feed
-discovery_status_site_feeds = site feeds
-discovery_status_and = en
-discovery_status_external_feed = externe feed
-discovery_status_external_feeds = externe feeds
-discovery_status_none_found = Geen feeds ontdekt
-
-
-# get feed title dialog
-
-get_feed_title = Nieuwe feedtitel
-
-
-# OPML wizzard
-
-opml_import_done = Import volledig
-opml_export_done = Export volledig
-opml_path_blank = Kies alstublieft een OPML bestand.
-opml_path_nofile = Het opgegeven bestand bestaat niet.
-opml_path_invalid = Ongeldig bestandspad.
-opml_import_fail = Laadfout
-opml_import_badfile = Dit blijkt geen OPML bestand te zijn.
-opml_export_nocreate = Fout bij aanmaken bestand
-opml_select_file = Selecteer OPML bestand
-opml_opml_file = OPML bestand
-
-# Date rendering values
-
-date_sunday = Zondag
-date_sunday_short = Zo
-date_monday = Maandag
-date_monday_short = Ma
-date_tuesday = Dinsdag
-date_tuesday_short = Di
-date_wednesday = Woensdag
-date_wednesday_short = Woe
-date_thursday = Donderdag
-date_thursday_short = Do
-date_friday = Vrijdag
-date_friday_short = Vrij
-date_saturday = Zaterdag
-date_saturday_short = Za
-
-date_january = Januari
-date_january_short = Jan
-date_february = Februari
-date_february_short = Feb
-date_march = Maart
-date_march_short = Maa
-date_april = April
-date_april_short = Apr
-date_may = Mei
-date_may_short = Mei
-date_june = Juni
-date_june_short = Jun
-date_july = Juli
-date_july_short = Jul
-date_august = Augustus
-date_august_short = Aug
-date_september = September
-date_september_short = Sep
-date_october = Oktober
-date_october_short = Okt
-date_november = November
-date_november_short = Nov
-date_december = December
-date_december_short = Dec
-
-# Item context menu
-itemcontext_markasread = Mark as Read
-itemcontext_markasunread = Mark as Unread
-itemcontext_markallasread = Mark All as Read
-itemcontext_markallasunread = Mark All as Unread
+RESULT_OK_STR = OK
+RESULT_PARSE_ERROR_STR = XML parse fout
+RESULT_NOT_RSS_STR = Feed parse fout
+RESULT_NOT_FOUND_STR = Bestand niet gevonden
+RESULT_NOT_AVAILABLE_STR = URL niet beschikbaar
+RESULT_ERROR_FAILURE_STR = Laadfout
+RESULT_LOADING = Bezig met laden
+RESULT_CHECKING = Bezig met controleren
+
+CHECK_UPDATE = Controleer feeds
+GET_RSS_TITLE= Feedtitel ophalen
+
+
+# feed discovery messages
+
+discovery_external_feeds_category = Externe feeds
+discovery_status_discovered = Ontdekt
+discovery_status_site_feed = site feed
+discovery_status_site_feeds = site feeds
+discovery_status_and = en
+discovery_status_external_feed = externe feed
+discovery_status_external_feeds = externe feeds
+discovery_status_none_found = Geen feeds ontdekt
+
+
+# get feed title dialog
+
+get_feed_title = Nieuwe feedtitel
+
+
+# OPML wizzard
+
+opml_import_done = Import volledig
+opml_export_done = Export volledig
+opml_path_blank = Kies alstublieft een OPML bestand.
+opml_path_nofile = Het opgegeven bestand bestaat niet.
+opml_path_invalid = Ongeldig bestandspad.
+opml_import_fail = Laadfout
+opml_import_badfile = Dit blijkt geen OPML bestand te zijn.
+opml_export_nocreate = Fout bij aanmaken bestand
+opml_select_file = Selecteer OPML bestand
+opml_opml_file = OPML bestand
+
+# Date rendering values
+
+date_sunday = Zondag
+date_sunday_short = Zo
+date_monday = Maandag
+date_monday_short = Ma
+date_tuesday = Dinsdag
+date_tuesday_short = Di
+date_wednesday = Woensdag
+date_wednesday_short = Woe
+date_thursday = Donderdag
+date_thursday_short = Do
+date_friday = Vrijdag
+date_friday_short = Vrij
+date_saturday = Zaterdag
+date_saturday_short = Za
+
+date_january = Januari
+date_january_short = Jan
+date_february = Februari
+date_february_short = Feb
+date_march = Maart
+date_march_short = Maa
+date_april = April
+date_april_short = Apr
+date_may = Mei
+date_may_short = Mei
+date_june = Juni
+date_june_short = Jun
+date_july = Juli
+date_july_short = Jul
+date_august = Augustus
+date_august_short = Aug
+date_september = September
+date_september_short = Sep
+date_october = Oktober
+date_october_short = Okt
+date_november = November
+date_november_short = Nov
+date_december = December
+date_december_short = Dec
+
+# Item context menu
+itemcontext_markasread = Mark as Read
+itemcontext_markasunread = Mark as Unread
+itemcontext_markallasread = Mark All as Read
+itemcontext_markallasunread = Mark All as Unread
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/sage-extension.git
More information about the Pkg-mozext-commits
mailing list