1 dojo.provide("fox.FeedTree");
2 dojo.provide("fox.FeedStoreModel");
4 dojo.require("dijit.Tree");
5 dojo.require("dijit.Menu");
7 dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, {
8 getItemById: function(id) {
9 return this.store._itemsByIdentity[id];
11 getFeedValue: function(feed, is_cat, key) {
12 if (!this.store._itemsByIdentity) return undefined;
15 treeItem = this.store._itemsByIdentity['CAT:' + feed];
17 treeItem = this.store._itemsByIdentity['FEED:' + feed];
20 return this.store.getValue(treeItem, key);
22 getFeedName: function(feed, is_cat) {
23 return this.getFeedValue(feed, is_cat, 'name');
25 getFeedUnread: function(feed, is_cat) {
26 var unread = parseInt(this.getFeedValue(feed, is_cat, 'unread'));
27 return (isNaN(unread)) ? 0 : unread;
29 setFeedUnread: function(feed, is_cat, unread) {
30 return this.setFeedValue(feed, is_cat, 'unread', parseInt(unread));
32 setFeedValue: function(feed, is_cat, key, value) {
33 if (!value) value = '';
34 if (!this.store._itemsByIdentity) return undefined;
37 treeItem = this.store._itemsByIdentity['CAT:' + feed];
39 treeItem = this.store._itemsByIdentity['FEED:' + feed];
42 return this.store.setValue(treeItem, key, value);
46 dojo.declare("fox.FeedTree", dijit.Tree, {
47 _createTreeNode: function(args) {
48 var tnode = new dijit._TreeNode(args);
51 tnode.iconNode.src = args.item.icon[0];
53 var id = args.item.id[0];
54 var bare_id = parseInt(id.substr(id.indexOf(':')+1));
56 if (id.match("FEED:") && bare_id > 0) {
57 var menu = new dijit.Menu();
58 menu.row_id = bare_id;
60 menu.addChild(new dijit.MenuItem({
61 label: __("Edit feed"),
63 editFeedDlg(this.getParent().row_id);
66 menu.addChild(new dijit.MenuItem({
67 label: __("Update feed"),
69 scheduleFeedUpdate(this.getParent().row_id, false);
72 menu.bindDomNode(tnode.domNode);
76 //tnode.labelNode.innerHTML = args.label;
79 getIconClass: function (item, opened) {
80 return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "feedIcon";
82 getLabelClass: function (item, opened) {
83 return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
85 getRowClass: function (item, opened) {
86 return (!item.error || item.error == '') ? "dijitTreeRow" :
89 getLabel: function(item) {
90 if (item.unread > 0) {
91 return item.name + " (" + item.unread + ")";
96 selectFeed: function(feed, is_cat) {
98 treeNode = this._itemNodesMap['CAT:' + feed];
100 treeNode = this._itemNodesMap['FEED:' + feed];
103 treeNode = treeNode[0];
104 if (!is_cat) this._expandNode(treeNode);
105 this._selectNode(treeNode);
108 setFeedIcon: function(feed, is_cat, src) {
110 treeNode = this._itemNodesMap['CAT:' + feed];
112 treeNode = this._itemNodesMap['FEED:' + feed];
115 treeNode = treeNode[0];
116 treeNode.iconNode.src = src;
121 setFeedExpandoIcon: function(feed, is_cat, src) {
123 treeNode = this._itemNodesMap['CAT:' + feed];
125 treeNode = this._itemNodesMap['FEED:' + feed];
128 treeNode = treeNode[0];
129 treeNode.expandoNode.src = src;
135 hasCats: function() {
136 if (this.model.store && this.model.store._itemsByIdentity)
137 return this.model.store._itemsByIdentity['CAT:-1'] != undefined;
141 hideRead: function (hide, show_special) {
142 if (this.hasCats()) {
145 var cats = this.model.store._arrayOfTopLevelItems;
147 cats.each(function(cat) {
148 var cat_unread = tree.hideReadFeeds(cat.items, hide, show_special);
150 var id = String(cat.id);
151 var node = tree._itemNodesMap[id];
152 var bare_id = parseInt(id.substr(id.indexOf(":")+1));
155 var check_unread = tree.model.getFeedUnread(bare_id, true);
157 if (hide && cat_unread == 0 && check_unread == 0) {
158 Effect.Fade(node[0].rowNode, {duration : 0.3,
159 queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
161 Element.show(node[0].rowNode);
168 this.hideReadFeeds(this.model.store._arrayOfTopLevelItems, hide,
172 hideReadFeeds: function (items, hide, show_special) {
176 items.each(function(feed) {
177 var id = String(feed.id);
178 var bare_id = parseInt(feed.bare_id);;
180 var unread = feed.unread[0];
181 var node = tree._itemNodesMap[id];
184 if (hide && unread == 0 && (bare_id > 0 || !show_special)) {
185 Effect.Fade(node[0].rowNode, {duration : 0.3,
186 queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }});
188 Element.show(node[0].rowNode);