]> git.wh0rd.org - tt-rss.git/blobdiff - tt-rss.js
dijit.tree feedlist improvements
[tt-rss.git] / tt-rss.js
index a497de53c38fec4a5193ed58654cc191630ad067..d5905346d4098cb7565f38a7f34eab8beee92803 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -8,10 +8,9 @@ var number_of_feeds = 0;
 var hotkey_prefix = false;
 var hotkey_prefix_pressed = false;
 var init_params = {};
-var ver_offset = 0;
-var hor_offset = 0;
 var _force_scheduled_update = false;
 var last_scheduled_update = false;
+var treeModel;
 
 var _rpc_seq = 0;
 
@@ -39,13 +38,14 @@ function getActiveFeedId() {
 
 function setActiveFeedId(id, is_cat) {
        try {
-               //console.log("sAFID(" + id + ", " + is_cat + ")");
                _active_feed_id = id;
 
                if (is_cat != undefined) {
                        _active_feed_is_cat = is_cat;
                }
 
+               selectFeed(id, is_cat);
+
        } catch (e) {
                exception_error("setActiveFeedId", e);
        }
@@ -93,15 +93,15 @@ function dlg_frefresh_callback(transport, deleted_feed) {
                setTimeout("viewfeed(-5)", 100);
        }
 
-       setTimeout('updateFeedList(false, false)', 50);
+       setTimeout('updateFeedList()', 50);
        closeInfoBox();
 }
 
 function updateFeedList() {
        try {
-               //console.log("updateFeedList");
+               console.warn("updateFeedList: function not implemented");
        
-               var query_str = "backend.php?op=feeds";
+/*             var query_str = "backend.php?op=feeds";
        
                if (display_tags) {
                        query_str = query_str + "&tags=1";
@@ -115,7 +115,7 @@ function updateFeedList() {
                        parameters: query_str,
                        onComplete: function(transport) { 
                                render_feedlist(transport.responseText);
-                       } });
+                       } }); */
 
        } catch (e) {
                exception_error("updateFeedList", e);
@@ -244,8 +244,76 @@ function init() {
 
                dojo.require("dijit.layout.BorderContainer");
                dojo.require("dijit.layout.ContentPane");
-
-               //return remove_splash();
+               dojo.require("dijit.Dialog");
+               dojo.require("dijit.form.Button");
+               dojo.require("dojo.data.ItemFileWriteStore");
+               dojo.require("dijit.Tree");
+               dojo.require("dijit.form.Select");
+               dojo.require("dojo.parser");
+
+               dojo.addOnLoad(function() {
+
+                       var store = new dojo.data.ItemFileWriteStore({
+          url: "backend.php?op=feeds"});
+
+                       treeModel = new dijit.tree.ForestStoreModel({
+                               store: store,
+                               query: {
+                                       "type": "feed"
+                               },
+                               rootId: "root",
+                               rootLabel: "Feeds",
+                               childrenAttrs: ["items"]
+                       });
+
+                       var tree = new dijit.Tree({
+                               model: treeModel,
+                               _createTreeNode: function(args) {
+                                       var tnode = new dijit._TreeNode(args);
+                                       tnode.labelNode.innerHTML = args.label;
+                                       return tnode;
+                                       },
+                               getLabelClass: function (item, opened) {
+                                       return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
+                               },
+                               getRowClass: function (item, opened) {
+                                       return (!item.error || item.error == '') ? "dijitTreeRow" : 
+                                               "dijitTreeRow Error";
+                               },
+                               getLabel: function(item) {
+                                       if (item.unread > 0) {
+                                               return item.name + " (" + item.unread + ")";
+                                       } else {
+                                               return item.name;
+                                       }
+                               },
+                               onOpen: function (item, node) {
+                                       var id = String(item.id);
+                                       var cat_id = id.substr(id.indexOf(":")+1);
+
+                                       new Ajax.Request("backend.php", 
+                                               { parameters: "backend.php?op=feeds&subop=collapse&cid=" + 
+                                                       param_escape(cat_id) + "&mode=1" } );
+                          },
+                               onClose: function (item, node) {
+                                       var id = String(item.id);
+                                       var cat_id = id.substr(id.indexOf(":")+1);
+
+                                       new Ajax.Request("backend.php", 
+                                               { parameters: "backend.php?op=feeds&subop=collapse&cid=" + 
+                                                       param_escape(cat_id) + "&mode=0" } );
+
+                          },
+                               onClick: function (item, node) {
+                                       var id = String(item.id);
+                                       var is_cat = id.match("^CAT:");
+                                       var feed = id.substr(id.indexOf(":")+1);
+                                       viewfeed(feed, '', is_cat);                             
+                               },
+                               showRoot: false,
+                       }, "feedTree");
+
+               });
 
                if (!genericSanityCheck()) 
                        return;
@@ -265,91 +333,12 @@ function init() {
        }
 }
 
-function resize_headlines(delta_x, delta_y) {
-
-/*     try {
-
-               console.log("resize_headlines: " + delta_x + ":" + delta_y);
-       
-               var h_frame = $("headlines-frame");
-               var c_frame = $("content-frame");
-               var f_frame = $("footer");
-               var feeds_frame = $("feeds-holder");
-               var resize_grab = $("resize-grabber");
-               var resize_handle = $("resize-handle");
-
-               if (!c_frame || !h_frame) return;
-       
-               if (feeds_frame && getInitParam("theme") == "old-skool") {
-                               feeds_frame.style.bottom = f_frame.offsetHeight + "px";         
-               }
-       
-               if (getInitParam("theme_options").match("horiz_resize")) {
-       
-                       if (delta_x != undefined) {
-                               if (c_frame.offsetLeft - delta_x > feeds_frame.offsetWidth + feeds_frame.offsetLeft + 100 && c_frame.offsetWidth + delta_x > 100) {
-                                       hor_offset = hor_offset + delta_x;
-                               }
-                       }
-       
-                       console.log("resize_headlines: HOR-mode: " + hor_offset);
-       
-                       c_frame.style.width = (400 + hor_offset) + "px";
-                       h_frame.style.right = c_frame.offsetWidth - 1 + "px";
-       
-                       resize_grab.style.top = (h_frame.offsetTop + h_frame.offsetHeight - 60) + "px";
-                       resize_grab.style.left = (h_frame.offsetLeft + h_frame.offsetWidth - 
-                               4) + "px";
-                       resize_grab.style.display = "block";
-
-                       //resize_handle.src = "themes/"+getInitParam('theme')+"/images/resize_handle_vert.png";
-                       resize_handle.style.paddingTop = (resize_grab.offsetHeight / 2 - 7) + "px";
-       
-               } else {
-       
-                       if (delta_y != undefined) {
-                               if (c_frame.offsetHeight + delta_y > 100 && h_frame.offsetHeight - delta_y > 100) {
-                                       ver_offset = ver_offset + delta_y;
-                               }
-                       }
-       
-                       console.log("resize_headlines: VER-mode: " + ver_offset);
-       
-                       h_frame.style.height = (300 - ver_offset) + "px";
-       
-                       c_frame.style.top = (h_frame.offsetTop + h_frame.offsetHeight + 0) + "px";
-                       h_frame.style.height = h_frame.offsetHeight + "px";
-
-                       // Workaround for Opera: force the content page to be re-rendered, 
-                       // so it is not truncated:
-                       var content_pane = $("content-insert");
-                       content_pane.innerHTML = content_pane.innerHTML;
-               }
-       
-               if (getInitParam("cookie_lifetime") != 0) {
-                       setCookie("ttrss_offset_ver", ver_offset, 
-                               getInitParam("cookie_lifetime"));
-                       setCookie("ttrss_offset_hor", hor_offset, 
-                               getInitParam("cookie_lifetime"));
-               } else {
-                       setCookie("ttrss_offset_ver", ver_offset);
-                       setCookie("ttrss_offset_hor", hor_offset);
-               }
-
-       } catch (e) {
-               exception_error("resize_headlines", e);
-       } */
-
-}
-
 function init_second_stage() {
 
        try {
 
                delCookie("ttrss_test");
 
-               window.onresize=resize_headlines;
-
                var toolbar = document.forms["main_toolbar_form"];
 
                dropboxSelect(toolbar.view_mode, getInitParam("default_view_mode"));
@@ -357,29 +346,15 @@ function init_second_stage() {
 
                feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1;
 
-               setTimeout('updateFeedList(false, false)', 50);
-
-               console.log("second stage ok");
-
                loading_set_progress(60);
 
-               ver_offset = parseInt(getCookie("ttrss_offset_ver"));
-               hor_offset = parseInt(getCookie("ttrss_offset_hor"));
-
-               console.log("got offsets from cookies: ver " + ver_offset + " hor " + hor_offset);
-
-               /* fuck IE */
-
-               if (isNaN(hor_offset)) hor_offset = 0;
-               if (isNaN(ver_offset)) ver_offset = 0;
-
-               console.log("offsets from cookies [x:y]: " + hor_offset + ":" + ver_offset);
-
-               resize_headlines();
-
                if (has_local_storage())
                        localStorage.clear();
 
+               console.log("second stage ok");
+
+               feedlist_init();
+
        } catch (e) {
                exception_error("init_second_stage", e);
        }
@@ -470,9 +445,7 @@ function quickMenuGo(opid) {
                }
 
                if (opid == "qmcResetUI") {
-                       hor_offset = 0;
-                       ver_offset = 0;
-                       resize_headlines();
+                       alert("Function not implemented");
                }
 
                if (opid == "qmcToggleReorder") {
@@ -675,67 +648,11 @@ function feedEditSave() {
 
 function collapse_feedlist() {
        try {
-               //console.log("collapse_feedlist");
-               
-               var theme = getInitParam("theme");
-               if (theme != "" && 
-                               !getInitParam("theme_options").match("collapse_feedlist")) return;
-
-               var fl = $("feeds-holder");
-               var fh = $("headlines-frame");
-               var fc = $("content-frame");
-               var ft = $("toolbar");
-               var ff = $("footer");
-               var fhdr = $("header");
-               var fbtn = $("collapse_feeds_btn");
-
-               if (!Element.visible(fl)) {
-                       Element.show(fl);
-                       fbtn.innerHTML = "<<";
-
-                       if (theme != "graycube") {
-
-                               fh.style.left = fl.offsetWidth + "px";
-                               ft.style.left = fl.offsetWidth + "px";
-                               if (fc) fc.style.left = fl.offsetWidth + "px";
-                               if (ff && theme != "compat") ff.style.left = (fl.offsetWidth-1) + "px";
-
-                               if (theme == "compact") fhdr.style.left = (fl.offsetWidth + 10) + "px";
-                       } else {
-                               fh.style.left = fl.offsetWidth + 40 + "px";
-                               ft.style.left = fl.offsetWidth + 40 +"px";
-                               if (fc) fc.style.left = fl.offsetWidth + 40 + "px";
-                       }
-
-                       query = "?op=rpc&subop=setpref&key=_COLLAPSED_FEEDLIST&value=false";
-
-                       new Ajax.Request("backend.php", { parameters: query });
-
-               } else {
-                       Element.hide(fl);
-                       fbtn.innerHTML = ">>";
-
-                       if (theme != "graycube") {
+               console.warn("collapse_feedlist: function not implemented");
 
-                               fh.style.left = "0px";
-                               ft.style.left = "0px";
-                               if (fc) fc.style.left = "0px";
-                               if (ff) ff.style.left = "0px";
+               query = "?op=rpc&subop=setpref&key=_COLLAPSED_FEEDLIST&value=true";
+               new Ajax.Request("backend.php", { parameters: query });
 
-                               if (theme == "compact") fhdr.style.left = "10px";
-
-                       } else {
-                               fh.style.left = "20px";
-                               ft.style.left = "20px";
-                               if (fc) fc.style.left = "20px";
-
-                       }
-
-                       query = "?op=rpc&subop=setpref&key=_COLLAPSED_FEEDLIST&value=true";
-
-                       new Ajax.Request("backend.php", { parameters: query });
-
-               }
        } catch (e) {
                exception_error("collapse_feedlist", e);
        }
@@ -832,7 +749,7 @@ function hotkey_handler(e) {
                        closeInfoBox();
                } 
 
-               if (!hotkeys_enabled) {
+               if (dialogs.length > 0 || !hotkeys_enabled) {
                        console.log("hotkeys disabled");
                        return;
                }