]>
git.wh0rd.org - tt-rss.git/blob - FeedTree.js
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
);