From 1beea8001786b6cbc8a9fc42574970aede1b56dd Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 19 Nov 2010 22:18:26 +0300 Subject: [PATCH] implement labels submenu; rework init process so that feedlist_init depends on feedTree being loaded --- FeedTree.js | 11 +++++++++++ tt-rss.js | 2 +- viewfeed.js | 44 +++++++++++++++++++++++++++++++++++++++----- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/FeedTree.js b/FeedTree.js index f01fd24cf..19c32a95f 100644 --- a/FeedTree.js +++ b/FeedTree.js @@ -5,6 +5,17 @@ dojo.require("dijit.Tree"); dojo.require("dijit.Menu"); dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, { + getItemsInCategory: function (id) { + if (!this.store._itemsByIdentity) return undefined; + + cat = this.store._itemsByIdentity['CAT:' + id]; + + if (cat && cat.items) + return cat.items; + else + return undefined; + + }, getItemById: function(id) { return this.store._itemsByIdentity[id]; }, diff --git a/tt-rss.js b/tt-rss.js index af9f46726..c88a08533 100644 --- a/tt-rss.js +++ b/tt-rss.js @@ -133,6 +133,7 @@ function updateFeedList() { var tmph = dojo.connect(tree, 'onLoad', function() { dojo.disconnect(tmph); Element.hide("feedlistLoading"); + feedlist_init(); // var node = dijit.byId("feedTree")._itemNodesMap['FEED:-2'][0].domNode // menu.bindDomNode(node); @@ -328,7 +329,6 @@ function init_second_stage() { if (has_local_storage()) localStorage.clear(); - feedlist_init(); setTimeout("timeout()", 3000); console.log("second stage ok"); diff --git a/viewfeed.js b/viewfeed.js index dadbe9485..b7ef31a7c 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -669,10 +669,10 @@ function toggleUnread(id, cmode, effect) { } } -function selectionRemoveLabel(id) { +function selectionRemoveLabel(id, ids) { try { - var ids = getSelectedArticleIds2(); + if (!ids) var ids = getSelectedArticleIds2(); if (ids.length == 0) { alert(__("No articles are selected.")); @@ -707,10 +707,10 @@ function selectionRemoveLabel(id) { } } -function selectionAssignLabel(id) { +function selectionAssignLabel(id, ids) { try { - var ids = getSelectedArticleIds2(); + if (!ids) ids = getSelectedArticleIds2(); if (ids.length == 0) { alert(__("No articles are selected.")); @@ -2265,7 +2265,9 @@ function initHeadlinesMenu() { label: __("View in a new tab"), onClick: function(event) { hlOpenInNewTab(event, this.getParent().callerRowId); - }})); + }})); + + menu.addChild(new dijit.MenuSeparator()); menu.addChild(new dijit.MenuItem({ label: __("Open original article"), @@ -2273,6 +2275,38 @@ function initHeadlinesMenu() { openArticleInNewWindow(this.getParent().callerRowId); }})); + var labels = dijit.byId("feedTree").model.getItemsInCategory(-2); + + if (labels) { + + menu.addChild(new dijit.MenuSeparator()); + + var labelsMenu = new dijit.Menu({ownerMenu: menu}); + + labels.each(function(label) { + var id = label.id[0]; + var bare_id = id.substr(id.indexOf(":")+1); + var name = label.name[0]; + + bare_id = -11-bare_id; + + labelsMenu.addChild(new dijit.MenuItem({ + label: name, + labelId: bare_id, + onClick: function(event) { + //console.log(this.labelId); + //console.log(this.getParent().ownerMenu.callerRowId); + selectionAssignLabel(this.labelId, + [this.getParent().ownerMenu.callerRowId]); + }})); + }); + + menu.addChild(new dijit.PopupMenuItem({ + label: __("Labels"), + popup: labelsMenu, + })); + } + menu.startup(); } catch (e) {