summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/FeedTree.js60
-rw-r--r--js/feedlist.js2
-rw-r--r--js/functions.js13
-rw-r--r--js/prefs.js21
-rw-r--r--js/tt-rss.js456
-rw-r--r--js/viewfeed.js88
6 files changed, 379 insertions, 261 deletions
diff --git a/js/FeedTree.js b/js/FeedTree.js
index 2e686c156..620efdbf6 100644
--- a/js/FeedTree.js
+++ b/js/FeedTree.js
@@ -106,7 +106,7 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
var id = args.item.id[0];
var bare_id = parseInt(id.substr(id.indexOf(':')+1));
- if (bare_id < -10) {
+ if (bare_id < _label_base_index) {
var span = dojo.doc.createElement('span');
var fg_color = args.item.fg_color[0];
var bg_color = args.item.bg_color[0];
@@ -218,7 +218,63 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
return label;
},
+ expandParentNodes: function(feed, is_cat, list) {
+ try {
+ for (var i = 0; i < list.length; i++) {
+ var id = String(list[i].id);
+ var item = this._itemNodesMap[id];
+
+ if (item) {
+ item = item[0];
+ this._expandNode(item);
+ }
+ }
+ } catch (e) {
+ exception_error("expandParentNodes", e);
+ }
+ },
+ findNodeParentsAndExpandThem: function(feed, is_cat, root, parents) {
+ // expands all parents of specified feed to properly mark it as active
+ // my fav thing about frameworks is doing everything myself
+ try {
+ var test_id = is_cat ? 'CAT:' + feed : 'FEED:' + feed;
+
+ if (!root) {
+ if (!this.model || !this.model.store) return false;
+
+ var items = this.model.store._arrayOfTopLevelItems;
+
+ for (var i = 0; i < items.length; i++) {
+ if (String(items[i].id) == test_id) {
+ this.expandParentNodes(feed, is_cat, parents);
+ } else {
+ this.findNodeParentsAndExpandThem(feed, is_cat, items[i], []);
+ }
+ }
+ } else {
+ if (root.items) {
+ parents.push(root);
+
+ for (var i = 0; i < root.items.length; i++) {
+ if (String(root.items[i].id) == test_id) {
+ this.expandParentNodes(feed, is_cat, parents);
+ } else {
+ this.findNodeParentsAndExpandThem(feed, is_cat, root.items[i], parents);
+ }
+ }
+ } else {
+ if (String(root.id) == test_id) {
+ this.expandParentNodes(feed, is_cat, parents);
+ }
+ }
+ }
+ } catch (e) {
+ exception_error("findNodeParentsAndExpandThem", e);
+ }
+ },
selectFeed: function(feed, is_cat) {
+ this.findNodeParentsAndExpandThem(feed, is_cat, false, false);
+
if (is_cat)
treeNode = this._itemNodesMap['CAT:' + feed];
else
@@ -324,7 +380,7 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
var node = tree._itemNodesMap[id];
if (node) {
- if (hide && unread == 0 && (bare_id > 0 || bare_id < -10 || !show_special)) {
+ if (hide && unread == 0 && (bare_id > 0 || bare_id < _label_base_index || !show_special)) {
Effect.Fade(node[0].rowNode, {duration : 0.3,
queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
} else {
diff --git a/js/feedlist.js b/js/feedlist.js
index aaf6c2aa6..7385177d1 100644
--- a/js/feedlist.js
+++ b/js/feedlist.js
@@ -513,3 +513,5 @@ function decrementFeedCounter(feed, is_cat) {
exception_error("decrement_feed_counter", e);
}
}
+
+
diff --git a/js/functions.js b/js/functions.js
index a9367da60..e93ca54e0 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -2,6 +2,7 @@ var notify_silent = false;
var loading_progress = 0;
var sanity_check_done = false;
var init_params = {};
+var _label_base_index = -1024;
Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap(
function (callOriginal, options) {
@@ -1338,6 +1339,8 @@ function backend_sanity_check_callback(transport) {
for (k in params) {
var v = params[k];
console.log("IP: " + k + " => " + v);
+
+ if (k == "label_base_index") _label_base_index = parseInt(v);
}
}
@@ -1986,3 +1989,13 @@ function htmlspecialchars_decode (string, quote_style) {
return string;
}
+
+
+function label_to_feed_id(label) {
+ return _label_base_index - 1 - Math.abs(label);
+}
+
+function feed_to_label_id(feed) {
+ return _label_base_index - 1 + Math.abs(feed);
+}
+
diff --git a/js/prefs.js b/js/prefs.js
index 082f62679..7d12e4202 100644
--- a/js/prefs.js
+++ b/js/prefs.js
@@ -1706,27 +1706,6 @@ function editLabel(id, event) {
}
}
-function clearTwitterCredentials() {
- try {
- var ok = confirm(__("This will clear your stored authentication information for Twitter. Continue?"));
-
- if (ok) {
- notify_progress("Clearing credentials...");
-
- var query = "?op=pref-feeds&method=remtwitterinfo";
-
- new Ajax.Request("backend.php", {
- parameters: query,
- onComplete: function(transport) {
- notify_info("Twitter credentials have been cleared.");
- updateFeedList();
- } });
- }
-
- } catch (e) {
- exception_error("clearTwitterCredentials", e);
- }
-}
function customizeCSS() {
try {
diff --git a/js/tt-rss.js b/js/tt-rss.js
index eaa1f3daf..7f8a7b61a 100644
--- a/js/tt-rss.js
+++ b/js/tt-rss.js
@@ -1,6 +1,7 @@
var global_unread = -1;
var hotkey_prefix = false;
var hotkey_prefix_pressed = false;
+var hotkey_actions = {};
var _widescreen_mode = false;
var _rpc_seq = 0;
var _active_feed_id = 0;
@@ -205,6 +206,7 @@ function genericSanityCheck() {
return true;
}
+
function init() {
try {
//dojo.registerModulePath("fox", "../../js/");
@@ -252,6 +254,233 @@ function init() {
onComplete: function(transport) {
backend_sanity_check_callback(transport);
} });
+
+ hotkey_actions["next_feed"] = function() {
+ var rv = dijit.byId("feedTree").getNextFeed(
+ getActiveFeedId(), activeFeedIsCat());
+
+ if (rv) viewfeed(rv[0], '', rv[1]);
+ };
+ hotkey_actions["prev_feed"] = function() {
+ var rv = dijit.byId("feedTree").getPreviousFeed(
+ getActiveFeedId(), activeFeedIsCat());
+
+ if (rv) viewfeed(rv[0], '', rv[1]);
+ };
+ hotkey_actions["next_article"] = function() {
+ moveToPost('next');
+ };
+ hotkey_actions["prev_article"] = function() {
+ moveToPost('prev');
+ };
+ hotkey_actions["next_article_noscroll"] = function() {
+ moveToPost('next', true);
+ };
+ hotkey_actions["prev_article_noscroll"] = function() {
+ moveToPost('prev', true);
+ };
+ hotkey_actions["collapse_article"] = function() {
+ var id = getActiveArticleId();
+ var elem = $("CICD-"+id);
+ if(elem.visible()) {
+ cdmCollapseArticle(null, id);
+ }
+ else {
+ cdmExpandArticle(id);
+ }
+ };
+ hotkey_actions["search_dialog"] = function() {
+ search();
+ };
+ hotkey_actions["toggle_mark"] = function() {
+ selectionToggleMarked(undefined, false, true);
+ };
+ hotkey_actions["toggle_publ"] = function() {
+ selectionTogglePublished(undefined, false, true);
+ };
+ hotkey_actions["toggle_unread"] = function() {
+ selectionToggleUnread(undefined, false, true);
+ };
+ hotkey_actions["edit_tags"] = function() {
+ var id = getActiveArticleId();
+ if (id) {
+ editArticleTags(id, getActiveFeedId(), isCdmMode());
+ };
+ }
+ hotkey_actions["dismiss_selected"] = function() {
+ dismissSelectedArticles();
+ };
+ hotkey_actions["open_in_new_window"] = function() {
+ if (getActiveArticleId()) {
+ openArticleInNewWindow(getActiveArticleId());
+ return;
+ }
+ };
+ hotkey_actions["catchup_below"] = function() {
+ catchupRelativeToArticle(1);
+ };
+ hotkey_actions["catchup_above"] = function() {
+ catchupRelativeToArticle(0);
+ };
+ hotkey_actions["article_scroll_down"] = function() {
+ var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
+
+ scrollArticle(ctr.offsetHeight/3);
+ };
+ hotkey_actions["article_scroll_up"] = function() {
+ var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
+
+ scrollArticle(-ctr.offsetHeight/3);
+ };
+ hotkey_actions["close_article"] = function() {
+ if (isCdmMode()) {
+ if (!getInitParam("cdm_expanded")) {
+ cdmCollapseArticle(false, getActiveArticleId());
+ } else {
+ dismissArticle(getActiveArticleId());
+ }
+ } else {
+ closeArticlePanel();
+ }
+ };
+ hotkey_actions["email_article"] = function() {
+ if (typeof emailArticle != "undefined") {
+ emailArticle();
+ } else if (typeof mailtoArticle != "undefined") {
+ mailtoArticle();
+ } else {
+ alert(__("Please enable mail plugin first."));
+ }
+ };
+ hotkey_actions["select_all"] = function() {
+ selectArticles('all');
+ };
+ hotkey_actions["select_unread"] = function() {
+ selectArticles('unread');
+ };
+ hotkey_actions["select_marked"] = function() {
+ selectArticles('marked');
+ };
+ hotkey_actions["select_published"] = function() {
+ selectArticles('published');
+ };
+ hotkey_actions["select_invert"] = function() {
+ selectArticles('invert');
+ };
+ hotkey_actions["select_none"] = function() {
+ selectArticles('none');
+ };
+ hotkey_actions["feed_refresh"] = function() {
+ if (getActiveFeedId() != undefined) {
+ viewfeed(getActiveFeedId(), '', activeFeedIsCat());
+ return;
+ }
+ };
+ hotkey_actions["feed_unhide_read"] = function() {
+ toggleDispRead();
+ };
+ hotkey_actions["feed_subscribe"] = function() {
+ quickAddFeed();
+ };
+ hotkey_actions["feed_debug_update"] = function() {
+ window.open("backend.php?op=feeds&method=view&feed=" + getActiveFeedId() +
+ "&view_mode=adaptive&order_by=default&update=&m=ForceUpdate&cat=" +
+ activeFeedIsCat() + "&DevForceUpdate=1&debug=1&xdebug=1&csrf_token=" +
+ getInitParam("csrf_token"));
+ };
+ hotkey_actions["feed_edit"] = function() {
+ if (activeFeedIsCat())
+ alert(__("You can't edit this kind of feed."));
+ else
+ editFeed(getActiveFeedId());
+ };
+ hotkey_actions["feed_catchup"] = function() {
+ if (getActiveFeedId() != undefined) {
+ catchupCurrentFeed();
+ return;
+ }
+ };
+ hotkey_actions["feed_reverse"] = function() {
+ reverseHeadlineOrder();
+ };
+ hotkey_actions["catchup_all"] = function() {
+ catchupAllFeeds();
+ };
+ hotkey_actions["cat_toggle_collapse"] = function() {
+ if (activeFeedIsCat()) {
+ dijit.byId("feedTree").collapseCat(getActiveFeedId());
+ return;
+ }
+ };
+ hotkey_actions["goto_all"] = function() {
+ viewfeed(-4);
+ };
+ hotkey_actions["goto_fresh"] = function() {
+ viewfeed(-3);
+ };
+ hotkey_actions["goto_marked"] = function() {
+ viewfeed(-1);
+ };
+ hotkey_actions["goto_published"] = function() {
+ viewfeed(-2);
+ };
+ hotkey_actions["goto_tagcloud"] = function() {
+ displayDlg("printTagCloud");
+ };
+ hotkey_actions["goto_prefs"] = function() {
+ gotoPreferences();
+ };
+ hotkey_actions["select_article_cursor"] = function() {
+ var id = getArticleUnderPointer();
+ if (id) {
+ var cb = dijit.byId("RCHK-" + id);
+ if (cb) {
+ cb.attr("checked", !cb.attr("checked"));
+ toggleSelectRowById(cb, "RROW-" + id);
+ return false;
+ }
+ }
+ };
+ hotkey_actions["create_label"] = function() {
+ addLabel();
+ };
+ hotkey_actions["create_filter"] = function() {
+ quickAddFilter();
+ };
+ hotkey_actions["collapse_sidebar"] = function() {
+ collapse_feedlist();
+ };
+ hotkey_actions["toggle_embed_original"] = function() {
+ if (typeof embedOriginalArticle != "undefined") {
+ if (getActiveArticleId())
+ embedOriginalArticle(getActiveArticleId());
+ } else {
+ alert(__("Please enable embed_original plugin first."));
+ }
+ };
+ hotkey_actions["toggle_widescreen"] = function() {
+ if (!isCdmMode()) {
+ _widescreen_mode = !_widescreen_mode;
+
+ switchPanelMode(_widescreen_mode);
+ }
+ };
+ hotkey_actions["help_dialog"] = function() {
+ helpDialog("main");
+ };
+ hotkey_actions["toggle_combined_mode"] = function() {
+ notify_progress("Loading, please wait...");
+
+ var value = isCdmMode() ? "false" : "true";
+ var query = "?op=rpc&method=setpref&key=COMBINED_DISPLAY_MODE&value=" + value;
+
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ window.location.reload();
+ } });
+ };
+
} catch (e) {
exception_error("init", e);
@@ -447,7 +676,7 @@ function parse_runtime_info(data) {
}
if (k == "dep_ts" && parseInt(getInitParam("dep_ts")) > 0) {
- if (parseInt(getInitParam("dep_ts")) < parseInt(v)) {
+ if (parseInt(getInitParam("dep_ts")) < parseInt(v) && getInitParam("reload_on_ts_change")) {
window.location.reload();
}
}
@@ -603,229 +832,8 @@ function hotkey_handler(e) {
}
}
- switch (hotkey_action) {
- case "next_feed":
- var rv = dijit.byId("feedTree").getNextFeed(
- getActiveFeedId(), activeFeedIsCat());
-
- if (rv) viewfeed(rv[0], '', rv[1]);
- return false;
- case "prev_feed":
- var rv = dijit.byId("feedTree").getPreviousFeed(
- getActiveFeedId(), activeFeedIsCat());
-
- if (rv) viewfeed(rv[0], '', rv[1]);
- return false;
- case "next_article":
- moveToPost('next');
- return false;
- case "prev_article":
- moveToPost('prev');
- return false;
- case "next_article_noscroll":
- moveToPost('next', true);
- return false;
- case "prev_article_noscroll":
- moveToPost('prev', true);
- return false;
- case "search_dialog":
- search();
- return ;
- case "toggle_mark":
- selectionToggleMarked(undefined, false, true);
- return false;
- case "toggle_publ":
- selectionTogglePublished(undefined, false, true);
- return false;
- case "toggle_unread":
- selectionToggleUnread(undefined, false, true);
- return false;
- case "edit_tags":
- var id = getActiveArticleId();
- if (id) {
- editArticleTags(id, getActiveFeedId(), isCdmMode());
- return;
- }
- return false;
- case "dismiss_selected":
- dismissSelectedArticles();
- return false;
- case "dismiss_read":
- return false;
- case "open_in_new_window":
- if (getActiveArticleId()) {
- openArticleInNewWindow(getActiveArticleId());
- return;
- }
- return false;
- case "catchup_below":
- catchupRelativeToArticle(1);
- return false;
- case "catchup_above":
- catchupRelativeToArticle(0);
- return false;
- case "article_scroll_down":
- var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
-
- scrollArticle(ctr.offsetHeight/3);
- return false;
- case "article_scroll_up":
- var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame");
-
- scrollArticle(-ctr.offsetHeight/3);
- return false;
- case "close_article":
- if (isCdmMode()) {
- if (!getInitParam("cdm_expanded")) {
- cdmCollapseArticle(false, getActiveArticleId());
- } else {
- dismissArticle(getActiveArticleId());
- }
- } else {
- closeArticlePanel();
- }
- return false;
- case "email_article":
- if (typeof emailArticle != "undefined") {
- emailArticle();
- } else if (typeof mailtoArticle != "undefined") {
- mailtoArticle();
- } else {
- alert(__("Please enable mail plugin first."));
- }
- return false;
- case "select_all":
- selectArticles('all');
- return false;
- case "select_unread":
- selectArticles('unread');
- return false;
- case "select_marked":
- selectArticles('marked');
- return false;
- case "select_published":
- selectArticles('published');
- return false;
- case "select_invert":
- selectArticles('invert');
- return false;
- case "select_none":
- selectArticles('none');
- return false;
- case "feed_refresh":
- if (getActiveFeedId() != undefined) {
- viewfeed(getActiveFeedId(), '', activeFeedIsCat());
- return;
- }
- return false;
- case "feed_unhide_read":
- toggleDispRead();
- return false;
- case "feed_subscribe":
- quickAddFeed();
- return false;
- case "feed_debug_update":
- window.open("backend.php?op=feeds&method=view&feed=" + getActiveFeedId() +
- "&view_mode=adaptive&order_by=default&update=&m=ForceUpdate&cat=" +
- activeFeedIsCat() + "&DevForceUpdate=1&debug=1&xdebug=1&csrf_token=" +
- getInitParam("csrf_token"));
- return false;
- case "feed_edit":
- if (activeFeedIsCat())
- alert(__("You can't edit this kind of feed."));
- else
- editFeed(getActiveFeedId());
- return false;
- case "feed_catchup":
- if (getActiveFeedId() != undefined) {
- catchupCurrentFeed();
- return;
- }
- return false;
- case "feed_reverse":
- reverseHeadlineOrder();
- return false;
- case "catchup_all":
- catchupAllFeeds();
- return false;
- case "cat_toggle_collapse":
- if (activeFeedIsCat()) {
- dijit.byId("feedTree").collapseCat(getActiveFeedId());
- return;
- }
- return false;
- case "goto_all":
- viewfeed(-4);
- return false;
- case "goto_fresh":
- viewfeed(-3);
- return false;
- case "goto_marked":
- viewfeed(-1);
- return false;
- case "goto_published":
- viewfeed(-2);
- return false;
- case "goto_tagcloud":
- displayDlg("printTagCloud");
- return false;
- case "goto_prefs":
- gotoPreferences();
- return false;
- case "select_article_cursor":
- var id = getArticleUnderPointer();
- if (id) {
- var cb = dijit.byId("RCHK-" + id);
- if (cb) {
- cb.attr("checked", !cb.attr("checked"));
- toggleSelectRowById(cb, "RROW-" + id);
- return false;
- }
- }
- return false;
- case "create_label":
- addLabel();
- return false;
- case "create_filter":
- quickAddFilter();
- return false;
- case "collapse_sidebar":
- collapse_feedlist();
- return false;
- case "toggle_embed_original":
- if (typeof embedOriginalArticle != "undefined") {
- if (getActiveArticleId())
- embedOriginalArticle(getActiveArticleId());
- } else {
- alert(__("Please enable embed_original plugin first."));
- }
- return false;
- case "toggle_widescreen":
- if (!isCdmMode()) {
- _widescreen_mode = !_widescreen_mode;
-
- switchPanelMode(_widescreen_mode);
- }
- return false;
- case "help_dialog":
- helpDialog("main");
- return false;
- case "toggle_combined_mode":
- notify_progress("Loading, please wait...");
-
- var value = isCdmMode() ? "false" : "true";
- var query = "?op=rpc&method=setpref&key=COMBINED_DISPLAY_MODE&value=" + value;
-
- new Ajax.Request("backend.php", {
- parameters: query,
- onComplete: function(transport) {
- window.location.reload();
- } });
-
- return false;
- default:
- console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey);
- }
+ var action = hotkey_actions[hotkey_action];
+ if(action != null) action();
} catch (e) {
exception_error("hotkey_handler", e);
diff --git a/js/viewfeed.js b/js/viewfeed.js
index e32d3a990..cc14461f4 100644
--- a/js/viewfeed.js
+++ b/js/viewfeed.js
@@ -13,6 +13,8 @@ var catchup_timeout_id = false;
var cids_requested = [];
var loaded_article_ids = [];
+var _post_preview_timeout = false;
+
var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null;
function headlines_callback2(transport, offset, background, infscroll_req) {
@@ -205,7 +207,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
_infscroll_request_sent = 0;
- headlines_scroll_handler($("headlines-frame"));
+ unpackVisibleHeadlines();
notify("");
@@ -315,7 +317,7 @@ function article_callback2(transport, id) {
var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length
request_counters(unread_in_buffer == 0);
- headlines_scroll_handler($("headlines-frame"));
+ //headlines_scroll_handler($("headlines-frame"));
/* try {
if (!_infscroll_disable &&
@@ -397,7 +399,7 @@ function view(id) {
console.warn(e);
} */
- headlines_scroll_handler($("headlines-frame"));
+ //headlines_scroll_handler($("headlines-frame"));
return;
}
@@ -979,9 +981,9 @@ function deleteSelection() {
var str;
if (getActiveFeedId() != 0) {
- str = __("Delete %d selected articles in %s?");
+ str = ngettext("Delete %d selected article in %s?", "Delete %d selected articles in %s?" , rows.length);
} else {
- str = __("Delete %d selected articles?");
+ str = ngettext("Delete %d selected article?", "Delete %d selected articles?", rows.length);
}
str = str.replace("%d", rows.length);
@@ -1023,10 +1025,10 @@ function archiveSelection() {
var op;
if (getActiveFeedId() != 0) {
- str = __("Archive %d selected articles in %s?");
+ str = ngettext("Archive %d selected article in %s?", "Archive %d selected articles in %s?", rows.length);
op = "archive";
} else {
- str = __("Move %d archived articles back?");
+ str = ngettext("Move %d archived article back?", "Move %d archived articles back?", rows.length);
op = "unarchive";
}
@@ -1070,7 +1072,7 @@ function catchupSelection() {
var fn = getFeedName(getActiveFeedId(), activeFeedIsCat());
- var str = __("Mark %d selected articles in %s as read?");
+ var str = ngettext("Mark %d selected article in %s as read?", "Mark %d selected articles in %s as read?", rows.length);
str = str.replace("%d", rows.length);
str = str.replace("%s", fn);
@@ -1166,17 +1168,61 @@ function getActiveArticleId() {
return _active_article_id;
}
-function postMouseIn(id) {
+function postMouseIn(e, id) {
post_under_pointer = id;
+
+ if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout);
+
+ if (!isCdmMode() || !getInitParam("cdm_expanded")) {
+ _post_preview_timeout = window.setTimeout(function() {
+ displaySmallArticlePreview(e, id);
+ }, 1000);
+ }
+}
+
+function displaySmallArticlePreview(e, id) {
+ try {
+ var query = "?op=rpc&method=cdmarticlepreview&id=" + id;
+
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ cexc = $("CEXC-" + id);
+ preview = $("small_article_preview");
+ row = $("RROW-" + id);
+ ctr = $("headlines-frame");
+
+ if (id != getActiveArticleId() && (!isCdmMode() || (cexc && Element.visible(cexc))) && row && preview) {
+ preview.innerHTML = transport.responseText;
+ new Effect.Appear(preview, {duration:0.2});
+
+ preview.setStyle({
+ left: (e.clientX + 20) + 'px',
+ top: (row.offsetTop + row.offsetHeight*2 + 20 - ctr.scrollTop) + 'px' });
+
+ }
+
+ } });
+
+
+ } catch (e) {
+ exception_error("displaySmallArticlePreview", e);
+ }
}
function postMouseOut(id) {
post_under_pointer = false;
+
+ if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout);
+
+ if (Element.visible("small_article_preview"))
+ Element.hide("small_article_preview");
}
-function headlines_scroll_handler(e) {
+function unpackVisibleHeadlines() {
try {
- var hsp = $("headlines-spacer");
+
+ if (!isCdmMode()) return;
$$("#headlines-frame > div[id*=RROW]").each(
function(child) {
@@ -1195,6 +1241,17 @@ function headlines_scroll_handler(e) {
);
+ } catch (e) {
+ exception_error("unpackVisibleHeadlines", e);
+ }
+}
+
+function headlines_scroll_handler(e) {
+ try {
+ var hsp = $("headlines-spacer");
+
+ unpackVisibleHeadlines();
+
if (!_infscroll_disable) {
if ((hsp && e.scrollTop + e.offsetHeight >= hsp.offsetTop - hsp.offsetHeight) ||
(e.scrollHeight != 0 &&
@@ -1233,7 +1290,7 @@ function headlines_scroll_handler(e) {
if (!_infscroll_request_sent) {
catchup_timeout_id = window.setTimeout('catchupBatchedArticles()',
- 2000);
+ 500);
}
}
}
@@ -1317,7 +1374,7 @@ function catchupRelativeToArticle(below, id) {
if (ids_to_mark.length == 0) {
alert(__("No articles found to mark"));
} else {
- var msg = __("Mark %d article(s) as read?").replace("%d", ids_to_mark.length);
+ var msg = ngettext("Mark %d article as read?", "Mark %d articles as read?", ids_to_mark.length).replace("%d", ids_to_mark.length);
if (getInitParam("confirm_feed_catchup") != 1 || confirm(msg)) {
@@ -1374,6 +1431,8 @@ function cdmExpandArticle(id) {
try {
console.log("cdmExpandArticle " + id);
+ if (!$("RROW-" + id)) return false;
+
hideAuxDlg();
var elem = $("CICD-" + getActiveArticleId());
@@ -1861,7 +1920,7 @@ function initHeadlinesMenu() {
var bare_id = id.substr(id.indexOf(":")+1);
var name = label.name[0];
- bare_id = -11-bare_id;
+ bare_id = feed_to_label_id(bare_id);
labelAddMenu.addChild(new dijit.MenuItem({
label: name,
@@ -2061,3 +2120,4 @@ function displayArticleUrl(id) {
exception_error("changeScore", e);
}
}
+