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