diff options
Diffstat (limited to 'FeedTree.js')
-rw-r--r-- | FeedTree.js | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/FeedTree.js b/FeedTree.js new file mode 100644 index 000000000..d0da80c81 --- /dev/null +++ b/FeedTree.js @@ -0,0 +1,170 @@ +dojo.provide("fox.FeedTree"); +dojo.provide("fox.FeedStoreModel"); + +dojo.require("dijit.Tree"); + +dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, { + getItemById: function(id) { + return this.store._itemsByIdentity[id]; + }, + getFeedValue: function(feed, is_cat, key) { + if (is_cat) + treeItem = this.store._itemsByIdentity['CAT:' + feed]; + else + treeItem = this.store._itemsByIdentity['FEED:' + feed]; + + if (treeItem) + return this.store.getValue(treeItem, key); + }, + getFeedName: function(feed, is_cat) { + return this.getFeedValue(feed, is_cat, 'name'); + }, + getFeedUnread: function(feed, is_cat) { + var unread = parseInt(this.getFeedValue(feed, is_cat, 'unread')); + return (isNaN(unread)) ? 0 : unread; + }, + setFeedUnread: function(feed, is_cat, unread) { + return this.setFeedValue(feed, is_cat, 'unread', parseInt(unread)); + }, + setFeedValue: function(feed, is_cat, key, value) { + if (!value) value = ''; + + if (is_cat) + treeItem = this.store._itemsByIdentity['CAT:' + feed]; + else + treeItem = this.store._itemsByIdentity['FEED:' + feed]; + + if (treeItem) + return this.store.setValue(treeItem, key, value); + }, +}); + +dojo.declare("fox.FeedTree", dijit.Tree, { + _createTreeNode: function(args) { + var tnode = new dijit._TreeNode(args); + + if (args.item.icon) + tnode.iconNode.src = args.item.icon[0]; + + //tnode.labelNode.innerHTML = args.label; + return tnode; + }, + getIconClass: function (item, opened) { + return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "feedIcon"; + }, + getLabelClass: function (item, opened) { + return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread"; + }, + getRowClass: function (item, opened) { + return (!item.error || item.error == '') ? "dijitTreeRow" : + "dijitTreeRow Error"; + }, + getLabel: function(item) { + if (item.unread > 0) { + return item.name + " (" + item.unread + ")"; + } else { + return item.name; + } + }, + selectFeed: function(feed, is_cat) { + if (is_cat) + treeNode = this._itemNodesMap['CAT:' + feed]; + else + treeNode = this._itemNodesMap['FEED:' + feed]; + + if (treeNode) { + treeNode = treeNode[0]; + if (!is_cat) this._expandNode(treeNode); + this._selectNode(treeNode); + } + }, + setFeedIcon: function(feed, is_cat, src) { + if (is_cat) + treeNode = this._itemNodesMap['CAT:' + feed]; + else + treeNode = this._itemNodesMap['FEED:' + feed]; + + if (treeNode) { + treeNode = treeNode[0]; + treeNode.iconNode.src = src; + return true; + } + return false; + }, + setFeedExpandoIcon: function(feed, is_cat, src) { + if (is_cat) + treeNode = this._itemNodesMap['CAT:' + feed]; + else + treeNode = this._itemNodesMap['FEED:' + feed]; + + if (treeNode) { + treeNode = treeNode[0]; + treeNode.expandoNode.src = src; + return true; + } + + return false; + }, + hasCats: function() { + if (this.model.store && this.model.store._itemsByIdentity) + return this.model.store._itemsByIdentity['CAT:-1'] != undefined; + else + return false; + }, + hideRead: function (hide, show_special) { + if (this.hasCats()) { + + var tree = this; + var cats = this.model.store._arrayOfTopLevelItems; + + cats.each(function(cat) { + var cat_unread = tree.hideReadFeeds(cat.items, hide, show_special); + + var id = String(cat.id); + var node = tree._itemNodesMap[id]; + var bare_id = parseInt(id.substr(id.indexOf(":")+1)); + + if (node) { + var check_unread = tree.model.getFeedUnread(bare_id, true); + + if (hide && cat_unread == 0 && check_unread == 0) { + Effect.Fade(node[0].rowNode, {duration : 0.3, + queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }}); + } else { + Element.show(node[0].rowNode); + ++cat_unread; + } + } + }); + console.log(this); + + } else { + this.hideReadFeeds(this.model.store._arrayOfTopLevelItems, hide, + show_special); + } + }, + hideReadFeeds: function (items, hide, show_special) { + var tree = this; + var cat_unread = 0; + + items.each(function(feed) { + var id = String(feed.id); + var bare_id = parseInt(feed.bare_id);; + + var unread = feed.unread[0]; + var node = tree._itemNodesMap[id]; + + if (node) { + if (hide && unread == 0 && (bare_id > 0 || !show_special)) { + Effect.Fade(node[0].rowNode, {duration : 0.3, + queue: { position: 'end', scope: 'FFADE-' + id, limit: 1 }}); + } else { + Element.show(node[0].rowNode); + ++cat_unread; + } + } + }); + + return cat_unread; + }, +}); |