X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=viewfeed.js;h=acce5310d8f714965e4deb26328229fc2dfb7d15;hb=91743a49ff54862ac5b14e6d026849705c8651df;hp=16f96216a4fefded7f1fcd1b4661b5623507d14b;hpb=5aaf9b34e43c90dfc3b95731d71f4d598251a321;p=tt-rss.git diff --git a/viewfeed.js b/viewfeed.js index 16f96216..acce5310 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -2,13 +2,6 @@ var active_post_id = false; var last_article_view = false; var active_real_feed_id = false; -var _tag_active_post_id = false; -var _tag_active_feed_id = false; -var _tag_active_cdm = false; - -// FIXME: kludge, to restore scrollTop after tag editor terminates -var _tag_cdm_scroll = false; - // FIXME: kludges, needs proper implementation var _reload_feedlist_after_view = false; @@ -20,20 +13,7 @@ var article_cache = new Array(); var vgroup_last_feed = false; var post_under_pointer = false; -function catchup_callback() { - if (xmlhttp_rpc.readyState == 4) { - try { - debug("catchup_callback"); - notify(""); - all_counters_callback2(xmlhttp_rpc); - if (_catchup_callback_func) { - setTimeout(_catchup_callback_func, 10); - } - } catch (e) { - exception_error("catchup_callback", e); - } - } -} +var last_requested_article = false; function catchup_callback2(transport, callback) { try { @@ -44,7 +24,7 @@ function catchup_callback2(transport, callback) { setTimeout(callback, 10); } } catch (e) { - exception_error("catchup_callback2", e); + exception_error("catchup_callback2", e, transport); } } @@ -56,29 +36,45 @@ function clean_feed_selections() { if (feeds[i].id && feeds[i].id.match("FEEDR-")) { feeds[i].className = feeds[i].className.replace("Selected", ""); } + if (feeds[i].id && feeds[i].id.match("FCAT-")) { + feeds[i].className = feeds[i].className.replace("Selected", ""); + } } } catch (e) { exception_error("clean_feed_selections", e); } } -function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { +function headlines_callback2(transport, feed_cur_page) { try { loading_set_progress(100); debug("headlines_callback2 [page=" + feed_cur_page + "]"); + if (!transport_error_check(transport)) return; + clean_feed_selections(); + + var is_cat = false; + var feed_id = false; - setActiveFeedId(active_feed_id); - - if (is_cat != undefined) { - active_feed_is_cat = is_cat; + if (transport.responseXML) { + var headlines = transport.responseXML.getElementsByTagName("headlines")[0]; + if (headlines) { + is_cat = headlines.getAttribute("is_cat"); + feed_id = headlines.getAttribute("id"); + setActiveFeedId(feed_id, is_cat); + } } - + if (!is_cat) { - var feedr = document.getElementById("FEEDR-" + active_feed_id); + var feedr = document.getElementById("FEEDR-" + feed_id); + if (feedr && !feedr.className.match("Selected")) { + feedr.className = feedr.className + "Selected"; + } + } else { + var feedr = document.getElementById("FCAT-" + feed_id); if (feedr && !feedr.className.match("Selected")) { feedr.className = feedr.className + "Selected"; } @@ -128,10 +124,10 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { cache_prefix = "F:"; } - cache_invalidate(cache_prefix + active_feed_id); + cache_invalidate(cache_prefix + feed_id); if (!disable_cache) { - cache_inject(cache_prefix + active_feed_id, + cache_inject(cache_prefix + feed_id, headlines.firstChild.nodeValue, headlines_unread); } @@ -161,8 +157,6 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { markHeadline(ids[i]); } - subtoolbarSearch(); - } else { debug("no new headlines received"); } @@ -210,6 +204,7 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { if (_cdm_wd_timeout) window.clearTimeout(_cdm_wd_timeout); if (!document.getElementById("headlinesList") && + getActiveFeedId() != -3 && getInitParam("cdm_auto_catchup") == 1) { debug("starting CDM watchdog"); _cdm_wd_timeout = window.setTimeout("cdmWatchdog()", 5000); @@ -218,15 +213,6 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { debug("not in CDM mode or watchdog disabled"); } - if (_tag_cdm_scroll) { - try { - document.getElementById("headlinesInnerContainer").scrollTop = _tag_cdm_scroll; - _tag_cdm_scroll = false; - debug("resetting headlinesInner scrollTop"); - - } catch (e) { } - } - _feed_cur_page = feed_cur_page; _infscroll_request_sent = 0; @@ -235,7 +221,7 @@ function headlines_callback2(transport, active_feed_id, is_cat, feed_cur_page) { remove_splash(); } catch (e) { - exception_error("headlines_callback2", e); + exception_error("headlines_callback2", e, transport); } } @@ -246,7 +232,13 @@ function render_article(article) { f.scrollTop = 0; } catch (e) { }; - f.innerHTML = article; + var fi = document.getElementById("content-insert"); + + try { + fi.scrollTop = 0; + } catch (e) { }; + + fi.innerHTML = article; } catch (e) { exception_error("render_article", e); @@ -285,7 +277,7 @@ function showArticleInHeadlines(id) { view_mode = document.forms['main_toolbar_form'].view_mode; view_mode = view_mode[view_mode.selectedIndex].value; } catch (e) { - exception_error("showArticleInHeadlines/viewmode", e, true); + // } if (upd_img_pic && upd_img_pic.src.match("updated.png")) { @@ -322,12 +314,9 @@ function article_callback2(transport, id, feed_id) { if (transport.responseXML) { - active_real_feed_id = feed_id; - active_post_id = id; - - //showArticleInHeadlines(id); + if (!transport_error_check(transport)) return; - var reply = transport.responseXML.firstChild.firstChild; + debug("looking for articles to cache..."); var articles = transport.responseXML.getElementsByTagName("article"); @@ -343,11 +332,27 @@ function article_callback2(transport, id, feed_id) { cache_inject(a_id, articles[i].firstChild.nodeValue); } + + if (id != last_requested_article) { + debug("requested article id is out of sequence, aborting"); + return; + } + + active_real_feed_id = feed_id; + active_post_id = id; + + showArticleInHeadlines(id); + + if (db) { + db.execute("UPDATE articles SET unread = 0 WHERE id = ?", [id]); + } + + var reply = transport.responseXML.firstChild.firstChild; } else { debug("article_callback: returned no XML object"); - var f = document.getElementById("content-frame"); - f.innerHTML = "
" + __('Could not display article (missing XML object)') + "
"; + //var f = document.getElementById("content-frame"); + //f.innerHTML = "
" + __('Could not display article (missing XML object)') + "
"; } var date = new Date(); @@ -361,19 +366,22 @@ function article_callback2(transport, id, feed_id) { setTimeout('updateFeedList(false, false)', 50); _reload_feedlist_after_view = false; } else { - var counters = transport.responseXML.getElementsByTagName("counters")[0]; + if (transport.responseXML) { + var counters = transport.responseXML.getElementsByTagName("counters")[0]; - if (counters) { - debug("parsing piggybacked counters: " + counters); - parse_counters(counters, false); - } else { - debug("counters container not found in reply"); + if (counters) { + debug("parsing piggybacked counters: " + counters); + parse_counters(counters, false); + } else { + debug("counters container not found in reply, requesting..."); + request_counters(); + } } } notify(""); } catch (e) { - exception_error("article_callback2", e); + exception_error("article_callback2", e, transport); } } @@ -381,7 +389,9 @@ function view(id, feed_id, skip_history) { try { debug("loading article: " + id + "/" + feed_id); - + + if (offline_mode) return view_offline(id, feed_id); + var cached_article = cache_find(id); debug("cache check result: " + (cached_article != false)); @@ -426,11 +436,15 @@ function view(id, feed_id, skip_history) { var crow = document.getElementById("RROW-" + id); var article_is_unread = crow.className.match("Unread"); + if (!async_counters_work) { + query = query + "&csync=true"; + } + showArticleInHeadlines(id); if (!cached_article) { - notify_progress("Loading, please wait..."); + notify_progress("Loading, please wait...", true); } else if (cached_article && article_is_unread) { @@ -442,15 +456,20 @@ function view(id, feed_id, skip_history) { query = query + "&mode=prefetch_old"; render_article(cached_article); + } cache_expire(); + last_requested_article = id; + new Ajax.Request(query, { onComplete: function(transport) { article_callback2(transport, id, feed_id); } }); + return false; + } catch (e) { exception_error("view", e); } @@ -513,6 +532,9 @@ function toggleMark(id, client_only, no_effects) { } var mark_img = document.getElementById("FMPIC-" + id); + + if (!mark_img) return; + var vfeedu = document.getElementById("FEEDU--1"); var crow = document.getElementById("RROW-" + id); @@ -521,6 +543,10 @@ function toggleMark(id, client_only, no_effects) { mark_img.alt = __("Unstar article"); query = query + "&mark=1"; + if (db) { + db.execute("UPDATE articles SET marked = 1 WHERE id = ?", [id]); + } + } else { //mark_img.src = "images/mark_unset.png"; mark_img.alt = __("Please wait..."); @@ -532,8 +558,15 @@ function toggleMark(id, client_only, no_effects) { mark_img.src = mark_img.src.replace("mark_set", "mark_unset"); mark_img.alt = __("Star article"); } + + if (db) { + db.execute("UPDATE articles SET marked = 0 WHERE id = ?", [id]); + } + } + update_local_feedlist_counters(); + if (!client_only) { debug(query); @@ -564,6 +597,9 @@ function togglePub(id, client_only, no_effects) { } var mark_img = document.getElementById("FPPIC-" + id); + + if (!mark_img) return; + var vfeedu = document.getElementById("FEEDU--2"); var crow = document.getElementById("RROW-" + id); @@ -775,6 +811,12 @@ function toggleUnread(id, cmode, effect) { } else { row.className = nc + "Unread"; } + + if (db) { + db.execute("UPDATE articles SET unread = not unread "+ + "WHERE id = ?", [id]); + } + } else if (cmode == 0) { row.className = nc; @@ -783,10 +825,24 @@ function toggleUnread(id, cmode, effect) { afterFinish: toggleUnread_afh, queue: { position:'end', scope: 'TMRQ-' + id, limit: 1 } } ); } + + if (db) { + db.execute("UPDATE articles SET unread = 0 "+ + "WHERE id = ?", [id]); + } + } else if (cmode == 1) { row.className = nc + "Unread"; + + if (db) { + db.execute("UPDATE articles SET unread = 1 "+ + "WHERE id = ?", [id]); + } + } + update_local_feedlist_counters(); + // Disable unmarking as selected for the time being (16.05.08) -fox if (is_selected) row.className = row.className + "Selected"; @@ -804,12 +860,81 @@ function toggleUnread(id, cmode, effect) { } - } catch (e) { exception_error("toggleUnread", e); } } +function selectionRemoveLabel(id) { + try { + + var ids = getSelectedArticleIds2(); + + if (ids.length == 0) { + alert(__("No articles are selected.")); + return; + } + +// var ok = confirm(__("Remove selected articles from label?")); + +// if (ok) { + + var query = "backend.php?op=rpc&subop=removeFromLabel&ids=" + + param_escape(ids.toString()) + "&lid=" + param_escape(id); + +// notify_progress("Loading, please wait..."); + + cache_invalidate("F:" + (-11 - id)); + + new Ajax.Request(query, { + onComplete: function(transport) { + show_labels_in_headlines(transport); + all_counters_callback2(transport); + } }); + +// } + + } catch (e) { + exception_error("selectionAssignLabel", e); + + } +} + +function selectionAssignLabel(id) { + try { + + var ids = getSelectedArticleIds2(); + + if (ids.length == 0) { + alert(__("No articles are selected.")); + return; + } + +// var ok = confirm(__("Assign selected articles to label?")); + +// if (ok) { + + cache_invalidate("F:" + (-11 - id)); + + var query = "backend.php?op=rpc&subop=assignToLabel&ids=" + + param_escape(ids.toString()) + "&lid=" + param_escape(id); + +// notify_progress("Loading, please wait..."); + + new Ajax.Request(query, { + onComplete: function(transport) { + show_labels_in_headlines(transport); + all_counters_callback2(transport); + } }); + +// } + + } catch (e) { + exception_error("selectionAssignLabel", e); + + } +} + function selectionToggleUnread(cdm_mode, set_state, callback_func, no_error) { try { var rows; @@ -980,7 +1105,7 @@ function cdmGetSelectedArticles() { for (i = 0; i < container.childNodes.length; i++) { var child = container.childNodes[i]; - if (child.id.match("RROW-") && child.className.match("Selected")) { + if (child.id && child.id.match("RROW-") && child.className.match("Selected")) { var c_id = child.id.replace("RROW-", ""); sel_articles.push(c_id); } @@ -998,7 +1123,7 @@ function cdmGetVisibleArticles() { for (i = 0; i < container.childNodes.length; i++) { var child = container.childNodes[i]; - if (child.id.match("RROW-")) { + if (child.id && child.id.match("RROW-")) { var c_id = child.id.replace("RROW-", ""); sel_articles.push(c_id); } @@ -1014,7 +1139,7 @@ function cdmGetUnreadArticles() { for (i = 0; i < container.childNodes.length; i++) { var child = container.childNodes[i]; - if (child.id.match("RROW-") && child.className.match("Unread")) { + if (child.id && child.id.match("RROW-") && child.className.match("Unread")) { var c_id = child.id.replace("RROW-", ""); sel_articles.push(c_id); } @@ -1031,7 +1156,7 @@ function cdmSelectArticles(mode) { for (i = 0; i < container.childNodes.length; i++) { var child = container.childNodes[i]; - if (child.id.match("RROW-")) { + if (child.id && child.id.match("RROW-")) { var aid = child.id.replace("RROW-", ""); var cb = document.getElementById("RCHK-" + aid); @@ -1056,7 +1181,7 @@ function cdmSelectArticles(mode) { function catchupPage() { - var fn = getFeedName(getActiveFeedId(), active_feed_is_cat); + var fn = getFeedName(getActiveFeedId(), activeFeedIsCat()); var str = __("Mark all visible articles in %s as read?"); @@ -1095,7 +1220,7 @@ function catchupSelection() { } - var fn = getFeedName(getActiveFeedId(), active_feed_is_cat); + var fn = getFeedName(getActiveFeedId(), activeFeedIsCat()); var str = __("Mark %d selected articles in %s as read?"); @@ -1119,41 +1244,7 @@ function catchupSelection() { } } - -function labelFromSearch(search, search_mode, match_on, feed_id, is_cat) { - - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - } - - var title = prompt(__("Please enter label title:"), ""); - - if (title) { - - var query = "backend.php?op=labelFromSearch&search=" + param_escape(search) + - "&smode=" + param_escape(search_mode) + "&match=" + param_escape(match_on) + - "&feed=" + param_escape(feed_id) + "&is_cat=" + param_escape(is_cat) + - "&title=" + param_escape(title); - - debug("LFS: " + query); - - new Ajax.Request(query, { - onComplete: function(transport) { - dlg_frefresh_callback(transport); - } }); - } -} - function editArticleTags(id, feed_id, cdm_enabled) { - _tag_active_post_id = id; - _tag_active_feed_id = feed_id; - _tag_active_cdm = cdm_enabled; - - cache_invalidate(id); - - try { - _tag_cdm_scroll = document.getElementById("headlinesInnerContainer").scrollTop; - } catch (e) { } displayDlg('editArticleTags', id); } @@ -1169,18 +1260,24 @@ function tag_saved_callback(transport) { _reload_feedlist_after_view = true; } - if (!_tag_active_cdm) { - if (active_post_id == _tag_active_post_id) { - debug("reloading current article"); - view(_tag_active_post_id, _tag_active_feed_id); + + if (transport.responseXML) { + var tags_str = transport.responseXML.getElementsByTagName("tags-str")[0]; + + if (tags_str) { + var id = tags_str.getAttribute("id"); + + if (id) { + var tags = document.getElementById("ATSTR-" + id); + if (tags) { + tags.innerHTML = tags_str.firstChild.nodeValue; + } + } } - } else { - debug("reloading current feed"); - viewCurrentFeed(); } } catch (e) { - exception_error("catchup_callback", e); + exception_error("tag_saved_callback", e); } } @@ -1407,65 +1504,150 @@ function cdmWatchdog() { function cache_inject(id, article, param) { - if (!cache_check_param(id, param)) { - debug("cache_article: miss: " + id + " [p=" + param + "]"); - - var cache_obj = new Array(); - - cache_obj["id"] = id; - cache_obj["data"] = article; - cache_obj["param"] = param; + try { + if (!cache_check_param(id, param)) { + debug("cache_article: miss: " + id + " [p=" + param + "]"); + + + if (db) { - article_cache.push(cache_obj); + var date = new Date(); + var ts = Math.round(date.getTime() / 1000); - } else { - debug("cache_article: hit: " + id + " [p=" + param + "]"); + db.execute("INSERT INTO cache (id, article, param, added) VALUES (?, ?, ?, ?)", + [id, article, param, ts]); + } else { + + var cache_obj = new Array(); + + cache_obj["id"] = id; + cache_obj["data"] = article; + cache_obj["param"] = param; + + article_cache.push(cache_obj); + } + + } else { + debug("cache_article: hit: " + id + " [p=" + param + "]"); + } + } catch (e) { + exception_error("cache_inject", e); } } function cache_find(id) { - for (var i = 0; i < article_cache.length; i++) { - if (article_cache[i]["id"] == id) { - return article_cache[i]["data"]; + + if (db) { + var rs = db.execute("SELECT article FROM cache WHERE id = ?", [id]); + var a = false; + + if (rs.isValidRow()) { + var a = rs.field(0); + } + + rs.close(); + + return a; + + } else { + for (var i = 0; i < article_cache.length; i++) { + if (article_cache[i]["id"] == id) { + return article_cache[i]["data"]; + } } } return false; } function cache_find_param(id, param) { - for (var i = 0; i < article_cache.length; i++) { - if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) { - return article_cache[i]["data"]; + + if (db) { + var rs = db.execute("SELECT article FROM cache WHERE id = ? AND param = ?", + [id, param]); + var a = false; + + if (rs.isValidRow()) { + a = rs.field(0); + } + + rs.close(); + + return a; + + } else { + for (var i = 0; i < article_cache.length; i++) { + if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) { + return article_cache[i]["data"]; + } } } return false; } function cache_check(id) { - for (var i = 0; i < article_cache.length; i++) { - if (article_cache[i]["id"] == id) { - return true; + + if (db) { + var rs = db.execute("SELECT COUNT(*) AS c FROM cache WHERE id = ?", + [id]); + var a = false; + + if (rs.isValidRow()) { + a = rs.field(0) != "0"; + } + + rs.close(); + + return a; + + } else { + for (var i = 0; i < article_cache.length; i++) { + if (article_cache[i]["id"] == id) { + return true; + } } } return false; } function cache_check_param(id, param) { - for (var i = 0; i < article_cache.length; i++) { -// debug("cache_check_param " + article_cache[i]["id"] + ":" + -// article_cache[i]["param"] + " vs " + id + ":" + param); + if (db) { + var rs = db.execute("SELECT COUNT(*) AS c FROM cache WHERE id = ? AND param = ?", + [id, param]); + var a = false; - if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) { - return true; + if (rs.isValidRow()) { + a = rs.field(0) != "0"; + } + + rs.close(); + + return a; + + } else { + for (var i = 0; i < article_cache.length; i++) { + if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) { + return true; + } } } return false; } function cache_expire() { - while (article_cache.length > 25) { - article_cache.shift(); + if (db) { + var date = new Date(); + var ts = Math.round(date.getTime() / 1000); + + db.execute("DELETE FROM cache WHERE added < ? - 1800 AND id LIKE 'FEEDLIST'", [ts]); + db.execute("DELETE FROM cache WHERE added < ? - 600 AND (id LIKE 'F:%' OR id LIKE 'C:%')", [ts]); + db.execute("DELETE FROM cache WHERE added < ? - 86400", [ts]); + + + } else { + while (article_cache.length > 25) { + article_cache.shift(); + } } } @@ -1474,18 +1656,25 @@ function cache_empty() { } function cache_invalidate(id) { - var i = 0 - try { - while (i < article_cache.length) { - if (article_cache[i]["id"] == id) { - debug("cache_invalidate: removed id " + id); - article_cache.splice(i, 1); - return true; + if (db) { + rs = db.execute("DELETE FROM cache WHERE id = ?", [id]); + return rs.rowsAffected != 0; + } else { + + var i = 0 + + while (i < article_cache.length) { + if (article_cache[i]["id"] == id) { + debug("cache_invalidate: removed id " + id); + article_cache.splice(i, 1); + return true; + } + i++; } - i++; } + debug("cache_invalidate: id not found: " + id); return false; } catch (e) { @@ -1497,15 +1686,17 @@ function getActiveArticleId() { return active_post_id; } -function cdmClicked(elem) { +function cdmClicked(id) { try { - if (elem.id && elem.id.match("RROW-")) { + var elem = document.getElementById("RROW-" + id); + + if (elem) { var id = elem.id.replace("RROW-", ""); active_post_id = id; - cdmSelectArticles("none"); +// cdmSelectArticles("none"); toggleUnread(id, 0, true); - toggleSelected(id); +// toggleSelected(id); } } catch (e) { @@ -1533,6 +1724,8 @@ function preload_article_callback(transport) { function preloadArticleUnderPointer(id) { try { + if (getInitParam("bw_limit") == "1") return; + if (post_under_pointer == id && !cache_check(id)) { debug("trying to preload article " + id); @@ -1618,10 +1811,7 @@ function catchupRelativeToArticle(below) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - } - + if (!getActiveArticleId()) { alert(__("No article is selected.")); return; @@ -1695,6 +1885,10 @@ function cdmExpandArticle(a_id) { try { var id = 'CICD-' + a_id; + try { + Element.hide("CEXC-" + a_id); + } catch (e) { } + Effect.Appear(id, {duration : 0.5, beforeStart: function(effect) { var h_id = 'CICH-' + a_id; @@ -1729,15 +1923,9 @@ function fixHeadlinesOrder(ids) { } } -function subtoolbarSearch() { +function hideReadHeadlines() { try { - var q = document.getElementById("subtoolbar_search_box"); - - if (!q) return; - - q = q.value.toUpperCase(); - var ids = false; var vis_ids = new Array(); @@ -1747,26 +1935,189 @@ function subtoolbarSearch() { ids = cdmGetVisibleArticles(); } + var read_headlines_visible = true; + for (var i = 0; i < ids.length; i++) { - var title = document.getElementById("RTITLE-" + ids[i]); + var row = document.getElementById("RROW-" + ids[i]); - if (title) { - if (!title.innerHTML.toUpperCase().match(q)) { - Element.hide(document.getElementById("RROW-" + ids[i])); + if (row && row.className) { + if (read_headlines_visible) { + if (row.className.match("Unread") || row.className.match("Selected")) { + Element.show(row); + vis_ids.push(ids[i]); + } else { + //Effect.Fade(row, {duration : 0.3}); + Element.hide(row); + } } else { - Element.show(document.getElementById("RROW-" + ids[i])); + Element.show(row); vis_ids.push(ids[i]); } } } - + fixHeadlinesOrder(vis_ids); + read_headlines_visible = !read_headlines_visible; + } catch (e) { - exception_error("subtoolbarSearch", e); + exception_error("hideReadHeadlines", e); } } +function invertHeadlineSelection() { + try { + var rows = new Array(); + var r = false; + + if (!isCdmMode()) { + r = document.getElementsByTagName("TR"); + } else { + r = document.getElementsByTagName("DIV"); + } + + for (var i = 0; i < r.length; i++) { + if (r[i].id && r[i].id.match("RROW-")) { + rows.push(r[i]); + } + } + + for (var i = 0; i < rows.length; i++) { + var nc = rows[i].className; + var id = rows[i].id.replace("RROW-", ""); + var cb = document.getElementById("RCHK-" + id); + + if (!rows[i].className.match("Selected")) { + nc = nc + "Selected"; + cb.checked = true; + } else { + nc = nc.replace("Selected", ""); + cb.checked = false; + } + + rows[i].className = nc; + + } + + } catch (e) { + exception_error("invertHeadlineSelection", e); + } +} + function getArticleUnderPointer() { return post_under_pointer; } + +function zoomToArticle(id) { + try { + var w = window.open("backend.php?op=view&mode=zoom&id=" + param_escape(id), + "ttrss_zoom_" + id, + "status=0,toolbar=0,location=0,width=450,height=300,scrollbars=1,menubar=0"); + + } catch (e) { + exception_error("zoomToArticle", e); + } +} + +function showOriginalArticleInline(id) { + try { + + var query = "backend.php?op=rpc&subop=getArticleLink&id=" + id; + + notify_progress("Loading, please wait...", true); + + new Ajax.Request(query, { + onComplete: function(transport) { + + if (transport.responseXML) { + + var link = transport.responseXML.getElementsByTagName("link")[0]; + var id = transport.responseXML.getElementsByTagName("id")[0]; + + notify(""); + + if (link && id) { + link = link.firstChild.nodeValue; + + var ci = document.getElementById("content-insert"); + + var tmp = ""; + + render_article(tmp); + + } + } + } }); + + } catch (e) { + exception_error("showOriginalArticleInline", e); + } +} + + +function scrollArticle(offset) { + try { + if (!isCdmMode()) { + var ci = document.getElementById("content-insert"); + if (ci) { + ci.scrollTop += offset; + } + } else { + var hi = document.getElementById("headlinesInnerContainer"); + if (hi) { + hi.scrollTop += offset; + } + + } + } catch (e) { + exception_error("scrollArticle", e); + } +} + +function show_labels_in_headlines(transport) { + try { + if (transport.responseXML) { + var info = transport.responseXML.getElementsByTagName("info-for-headlines")[0]; + + var elems = info.getElementsByTagName("entry"); + + for (var l = 0; l < elems.length; l++) { + var e_id = elems[l].getAttribute("id"); + + if (e_id) { + + var ctr = document.getElementById("HLLCTR-" + e_id); + + if (ctr) { + ctr.innerHTML = elems[l].firstChild.nodeValue; + } + } + + } + + } + } catch (e) { + exception_error("show_labels_in_headlines", e); + + } +} + +function toggleHeadlineActions() { + try { + var e = document.getElementById("headlineActionsBody"); + var p = document.getElementById("headlineActionsDrop"); + + if (!Element.visible(e)) { + Element.show(e); + } else { + Element.hide(e); + } + + e.scrollTop = 0; + e.style.left = (p.offsetLeft + 1) + "px"; +// e.style.top = (p.offsetTop + p.offsetHeight - 1) + "px"; + + } catch (e) { + exception_error("toggleHeadlineActions", e); + } +}