diff options
author | Andrew Dolgov <[email protected]> | 2010-11-15 21:49:00 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2010-11-15 21:49:00 +0300 |
commit | fcf70c510686a0b289f8f5e8713f959d95ae743b (patch) | |
tree | 594458b61fe9d7a1ccb61ddf091f4f903515d649 /feedlist.js | |
parent | 13e785e069cdb2670f6c2dd0a1fa3ba8864a57ad (diff) |
dijit.tree feedlist improvements
Diffstat (limited to 'feedlist.js')
-rw-r--r-- | feedlist.js | 369 |
1 files changed, 135 insertions, 234 deletions
diff --git a/feedlist.js b/feedlist.js index 5b6467852..5b3476e4c 100644 --- a/feedlist.js +++ b/feedlist.js @@ -31,20 +31,6 @@ function viewCategory(cat) { return false; } -/* function render_feedlist(data) { - try { - - var f = $("feeds-frame"); - f.innerHTML = data; -// cache_invalidate("FEEDLIST"); -// cache_inject("FEEDLIST", data, getInitParam("num_feeds")); - feedlist_init(); - - } catch (e) { - exception_error("render_feedlist", e); - } -} */ - function viewNextFeedPage() { try { //if (!getActiveFeedId()) return; @@ -227,25 +213,11 @@ function viewfeed(feed, subop, is_cat, offset) { } if (cache_check) { - var f = $("headlines-frame"); - - clean_feed_selections(); setActiveFeedId(feed, is_cat); - if (!is_cat) { - var feedr = $("FEEDR-" + feed); - if (feedr && !feedr.hasClassName("Selected")) { - feedr.addClassName("Selected"); - } - } else { - var feedr = $("FCAT-" + feed_id); - if (feedr && !feedr.hasClassName("Selected")) { - feedr.addClassName("Selected"); - } - } - - f.innerHTML = cache_find_param(cache_prefix + feed, unread_ctr); + $("headlines-frame").innerHTML = cache_find_param(cache_prefix + feed, + unread_ctr); request_counters(); remove_splash(); @@ -316,61 +288,6 @@ function viewfeed(feed, subop, is_cat, offset) { } } -function toggleCollapseCat_af(effect) { - //var caption = elem.id.replace("FCATLIST-", ""); - - try { - - var elem = effect.element; - var cat = elem.id.replace("FCATLIST-", ""); - var cap = $("FCAP-" + cat); - - if (Element.visible(elem)) { - cap.innerHTML = cap.innerHTML.replace("…", ""); - } else { - if (cap.innerHTML.lastIndexOf("…") != cap.innerHTML.length-3) { - cap.innerHTML = cap.innerHTML + "…"; - } - } - - } catch (e) { - exception_error("toggleCollapseCat_af", e); - } -} - -function toggleCollapseCat(cat) { - try { - - var cat_elem = $("FCAT-" + cat); - var cat_list = $("FCATLIST-" + cat).parentNode; - var caption = $("FCAP-" + cat); - - Effect.toggle('FCATLIST-' + cat, 'blind', { duration: 0.5, - afterFinish: toggleCollapseCat_af }); - - var img = cat_elem.getElementsByTagName("IMG")[0]; - - if (img.src.match("-collapse")) - img.src = img.src.replace("-collapse", "-uncollapse") - else - img.src = img.src.replace("-uncollapse", "-collapse") - - new Ajax.Request("backend.php", - { parameters: "backend.php?op=feeds&subop=collapse&cid=" + - param_escape(cat) } ); - - } catch (e) { - exception_error("toggleCollapseCat", e); - } -} - -function isCatCollapsed(cat) { - try { - return Element.visible("FCATLIST-" + cat); - } catch (e) { - exception_error("isCatCollapsed", e); - } -} function feedlist_dragsorted(ctr) { try { @@ -400,24 +317,26 @@ function feedlist_init() { try { loading_set_progress(90); - //console.log("in feedlist init"); + console.log("in feedlist init"); hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); document.onkeydown = hotkey_handler; setTimeout("hotkey_prefix_timeout()", 5*1000); - if (getActiveFeedId()) { + if (getActiveFeedId()) { //console.log("some feed is open on feedlist refresh, reloading"); //setTimeout("viewCurrentFeed()", 100); } else { - if (getInitParam("cdm_auto_catchup") != 1 && get_feed_unread(-3) > 0) { - notify_silent_next(); + if (getInitParam("cdm_auto_catchup") != 1) { setTimeout("viewfeed(-3)", 100); } else { setTimeout("viewfeed(-5)", 100); remove_splash(); } - } + } + + console.log("T:" + + getInitParam("cdm_auto_catchup") + " " + get_feed_unread(-3)); if (getInitParam("theme") == "" || getInitParam("theme_options").match("hide_footer")) { @@ -461,13 +380,13 @@ function feedlist_init() { function hide_footer() { try { - if (Element.visible("footer")) { + /* if (Element.visible("footer")) { Element.hide("footer"); dijit.byId("main").resize(); //new Effect.Fade("footer", { afterFinish: hide_footer_af }); - } + } */ } catch (e) { exception_error("hide_footer", e); } @@ -583,114 +502,17 @@ function parse_counters(reply, scheduled_call) { var treeItem; setFeedUnread(id, (kind == "cat"), ctr); - -/* if (kind && kind == "cat") { - var catctr = $("FCATCTR-" + id); - if (catctr) { - catctr.innerHTML = "(" + ctr + ")"; - if (ctr > 0) { - catctr.addClassName("Unread"); - } else { - catctr.removeClassName("Unread"); - } - } - continue; - } - - var feedctr = $("FEEDCTR-" + id); - var feedu = $("FEEDU-" + id); - var feedr = $("FEEDR-" + id); - var feed_img = $("FIMG-" + id); - var feedlink = $("FEEDL-" + id); - var feedupd = $("FLUPD-" + id); - - if (updated && feedlink) { - if (error) { - feedlink.title = __("Error:") + " " + error + " (" + updated + ")"; - } else { - feedlink.title = __("Updated:") + " " + updated; - } - } else if (!updated && feedlink) { - feedlink.title = __("Updated:") + " " + __("Never"); - } - if (feedupd) { - if (!updated) updated = ""; - - if (error) { - if (xmsg) { - feedupd.innerHTML = updated + " " + xmsg + " (Error)"; - } else { - feedupd.innerHTML = updated + " (Error)"; - } - } else { - if (xmsg) { - feedupd.innerHTML = updated + " (" + xmsg + ")"; - } else { - feedupd.innerHTML = updated; - } - } + if (kind != "cat") { + //setFeedValue(id, false, 'error', error); + setFeedValue(id, false, 'updated', updated); } - - if (has_img && feed_img) { - if (!feed_img.src.match(id + ".ico")) { - feed_img.src = getInitParam("icons_url") + "/" + id + ".ico"; - } - } - - if (feedlink && title) { - feedlink.innerHTML = title; - } - - if (feedctr && feedu && feedr) { - -// if (id == getActiveFeedId()) -// console.log("HAS CTR: " + feedu.innerHTML + " GOT CTR: " + ctr + -// " IS_SCHED: " + scheduled_call); - - if (parseInt(ctr) > 0 && - parseInt(feedu.innerHTML) < parseInt(ctr) && - id == getActiveFeedId() && scheduled_call) { - - displayNewContentPrompt(id); - } - - var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML)); - - feedu.innerHTML = ctr; - - if (error) { - feedr.removeClassName("feed"); - feedr.addClassName("error"); - } else if (id > 0) { - feedr.removeClassName("error"); - feedr.addClassName("feed"); - } + } - if (ctr > 0) { - feedctr.addClassName("Unread"); - feedr.addClassName("Unread"); - - if (row_needs_hl && - !getInitParam("theme_options").match('no_highlights')) { - new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5", - queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } ); - - cache_invalidate("F:" + id); - } - } else { - feedctr.removeClassName("Unread"); - feedr.removeClassName("Unread"); - } - } */ - } - hideOrShowFeeds(getInitParam("hide_read_feeds") == 1); var feeds_stored = number_of_feeds; - //console.log("Feed counters, C: " + feeds_found + ", S:" + feeds_stored); - if (feeds_stored != feeds_found) { number_of_feeds = feeds_found; @@ -698,12 +520,6 @@ function parse_counters(reply, scheduled_call) { console.log("Subscribed feed number changed, refreshing feedlist"); setTimeout('updateFeedList()', 50); } - } else { -/* var fl = $("feeds-frame").innerHTML; - if (fl) { - cache_invalidate("FEEDLIST"); - cache_inject("FEEDLIST", fl, getInitParam("num_feeds")); - } */ } } catch (e) { @@ -711,23 +527,25 @@ function parse_counters(reply, scheduled_call) { } } -function get_feed_unread(id) { +function get_feed_unread(feed, is_cat) { try { - return parseInt($("FEEDU-" + id).innerHTML); + if (is_cat) + treeItem = treeModel.store._itemsByIdentity['CAT:' + feed]; + else + treeItem = treeModel.store._itemsByIdentity['FEED:' + feed]; + + if (treeItem) + return treeModel.store.getValue(treeItem, 'unread'); + } catch (e) { - return -1; + // } + + return -1; } function get_cat_unread(id) { - try { - var ctr = $("FCATCTR-" + id).innerHTML; - ctr = ctr.replace("(", ""); - ctr = ctr.replace(")", ""); - return parseInt(ctr); - } catch (e) { - return -1; - } + return get_feed_unread(id, true); } function get_feed_entry_unread(elem) { @@ -810,6 +628,33 @@ function resort_feedlist() { } function hideOrShowFeeds(hide) { + var tree = dijit.byId("feedTree"); + + if (getInitParam("enable_feed_cats")) { + + var cats = tree.model.store._arrayOfTopLevelItems; + + cats.each(function(cat) { + var cat_unread = hideOrShowFeedsCategory(cat.items, hide); + + var id = String(cat.id); + var node = tree._itemNodesMap[id]; + + if (node) { + if (hide && cat_unread == 0) { + Effect.Fade(node[0].rowNode, {duration : 0.3, + queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }}); + } else { + Element.show(node[0].rowNode); + ++cat_unread; + } + } + + }); + + } else { + hideOrShowFeedsCategory(tree.model.store._arrayOfTopLevelItems, hide); + } /* try { @@ -830,10 +675,33 @@ function hideOrShowFeeds(hide) { } */ } -function hideOrShowFeedsCategory(cat_id, hide) { +function hideOrShowFeedsCategory(feeds, hide) { try { + //console.warn("hideOrShowFeedsCategory: function not implemented"); + var tree = dijit.byId("feedTree"); + var cat_unread = 0; - var nodes; + feeds.each(function(feed) { + var id = String(feed.id); + var bare_id = parseInt(id.substr(id.indexOf(":")+1)); + + var unread = feed.unread[0]; + var node = tree._itemNodesMap[id]; + + if (node) { + if (hide && unread == 0 && (bare_id > 0 || !getInitParam("hide_read_shows_special"))) { + Effect.Fade(node[0].rowNode, {duration : 0.3, + queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }}); + } else { + Element.show(node[0].rowNode); + ++cat_unread; + } + } + }); + + return cat_unread; + +/* var nodes; var cat_node; if (cat_id) { @@ -869,26 +737,33 @@ function hideOrShowFeedsCategory(cat_id, hide) { } else { Element.show(cat_node); } - } + } */ } catch (e) { exception_error("hideOrShowFeedsCategory", e); } } -function getFeedName(id, is_cat) { - var e; +function getFeedName(feed, is_cat) { + return getFeedValue(feed, is_cat, 'name'); +} - if (is_cat) { - e = $("FCATN-" + id); - } else { - e = $("FEEDN-" + id); - } - if (e) { - return e.innerHTML.stripTags(); - } else { - return ''; +function getFeedValue(feed, is_cat, key) { + + try { + if (is_cat) + treeItem = treeModel.store._itemsByIdentity['CAT:' + feed]; + else + treeItem = treeModel.store._itemsByIdentity['FEED:' + feed]; + + if (treeItem) + return treeModel.store.getValue(treeItem, key); + + } catch (e) { + // } + + return ''; } function getNextUnreadCat(id) { @@ -986,29 +861,55 @@ function getRelativeFeedId2(id, is_cat, direction, unread_only) { } } -function clean_feed_selections() { - try { - $$("#feedList li").invoke('removeClassName', 'Selected'); - } catch (e) { - exception_error("clean_feed_selections", e); - } -} - function feedsSortByUnread() { return feeds_sort_by_unread; } function setFeedUnread(feed, is_cat, unread) { try { + setFeedValue(feed, is_cat, 'unread', parseInt(unread)); + } catch (e) { + exception_error("setFeedUnread", e); + } +} + +function setFeedValue(feed, is_cat, key, value) { + try { + if (!value) value = ''; + if (is_cat) treeItem = treeModel.store._itemsByIdentity['CAT:' + feed]; else treeItem = treeModel.store._itemsByIdentity['FEED:' + feed]; if (treeItem) - treeModel.store.setValue(treeItem, 'unread', parseInt(unread)); + treeModel.store.setValue(treeItem, key, value); } catch (e) { - exception_error("setFeedUnread", e); + exception_error("setFeedValue", e); + } +} + +function toggleCollapseCat(id) { + console.warn("toggleCollapseCat: function not implemented"); +} + +function selectFeed(feed, is_cat) { + try { + var tree = dijit.byId("feedTree"); + + if (is_cat) + treeNode = tree._itemNodesMap['CAT:' + feed]; + else + treeNode = tree._itemNodesMap['FEED:' + feed]; + + if (treeNode) { + treeNode = treeNode[0]; + tree._expandNode(treeNode); + tree._selectNode(treeNode); + } + + } catch (e) { + exception_error("selectFeed", e); } } |