]> git.wh0rd.org - tt-rss.git/blame - FeedTree.js
implement labels submenu; rework init process so that feedlist_init depends on feedTr...
[tt-rss.git] / FeedTree.js
CommitLineData
05f224a3
AD
1dojo.provide("fox.FeedTree");
2dojo.provide("fox.FeedStoreModel");
3
4dojo.require("dijit.Tree");
997429c2 5dojo.require("dijit.Menu");
05f224a3
AD
6
7dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, {
1beea800
AD
8 getItemsInCategory: function (id) {
9 if (!this.store._itemsByIdentity) return undefined;
10
11 cat = this.store._itemsByIdentity['CAT:' + id];
12
13 if (cat && cat.items)
14 return cat.items;
15 else
16 return undefined;
17
18 },
05f224a3
AD
19 getItemById: function(id) {
20 return this.store._itemsByIdentity[id];
21 },
22 getFeedValue: function(feed, is_cat, key) {
b8aa9ca7
AD
23 if (!this.store._itemsByIdentity) return undefined;
24
05f224a3
AD
25 if (is_cat)
26 treeItem = this.store._itemsByIdentity['CAT:' + feed];
27 else
28 treeItem = this.store._itemsByIdentity['FEED:' + feed];
29
30 if (treeItem)
31 return this.store.getValue(treeItem, key);
32 },
33 getFeedName: function(feed, is_cat) {
34 return this.getFeedValue(feed, is_cat, 'name');
35 },
36 getFeedUnread: function(feed, is_cat) {
37 var unread = parseInt(this.getFeedValue(feed, is_cat, 'unread'));
38 return (isNaN(unread)) ? 0 : unread;
39 },
40 setFeedUnread: function(feed, is_cat, unread) {
41 return this.setFeedValue(feed, is_cat, 'unread', parseInt(unread));
42 },
43 setFeedValue: function(feed, is_cat, key, value) {
44 if (!value) value = '';
b8aa9ca7 45 if (!this.store._itemsByIdentity) return undefined;
05f224a3
AD
46
47 if (is_cat)
48 treeItem = this.store._itemsByIdentity['CAT:' + feed];
49 else
50 treeItem = this.store._itemsByIdentity['FEED:' + feed];
51
52 if (treeItem)
53 return this.store.setValue(treeItem, key, value);
54 },
55});
56
57dojo.declare("fox.FeedTree", dijit.Tree, {
58 _createTreeNode: function(args) {
59 var tnode = new dijit._TreeNode(args);
997429c2 60
05f224a3
AD
61 if (args.item.icon)
62 tnode.iconNode.src = args.item.icon[0];
63
997429c2
AD
64 var id = args.item.id[0];
65 var bare_id = parseInt(id.substr(id.indexOf(':')+1));
66
67 if (id.match("FEED:") && bare_id > 0) {
68 var menu = new dijit.Menu();
69 menu.row_id = bare_id;
70
71 menu.addChild(new dijit.MenuItem({
72 label: __("Edit feed"),
73 onClick: function() {
74 editFeedDlg(this.getParent().row_id);
75 }}));
76
77 menu.addChild(new dijit.MenuItem({
78 label: __("Update feed"),
79 onClick: function() {
80 scheduleFeedUpdate(this.getParent().row_id, false);
81 }}));
82
83 menu.bindDomNode(tnode.domNode);
84 tnode._menu = menu;
85 }
86
05f224a3
AD
87 //tnode.labelNode.innerHTML = args.label;
88 return tnode;
89 },
90 getIconClass: function (item, opened) {
91 return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "feedIcon";
92 },
93 getLabelClass: function (item, opened) {
94 return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
95 },
96 getRowClass: function (item, opened) {
97 return (!item.error || item.error == '') ? "dijitTreeRow" :
98 "dijitTreeRow Error";
99 },
100 getLabel: function(item) {
101 if (item.unread > 0) {
102 return item.name + " (" + item.unread + ")";
103 } else {
104 return item.name;
105 }
106 },
107 selectFeed: function(feed, is_cat) {
108 if (is_cat)
109 treeNode = this._itemNodesMap['CAT:' + feed];
110 else
111 treeNode = this._itemNodesMap['FEED:' + feed];
112
113 if (treeNode) {
114 treeNode = treeNode[0];
115 if (!is_cat) this._expandNode(treeNode);
116 this._selectNode(treeNode);
117 }
118 },
119 setFeedIcon: function(feed, is_cat, src) {
120 if (is_cat)
121 treeNode = this._itemNodesMap['CAT:' + feed];
122 else
123 treeNode = this._itemNodesMap['FEED:' + feed];
124
125 if (treeNode) {
126 treeNode = treeNode[0];
127 treeNode.iconNode.src = src;
128 return true;
129 }
130 return false;
131 },
132 setFeedExpandoIcon: function(feed, is_cat, src) {
133 if (is_cat)
134 treeNode = this._itemNodesMap['CAT:' + feed];
135 else
136 treeNode = this._itemNodesMap['FEED:' + feed];
137
138 if (treeNode) {
139 treeNode = treeNode[0];
140 treeNode.expandoNode.src = src;
141 return true;
142 }
143
144 return false;
145 },
146 hasCats: function() {
147 if (this.model.store && this.model.store._itemsByIdentity)
148 return this.model.store._itemsByIdentity['CAT:-1'] != undefined;
149 else
150 return false;
151 },
152 hideRead: function (hide, show_special) {
153 if (this.hasCats()) {
154
155 var tree = this;
156 var cats = this.model.store._arrayOfTopLevelItems;
157
158 cats.each(function(cat) {
159 var cat_unread = tree.hideReadFeeds(cat.items, hide, show_special);
160
161 var id = String(cat.id);
162 var node = tree._itemNodesMap[id];
163 var bare_id = parseInt(id.substr(id.indexOf(":")+1));
164
165 if (node) {
166 var check_unread = tree.model.getFeedUnread(bare_id, true);
167
168 if (hide && cat_unread == 0 && check_unread == 0) {
169 Effect.Fade(node[0].rowNode, {duration : 0.3,
170 queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
171 } else {
172 Element.show(node[0].rowNode);
173 ++cat_unread;
174 }
175 }
176 });
05f224a3
AD
177
178 } else {
179 this.hideReadFeeds(this.model.store._arrayOfTopLevelItems, hide,
180 show_special);
181 }
182 },
183 hideReadFeeds: function (items, hide, show_special) {
184 var tree = this;
185 var cat_unread = 0;
186
187 items.each(function(feed) {
188 var id = String(feed.id);
189 var bare_id = parseInt(feed.bare_id);;
190
191 var unread = feed.unread[0];
192 var node = tree._itemNodesMap[id];
193
194 if (node) {
195 if (hide && unread == 0 && (bare_id > 0 || !show_special)) {
196 Effect.Fade(node[0].rowNode, {duration : 0.3,
197 queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
198 } else {
199 Element.show(node[0].rowNode);
200 ++cat_unread;
201 }
202 }
203 });
204
205 return cat_unread;
206 },
207});