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