diff options
author | Andrew Dolgov <[email protected]> | 2010-11-12 13:52:53 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2010-11-12 14:54:06 +0300 |
commit | e69fb880a306d65653a2c69e58463cb1c6af868b (patch) | |
tree | ff338ff6c12106da5092d5d6ad47fefa1db27461 /viewfeed.js | |
parent | 6bb0ed42f4edd7af0955181995133ce4bd6365e9 (diff) |
js: misc fixes, code cleanup
Diffstat (limited to 'viewfeed.js')
-rw-r--r-- | viewfeed.js | 465 |
1 files changed, 235 insertions, 230 deletions
diff --git a/viewfeed.js b/viewfeed.js index e9cf4c7c0..f914cada0 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -33,23 +33,6 @@ function catchup_callback2(transport, callback) { } } -function clean_feed_selections() { - try { - var feeds = $("feedList").getElementsByTagName("LI"); - - for (var i = 0; i < feeds.length; i++) { - 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, feed_cur_page) { try { @@ -217,7 +200,7 @@ function headlines_callback2(transport, feed_cur_page) { if (_cdm_wd_timeout) window.clearTimeout(_cdm_wd_timeout); - if (!$("headlinesList") && + if (isCdmMode() && getActiveFeedId() != -3 && getInitParam("cdm_auto_catchup") == 1) { console.log("starting CDM watchdog"); @@ -275,8 +258,8 @@ function showArticleInHeadlines(id) { crow.className = crow.className.replace("Unread", ""); - selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false); - + selectArticles('none'); + var upd_img_pic = $("FUPDPIC-" + id); var cache_prefix = ""; @@ -563,7 +546,7 @@ function toggleMark(id, client_only, no_effects) { mark_img.alt = __("Please wait..."); query = query + "&mark=0"; - if ($("headlinesList") && !no_effects) { + if (!isCdmMode() && !no_effects) { Effect.Puff(mark_img, {duration : 0.25, afterFinish: tMark_afh_off}); } else { mark_img.src = mark_img.src.replace("mark_set", "mark_unset"); @@ -630,7 +613,7 @@ function togglePub(id, client_only, no_effects, note) { mark_img.alt = __("Please wait..."); query = query + "&pub=0"; - if ($("headlinesList") && !no_effects) { + if (!isCdmMode() && !no_effects) { Effect.Puff(mark_img, {duration : 0.25, afterFinish: tPub_afh_off}); } else { mark_img.src = mark_img.src.replace("pub_set", "pub_unset"); @@ -709,14 +692,8 @@ function moveToPost(mode) { try { - var rows; + var rows = getVisibleArticleIds(); - if (isCdmMode()) { - rows = cdmGetVisibleArticles(); - } else { - rows = getVisibleHeadlineIds(); - } - var prev_id = false; var next_id = false; @@ -1126,12 +1103,18 @@ function selectionTogglePublished() { } } -function cdmGetSelectedArticles() { +function getSelectedArticleIds2() { var sel_articles = new Array(); - var container = $("headlinesInnerContainer"); - for (i = 0; i < container.childNodes.length; i++) { - var child = container.childNodes[i]; + var children; + + if (isCdmMode()) + var children = $("headlinesInnerContainer").childNodes; + else + var children = $("headlinesList").rows; + + for (i = 0; i < children.length; i++) { + var child = children[i]; if (child.id && child.id.match("RROW-") && child.className.match("Selected")) { var c_id = child.id.replace("RROW-", ""); @@ -1142,32 +1125,20 @@ function cdmGetSelectedArticles() { return sel_articles; } -function cdmGetVisibleArticles() { +function getLoadedArticleIds() { var sel_articles = new Array(); - var container = $("headlinesInnerContainer"); - if (!container) return sel_articles; + if (isCdmMode()) + var children = $("headlinesInnerContainer").childNodes; + else + var children = $("headlinesList").rows; - for (i = 0; i < container.childNodes.length; i++) { - var child = container.childNodes[i]; + if (!children) return sel_articles; - if (child.id && child.id.match("RROW-")) { - var c_id = child.id.replace("RROW-", ""); - sel_articles.push(c_id); - } - } - - return sel_articles; -} - -function cdmGetUnreadArticles() { - var sel_articles = new Array(); - var container = $("headlinesInnerContainer"); - - for (i = 0; i < container.childNodes.length; i++) { - var child = container.childNodes[i]; + for (i = 0; i < children.length; i++) { + var child = children[i]; - if (child.id && child.id.match("RROW-") && child.className.match("Unread")) { + if (child.id && child.id.match("RROW-")) { var c_id = child.id.replace("RROW-", ""); sel_articles.push(c_id); } @@ -1176,34 +1147,53 @@ function cdmGetUnreadArticles() { return sel_articles; } +// mode = all,none,unread,invert +function selectArticles(mode) { + try { -// mode = all,none,unread -function cdmSelectArticles(mode) { - var container = $("headlinesInnerContainer"); - - for (i = 0; i < container.childNodes.length; i++) { - var child = container.childNodes[i]; - - if (child.id && child.id.match("RROW-")) { - var aid = child.id.replace("RROW-", ""); + var children; + + if (isCdmMode()) + var children = $("headlinesInnerContainer").childNodes; + else + var children = $("headlinesList").rows; - var cb = $("RCHK-" + aid); + for (i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.id && child.id.match("RROW-")) { + var aid = child.id.replace("RROW-", ""); + + var cb = $("RCHK-" + aid); + + if (mode == "all") { + if (!child.className.match("Selected")) { + child.className = child.className + "Selected"; + cb.checked = true; + } + } else if (mode == "unread") { + if (child.className.match("Unread") && !child.className.match("Selected")) { + child.className = child.className + "Selected"; + cb.checked = true; + } + } else if (mode == "invert") { + if (child.className.match("Selected")) { + child.className = child.className.replace("Selected", ""); + cb.checked = false; + } else { + child.className = child.className + "Selected"; + cb.checked = true; + } - if (mode == "all") { - if (!child.className.match("Selected")) { - child.className = child.className + "Selected"; - cb.checked = true; - } - } else if (mode == "unread") { - if (child.className.match("Unread") && !child.className.match("Selected")) { - child.className = child.className + "Selected"; - cb.checked = true; + } else { + child.className = child.className.replace("Selected", ""); + cb.checked = false; } - } else { - child.className = child.className.replace("Selected", ""); - cb.checked = false; - } - } + } + } + + } catch (e) { + exception_error("selectArticles", e); } } @@ -1219,15 +1209,9 @@ function catchupPage() { return; } - if ($("headlinesList")) { - selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true); - selectionToggleUnread(false, 'viewCurrentFeed()', true); - selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false); - } else { - cdmSelectArticles('all'); - selectionToggleUnread(false, 'viewCurrentFeed()', true) - cdmSelectArticles('none'); - } + selectArticles('all'); + selectionToggleUnread(false, 'viewCurrentFeed()', true) + selectArticles('none'); } function deleteSelection() { @@ -1439,60 +1423,6 @@ function editTagsInsert() { } } -function cdmScrollViewport(where) { - console.log("cdmScrollViewport: " + where); - - var ctr = $("headlinesInnerContainer"); - - if (!ctr) return; - - if (where == "bottom") { - ctr.scrollTop = ctr.scrollHeight; - } else { - ctr.scrollTop = where; - } -} - -function cdmArticleIsBelowViewport(id) { - try { - var ctr = $("headlinesInnerContainer"); - var e = $("RROW-" + id); - - if (!e || !ctr) return; - - // article starts below viewport - - if (ctr.scrollTop < e.offsetTop) { - return true; - } else { - return false; - } - - } catch (e) { - exception_error("cdmArticleIsVisible", e); - } -} - -function cdmArticleIsAboveViewport(id) { - try { - var ctr = $("headlinesInnerContainer"); - var e = $("RROW-" + id); - - if (!e || !ctr) return; - - // article starts above viewport - - if (ctr.scrollTop > e.offsetTop + e.offsetHeight) { - return true; - } else { - return false; - } - - } catch (e) { - exception_error("cdmArticleIsVisible", e); - } -} - function cdmScrollToArticleId(id) { try { var ctr = $("headlinesInnerContainer"); @@ -1507,36 +1437,6 @@ function cdmScrollToArticleId(id) { } } -function cdmArticleIsActuallyVisible(id) { - try { - var ctr = $("headlinesInnerContainer"); - var e = $("RROW-" + id); - - if (!e || !ctr) return; - - // article fits in viewport OR article is longer than viewport and - // its bottom is visible - - if (ctr.scrollTop <= e.offsetTop && e.offsetTop + e.offsetHeight <= - ctr.scrollTop + ctr.offsetHeight) { - - return true; - - } else if (e.offsetHeight > ctr.offsetHeight && - e.offsetTop + e.offsetHeight >= ctr.scrollTop && - e.offsetTop + e.offsetHeight <= ctr.scrollTop + ctr.offsetHeight) { - - return true; - - } - - return false; - - } catch (e) { - exception_error("cdmArticleIsVisible", e); - } -} - function cdmWatchdog() { try { @@ -2009,13 +1909,7 @@ function catchupRelativeToArticle(below) { return; } - var visible_ids; - - if ($("headlinesList")) { - visible_ids = getVisibleHeadlineIds(); - } else { - visible_ids = cdmGetVisibleArticles(); - } + var visible_ids = getVisibleArticleIds(); var ids_to_mark = new Array(); @@ -2077,12 +1971,14 @@ function catchupRelativeToArticle(below) { function cdmExpandArticle(id) { try { + hideAuxDlg(); + var elem = $("CICD-" + active_post_id); if (id == active_post_id && Element.visible(elem)) return true; - cdmSelectArticles("none"); + selectArticles("none"); var old_offset = $("RROW-" + id).offsetTop; @@ -2135,48 +2031,6 @@ function fixHeadlinesOrder(ids) { } } -function hideReadHeadlines() { - try { - - var ids = false; - var vis_ids = new Array(); - - if ($("headlinesList")) { - ids = getVisibleHeadlineIds(); - } else { - ids = cdmGetVisibleArticles(); - } - - var read_headlines_visible = true; - - for (var i = 0; i < ids.length; i++) { - var row = $("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(row); - vis_ids.push(ids[i]); - } - } - } - - fixHeadlinesOrder(vis_ids); - - read_headlines_visible = !read_headlines_visible; - - } catch (e) { - exception_error("hideReadHeadlines", e); - } -} - function invertHeadlineSelection() { try { var rows = new Array(); @@ -2400,16 +2254,26 @@ function dismissArticle(id) { function dismissSelectedArticles() { try { - var ids = getSelectedArticleIds2(); + var ids = getVisibleArticleIds(); + var tmp = []; + var sel = []; for (var i = 0; i < ids.length; i++) { var elem = $("RROW-" + ids[i]); - new Effect.Fade(elem, {duration : 0.5}); + + if (elem.className && elem.className.match("Selected")) { + new Effect.Fade(elem, {duration : 0.5}); + sel.push(ids[i]); + } else { + tmp.push(ids[i]); + } } - if (ids.length > 0) + if (sel.length > 0) selectionToggleUnread(false); + fixHeadlinesOrder(tmp); + } catch (e) { exception_error("dismissSelectedArticles", e); } @@ -2419,6 +2283,7 @@ function dismissReadArticles() { try { var ids = getVisibleArticleIds(); + var tmp = []; for (var i = 0; i < ids.length; i++) { var elem = $("RROW-" + ids[i]); @@ -2427,32 +2292,45 @@ function dismissReadArticles() { !elem.className.match("Selected")) { new Effect.Fade(elem, {duration : 0.5}); + } else { + tmp.push(ids[i]); } } + fixHeadlinesOrder(tmp); + } catch (e) { exception_error("dismissSelectedArticles", e); } } function getVisibleArticleIds() { + var ids = []; + try { - if (isCdmMode()) { - return cdmGetVisibleArticles(); - } else { - return getVisibleHeadlineIds(); + var tmp = getLoadedArticleIds(); + + for (var i = 0; i < tmp.length; i++) { + var elem = $("RROW-" + tmp[i]); + if (elem && Element.visible(elem)) + ids.push(tmp[i]); } + } catch (e) { - exception_error("getVisibleArticleIds"); + exception_error("getVisibleArticleIds", e); } + + return ids; } function cdmClicked(event, id) { try { var shift_key = event.shiftKey; + hideAuxDlg(); + if (!event.ctrlKey) { - cdmSelectArticles("none"); + selectArticles("none"); toggleSelected(id); var elem = $("RROW-" + id); @@ -2499,3 +2377,130 @@ function hlClicked(event, id) { return false; } + +function getFirstVisibleHeadlineId() { + var rows = getVisibleArticleIds(); + return rows[0]; + +} + +function getLastVisibleHeadlineId() { + var rows = getVisibleArticleIds(); + return rows[rows.length-1]; +} + +// this only searches loaded headlines list, not in CDM +function getRelativePostIds(id, limit) { + + if (!limit) limit = 3; + + //console.log("getRelativePostIds: " + id + " limit=" + limit); + + var ids = new Array(); + var container = $("headlinesList"); + + if (container) { + var rows = container.rows; + + for (var i = 0; i < rows.length; i++) { + var r_id = rows[i].id.replace("RROW-", ""); + + if (r_id == id) { + for (var k = 1; k <= limit; k++) { + var nid = false; + + if (i > k-1) var nid = rows[i-k].id.replace("RROW-", ""); + if (nid) ids.push(nid); + + if (i < rows.length-k) nid = rows[i+k].id.replace("RROW-", ""); + if (nid) ids.push(nid); + } + + return ids; + } + } + } + + return false; +} + +function openArticleInNewWindow(id) { + try { + console.log("openArticleInNewWindow: " + id); + + var query = "?op=rpc&subop=getArticleLink&id=" + id; + var wname = "ttrss_article_" + id; + + console.log(query + " " + wname); + + var w = window.open("", wname); + + if (!w) notify_error("Failed to open window for the article"); + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + + var link = transport.responseXML.getElementsByTagName("link")[0]; + var id = transport.responseXML.getElementsByTagName("id")[0]; + + console.log("open_article received link: " + link); + + if (link && id) { + + var wname = "ttrss_article_" + id.firstChild.nodeValue; + + console.log("link url: " + link.firstChild.nodeValue + ", wname " + wname); + + var w = window.open(link.firstChild.nodeValue, wname); + + if (!w) { notify_error("Failed to load article in new window"); } + + if (id) { + id = id.firstChild.nodeValue; + if (!$("headlinesList")) { + window.setTimeout("toggleUnread(" + id + ", 0)", 100); + } + } + } else { + notify_error("Can't open article: received invalid article link"); + } + } }); + + } catch (e) { + exception_error("openArticleInNewWindow", e); + } +} + +function isCdmMode() { + return !$("headlinesList"); +} + +function markHeadline(id) { + var row = $("RROW-" + id); + if (row) { + var is_active = false; + + if (row.className.match("Active")) { + is_active = true; + } + row.className = row.className.replace("Selected", ""); + row.className = row.className.replace("Active", ""); + row.className = row.className.replace("Insensitive", ""); + + if (is_active) { + row.className = row.className = "Active"; + } + + var check = $("RCHK-" + id); + + if (check) { + check.checked = true; + } + + row.className = row.className + "Selected"; + + } +} + + |