]> git.wh0rd.org - tt-rss.git/blobdiff - js/viewfeed.js
rework floatingtitle
[tt-rss.git] / js / viewfeed.js
index da3628349bb0ccc8945c6d2dcd83f6df7665bd1a..ec7706547d47893d6e3568397acbb6c0ba2c5a44 100644 (file)
@@ -55,9 +55,18 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                        try {
                                if (infscroll_req == false) {
                                        $("headlines-frame").scrollTop = 0;
+
+                                       Element.hide("floatingTitle");
+                                       $("floatingTitle").setAttribute("rowid", 0);
+                                       $("floatingTitle").innerHTML = "";
                                }
                        } catch (e) { };
 
+                       $("headlines-frame").removeClassName("cdm");
+                       $("headlines-frame").removeClassName("normal");
+
+                       $("headlines-frame").addClassName(isCdmMode() ? "cdm" : "normal");
+
                        var headlines_count = reply['headlines-info']['count'];
 
                        vgroup_last_feed = reply['headlines-info']['vgroup_last_feed'];
@@ -439,7 +448,21 @@ function toggleMark(id, client_only) {
                var row = $("RROW-" + id);
                if (!row) return;
 
-               var imgs = row.getElementsByClassName("markedPic");
+               var imgs = [];
+
+               var row_imgs = row.getElementsByClassName("markedPic");
+
+               for (var i = 0; i < row_imgs.length; i++)
+                       imgs.push(row_imgs[i]);
+
+               var ft = $("floatingTitle");
+
+               if (ft && ft.getAttribute("rowid") == "RROW-" + id) {
+                       var fte = ft.getElementsByClassName("markedPic");
+
+                       for (var i = 0; i < fte.length; i++)
+                               imgs.push(fte[i]);
+               }
 
                for (i = 0; i < imgs.length; i++) {
                        var img = imgs[i];
@@ -483,7 +506,21 @@ function togglePub(id, client_only, no_effects, note) {
                var row = $("RROW-" + id);
                if (!row) return;
 
-               var imgs = row.getElementsByClassName("pubPic");
+               var imgs = [];
+
+               var row_imgs = row.getElementsByClassName("pubPic");
+
+               for (var i = 0; i < row_imgs.length; i++)
+                       imgs.push(row_imgs[i]);
+
+               var ft = $("floatingTitle");
+
+               if (ft && ft.getAttribute("rowid") == "RROW-" + id) {
+                       var fte = ft.getElementsByClassName("pubPic");
+
+                       for (var i = 0; i < fte.length; i++)
+                               imgs.push(fte[i]);
+               }
 
                for (i = 0; i < imgs.length; i++) {
                        var img = imgs[i];
@@ -585,7 +622,7 @@ function moveToPost(mode, noscroll, noexpand) {
 
                                        if (!getInitParam("cdm_expanded")) {
 
-                                               if (!noscroll && article.offsetTop < ctr.scrollTop) {
+                                               if (!noscroll && article && article.offsetTop < ctr.scrollTop) {
                                                        scrollArticle(-ctr.offsetHeight/4);
                                                } else {
                                                        cdmExpandArticle(prev_id, noexpand);
@@ -1235,6 +1272,32 @@ function headlines_scroll_handler(e) {
 
                unpackVisibleHeadlines();
 
+               // set topmost child in the buffer as active
+               if (getInitParam("cdm_auto_catchup") == 1 &&
+                               getSelectedArticleIds2().length <= 1 &&
+                               (!isCdmMode() || getInitParam("cdm_expanded"))) {
+                       var rows = $$("#headlines-frame > div[id*=RROW]");
+
+                       for (var i = 0; i < rows.length; i++) {
+                               var child = rows[i];
+
+                               if ($("headlines-frame").scrollTop < child.offsetTop &&
+                                       child.offsetTop - $("headlines-frame").scrollTop < 100 &&
+                                       child.id.replace("RROW-", "") != _active_article_id) {
+
+                                       if (_active_article_id) {
+                                               var row = $("RROW-" + _active_article_id);
+                                               if (row) row.removeClassName("active");
+                                       }
+
+                                       _active_article_id = child.id.replace("RROW-", "");
+                                       showArticleInHeadlines(_active_article_id, true);
+                                       updateSelectedPrompt();
+                                       break;
+                               }
+                       }
+               }
+
                if (!_infscroll_disable) {
                        if ((hsp && e.scrollTop + e.offsetHeight >= hsp.offsetTop - hsp.offsetHeight) ||
                                        (e.scrollHeight != 0 &&
@@ -1252,6 +1315,10 @@ function headlines_scroll_handler(e) {
                        if (hsp) hsp.innerHTML = "";
                }
 
+               if (getInitParam("cdm_expanded") && isCdmMode()) {
+                       updateFloatingTitle();
+               }
+
                if (getInitParam("cdm_auto_catchup") == 1) {
 
                        // let's get DOM some time to settle down
@@ -1270,6 +1337,7 @@ function headlines_scroll_handler(e) {
 
                                                //console.log("auto_catchup_batch: " + catchup_id_batch.toString());
                                        }
+
                                });
 
                        if (catchup_id_batch.length > 0) {
@@ -1545,6 +1613,12 @@ function dismissArticle(id) {
 
                new Effect.Fade(elem, {duration : 0.5});
 
+               // Remove the content, too
+               var elem_content = $("CICD-" + id);
+               if (elem_content) {
+                       Element.remove(elem_content);
+               }
+
                if (id == getActiveArticleId()) {
                        setActiveArticleId(0);
                }
@@ -1568,6 +1642,12 @@ function dismissSelectedArticles() {
                                        ids[i] != getActiveArticleId()) {
                                new Effect.Fade(elem, {duration : 0.5});
                                sel.push(ids[i]);
+
+                               // Remove the content, too
+                               var elem_content = $("CICD-" + ids[i]);
+                               if (elem_content) {
+                                       Element.remove(elem_content);
+                               }
                        } else {
                                tmp.push(ids[i]);
                        }
@@ -1595,13 +1675,19 @@ function dismissReadArticles() {
                                        !elem.hasClassName("Selected")) {
 
                                new Effect.Fade(elem, {duration : 0.5});
+
+                               // Remove the content, too
+                               var elem_content = $("CICD-" + ids[i]);
+                               if (elem_content) {
+                                       Element.remove(elem_content);
+                               }
                        } else {
                                tmp.push(ids[i]);
                        }
                }
 
        } catch (e) {
-               exception_error("dismissSelectedArticles", e);
+               exception_error("dismissReadArticles", e);
        }
 }
 
@@ -1892,7 +1978,7 @@ function initHeadlinesMenu() {
                                }}));
 
                menu.addChild(new dijit.MenuItem({
-                       label: __("Toggle marked"),
+                       label: __("Toggle starred"),
                        onClick: function(event) {
                                var ids = getSelectedArticleIds2();
                                // cast to string
@@ -2128,3 +2214,58 @@ function openSelectedAttachment(elem) {
                exception_error("openSelectedAttachment", e);
        }
 }
+
+function scrollToRowId(id) {
+       try {
+               var row = $(id);
+
+               if (row)
+                       $("headlines-frame").scrollTop = row.offsetTop;
+
+       } catch (e) {
+               exception_error("scrollToRowId", e);
+       }
+}
+
+function updateFloatingTitle() {
+       try {
+               var hf = $("headlines-frame");
+               var child = $("RROW-" + _active_article_id);
+
+               var elems;
+
+               if (getInitParam("cdm_auto_catchup"))
+                       elems = [$$("RROW-" + _active_article_id)];
+               else
+                       elems = $$("#headlines-frame > div[id*=RROW]");
+
+               for (var i = 0; i < elems.length; i++) {
+
+                       var child = elems[i];
+
+                       if (child && child.offsetTop + child.offsetHeight > hf.scrollTop) {
+
+                               var header = child.getElementsByClassName("cdmHeader")[0];
+
+                               if (child.id != $("floatingTitle").getAttribute("rowid")) {
+                                       $("floatingTitle").setAttribute("rowid", child.id);
+                                       $("floatingTitle").innerHTML = header.innerHTML;
+                                       $("floatingTitle").firstChild.innerHTML = "<img class='anchor markedPic' src='images/page_white_go.png' onclick=\"scrollToRowId('"+child.id+"')\">" + $("floatingTitle").firstChild.innerHTML;
+
+                                       PluginHost.run(PluginHost.HOOK_FLOATING_TITLE, child);
+                               }
+
+                               if (child.offsetTop < hf.scrollTop - header.offsetHeight)
+                                       Element.show("floatingTitle");
+                               else
+                                       Element.hide("floatingTitle");
+
+                               return;
+
+                       }
+               }
+
+       } catch (e) {
+               exception_error("updateFloatingTitle", e);
+       }
+}