]>
Commit | Line | Data |
---|---|---|
05f224a3 AD |
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) { | |
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 | ||
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 | }); | |
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 | }); |