]> git.wh0rd.org - tt-rss.git/blob - FeedTree.js
FeedTree: add some additional checks in get/setFeedValue
[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 (!this.store._itemsByIdentity) return undefined;
12
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 = '';
33 if (!this.store._itemsByIdentity) return undefined;
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
45 dojo.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 });
142 console.log(this);
143
144 } else {
145 this.hideReadFeeds(this.model.store._arrayOfTopLevelItems, hide,
146 show_special);
147 }
148 },
149 hideReadFeeds: function (items, hide, show_special) {
150 var tree = this;
151 var cat_unread = 0;
152
153 items.each(function(feed) {
154 var id = String(feed.id);
155 var bare_id = parseInt(feed.bare_id);;
156
157 var unread = feed.unread[0];
158 var node = tree._itemNodesMap[id];
159
160 if (node) {
161 if (hide && unread == 0 && (bare_id > 0 || !show_special)) {
162 Effect.Fade(node[0].rowNode, {duration : 0.3,
163 queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
164 } else {
165 Element.show(node[0].rowNode);
166 ++cat_unread;
167 }
168 }
169 });
170
171 return cat_unread;
172 },
173 });