]> git.wh0rd.org - tt-rss.git/blobdiff - js/viewfeed.js
make floating title less cpu intensive
[tt-rss.git] / js / viewfeed.js
index b708accfd6d75ba5fd4642a74ba647ebfee4f2fe..9c48fbcdb9d9bc21bdb17ea04effe9e6e3467841 100644 (file)
@@ -55,6 +55,10 @@ 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) { };
 
@@ -444,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];
@@ -488,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];
@@ -1241,7 +1273,8 @@ function headlines_scroll_handler(e) {
                unpackVisibleHeadlines();
 
                // set topmost child in the buffer as active
-               if (getInitParam("cdm_auto_catchup") == 1) {
+               if (getInitParam("cdm_auto_catchup") == 1 &&
+                               (!isCdmMode() || getInitParam("cdm_expanded"))) {
                        var rows = $$("#headlines-frame > div[id*=RROW]");
 
                        for (var i = 0; i < rows.length; i++) {
@@ -1280,6 +1313,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
@@ -1574,6 +1611,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);
                }
@@ -1597,6 +1640,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]);
                        }
@@ -1624,13 +1673,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);
        }
 }
 
@@ -2157,3 +2212,29 @@ function openSelectedAttachment(elem) {
                exception_error("openSelectedAttachment", e);
        }
 }
+
+function updateFloatingTitle() {
+       try {
+               var hf = $("headlines-frame");
+               var child = $("RROW-" + _active_article_id);
+
+               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;
+                       }
+
+                       if (child.offsetTop < hf.scrollTop - header.offsetHeight - 100 &&
+                                       child.offsetTop + child.offsetHeight - hf.scrollTop > 100)
+                               Element.show("floatingTitle");
+                       else
+                               Element.hide("floatingTitle");
+               }
+
+       } catch (e) {
+               exception_error("updateFloatingTitle", e);
+       }
+}