]> git.wh0rd.org - tt-rss.git/blobdiff - tt-rss.js
refactor feed subscription/browser dialogs
[tt-rss.git] / tt-rss.js
index 8121e94bc6759450e17ce68cb390b02468fd8818..8af5c2221af5f1afb2c85f3e3ec96696c353b9aa 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -9,7 +9,6 @@ var hotkey_prefix_pressed = false;
 var init_params = {};
 var _force_scheduled_update = false;
 var last_scheduled_update = false;
-var treeModel;
 
 var _rpc_seq = 0;
 
@@ -75,7 +74,7 @@ function updateFeedList() {
                var store = new dojo.data.ItemFileWriteStore({
          url: "backend.php?op=feeds"});
 
-               treeModel = new dijit.tree.ForestStoreModel({
+               var treeModel = new fox.FeedStoreModel({
                        store: store,
                        query: {
                                "type": "feed"
@@ -85,41 +84,15 @@ function updateFeedList() {
                        childrenAttrs: ["items"]
                });
 
-               var tree = new dijit.Tree({
+               var tree = new fox.FeedTree({
                model: treeModel,
-               _createTreeNode: function(args) {
-                       var tnode = new dijit._TreeNode(args);
-
-                       if (args.item.icon)
-                               tnode.iconNode.src = args.item.icon[0];
-
-                       //tnode.labelNode.innerHTML = args.label;
-                       return tnode;
-                       },
-               getIconClass: function (item, opened) {
-                       return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "feedIcon";
-               },
-               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" } );
+                                       param_escape(cat_id) + "&mode=0" } );
           },
                onClose: function (item, node) {
                        var id = String(item.id);
@@ -127,7 +100,7 @@ function updateFeedList() {
 
                        new Ajax.Request("backend.php", 
                                { parameters: "backend.php?op=feeds&subop=collapse&cid=" + 
-                                       param_escape(cat_id) + "&mode=0" } );
+                                       param_escape(cat_id) + "&mode=1" } );
 
           },
                onClick: function (item, node) {
@@ -142,11 +115,33 @@ function updateFeedList() {
                id: "feedTree",
                }, "feedTree");
 
+/*             var menu = new dijit.Menu({id: 'feedMenu'});
+               
+               menu.addChild(new dijit.MenuItem({
+          label: "Simple menu item"
+               }));
+
+//             menu.bindDomNode(tree.domNode); */
+               
+               var tmph = dojo.connect(dijit.byId('feedMenu'), '_openMyself', function (event) { 
+                       console.log(dijit.getEnclosingWidget(event.target));
+                       dojo.disconnect(tmph);
+               });
+
                $("feeds-holder").appendChild(tree.domNode);
 
                var tmph = dojo.connect(tree, 'onLoad', function() {
                dojo.disconnect(tmph);
                        Element.hide("feedlistLoading");
+
+                       tree.collapseHiddenCats();
+
+                       feedlist_init();
+
+//                     var node = dijit.byId("feedTree")._itemNodesMap['FEED:-2'][0].domNode
+//                     menu.bindDomNode(node);
+
+                       loading_set_progress(25);
                });
 
                tree.startup();
@@ -277,25 +272,44 @@ function init() {
                dojo.require("dijit.layout.ContentPane");
                dojo.require("dijit.Dialog");
                dojo.require("dijit.form.Button");
+               dojo.require("dijit.Menu");
                dojo.require("dojo.data.ItemFileWriteStore");
                dojo.require("dijit.Tree");
                dojo.require("dijit.form.Select");
+               dojo.require("dijit.form.TextBox");
+               dojo.require("dijit.form.ValidationTextBox");
+               dojo.require("dijit.form.FilteringSelect");
+               dojo.require("dijit.form.CheckBox");
+               dojo.require("dijit.Toolbar");
+               dojo.require("dijit.ProgressBar");
+               dojo.require("dijit.Menu");
                dojo.require("dojo.parser");
 
+               dojo.registerModulePath("fox", "../..");
+
+               dojo.require("fox.FeedTree");
+
+               if (typeof themeBeforeLayout == 'function') {
+                       themeBeforeLayout();
+               }
+
                dojo.addOnLoad(function() {
                        updateFeedList();
                        closeArticlePanel();
+
+                       if (typeof themeAfterLayout == 'function') {
+                               themeAfterLayout();
+                       }
+
                });
 
                if (!genericSanityCheck()) 
                        return;
 
-               var params = "&ua=" + param_escape(navigator.userAgent);
-
-               loading_set_progress(30);
+               loading_set_progress(20);
 
                new Ajax.Request("backend.php", {
-                       parameters: "backend.php?op=rpc&subop=sanityCheck" + params,
+                       parameters: {op: "rpc", subop: "sanityCheck"},
                        onComplete: function(transport) {
                                        backend_sanity_check_callback(transport);
                                } });
@@ -318,14 +332,11 @@ function init_second_stage() {
 
                feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1;
 
-               loading_set_progress(60);
+               loading_set_progress(30);
 
                if (has_local_storage())
                        localStorage.clear();
 
-               feedlist_init();
-               setTimeout("timeout()", 3000);
-
                console.log("second stage ok");
 
        } catch (e) {
@@ -366,7 +377,11 @@ function quickMenuGo(opid) {
                }
 
                if (opid == "qmcEditFeed") {
-                       editFeedDlg(getActiveFeedId());
+                       if (activeFeedIsCat())
+                               alert(__("You can't edit this kind of feed."));
+                       else
+                               editFeed(getActiveFeedId());
+                       return;
                }
        
                if (opid == "qmcRemoveFeed") {
@@ -404,16 +419,18 @@ function quickMenuGo(opid) {
                }
        
                if (opid == "qmcAddFilter") {
-                       displayDlg('quickAddFilter', '',
-                          function () {document.forms['filter_add_form'].reg_exp.focus();});
+                       quickAddFilter();
+                       return;
                }
 
                if (opid == "qmcAddLabel") {
                        addLabel();
+                       return;
                }
 
                if (opid == "qmcRescoreFeed") {
                        rescoreCurrentFeed();
+                       return;
                }
 
                if (opid == "qmcHKhelp") {
@@ -436,10 +453,11 @@ function toggleDispRead() {
                var query = "?op=rpc&subop=setpref&key=HIDE_READ_FEEDS&value=" + 
                        param_escape(hide);
 
+               setInitParam("hide_read_feeds", hide);
+
                new Ajax.Request("backend.php", {
                        parameters: query,
                        onComplete: function(transport) { 
-                               setInitParam("hide_read_feeds", hide);
                        } });
                                
        } catch (e) {
@@ -520,77 +538,6 @@ function catchupFeedInGroup(id) {
        }
 }
 
-function editFeedDlg(feed) {
-       try {
-
-               if (!feed) {
-                       alert(__("Please select some feed first."));
-                       return;
-               }
-       
-               if ((feed <= 0) || activeFeedIsCat()) {
-                       alert(__("You can't edit this kind of feed."));
-                       return;
-               }
-       
-               var query = "";
-       
-               if (feed > 0) {
-                       query = "?op=pref-feeds&subop=editfeed&id=" +   param_escape(feed);
-               } else {
-                       query = "?op=pref-labels&subop=edit&id=" +      param_escape(-feed-11);
-               }
-
-               disableHotkeys();
-
-               notify_progress("Loading, please wait...", true);
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) { 
-                               infobox_callback2(transport); 
-                               document.forms["edit_feed_form"].title.focus();
-                       } });
-
-       } catch (e) {
-               exception_error("editFeedDlg", e);
-       }
-}
-
-/* this functions duplicate those of prefs.js feed editor, with
-       some differences because there is no feedlist */
-
-function feedEditCancel() {
-       closeInfoBox();
-       return false;
-}
-
-function feedEditSave() {
-
-       try {
-       
-               // FIXME: add parameter validation
-
-               var query = Form.serialize("edit_feed_form");
-
-               notify_progress("Saving feed...");
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) { 
-                               dlg_frefresh_callback(transport); 
-                       } });
-
-               cache_flush();
-               closeInfoBox();
-
-               return false;
-
-       } catch (e) {
-               exception_error("feedEditSave (main)", e);
-       } 
-}
-
 function collapse_feedlist() {
        try {
 
@@ -903,7 +850,13 @@ function hotkey_handler(e) {
                        }
 
                        if (keycode == 69) { // e
-                               editFeedDlg(getActiveFeedId());
+
+                               if (activeFeedIsCat())
+                                       alert(__("You can't edit this kind of feed."));
+                               else
+                                       editFeed(getActiveFeedId());
+                               return;
+
                                return false;
                        }
 
@@ -943,8 +896,7 @@ function hotkey_handler(e) {
                        hotkey_prefix = false;
 
                        if (keycode == 70) { // f
-                               displayDlg('quickAddFilter', '',
-                                  function () {document.forms['filter_add_form'].reg_exp.focus();});
+                               quickAddFilter();
                                return false;
                        }
 
@@ -1111,17 +1063,21 @@ function handle_rpc_reply(transport, scheduled_call) {
        return true;
 }
 
-function scheduleFeedUpdate() {
+function scheduleFeedUpdate(id, is_cat) {
        try {
+               if (!id) {
+                       id = getActiveFeedId();
+                       is_cat = activeFeedIsCat();
+               }
 
-               if (!getActiveFeedId()) {
+               if (!id) {
                        alert(__("Please select some feed first."));
                        return;
                }
 
                var query = "?op=rpc&subop=scheduleFeedUpdate&id=" + 
-                       param_escape(getActiveFeedId()) +
-                       "&is_cat=" + param_escape(activeFeedIsCat());
+                       param_escape(id) +
+                       "&is_cat=" + param_escape(is_cat);
 
                console.log(query);