- menu.bindDomNode(tnode.domNode);
- tnode._menu = menu;
- }
-
- if (id.match("CAT:") && bare_id >= 0) {
- var menu = new dijit.Menu();
- menu.row_id = bare_id;
-
- menu.addChild(new dijit.MenuItem({
- label: __("Mark as read"),
- onClick: function() {
- catchupFeed(this.getParent().row_id, true);
- }}));
-
- menu.bindDomNode(tnode.domNode);
- tnode._menu = menu;
- }
-
- if (id.match("CAT:")) {
- loading = dojo.doc.createElement('img');
- loading.className = 'loadingNode';
- dojo.place(loading, tnode.labelNode, 'after');
- tnode.loadingNode = loading;
- }
-
- if (id.match("CAT:") && bare_id == -1) {
- var menu = new dijit.Menu();
- menu.row_id = bare_id;
-
- menu.addChild(new dijit.MenuItem({
- label: __("Mark all feeds as read"),
- onClick: function() {
- catchupAllFeeds();
- }}));
-
- menu.bindDomNode(tnode.domNode);
- tnode._menu = menu;
- }
-
-
- //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) {
- var name = String(item.name);
-
- /* Horrible */
- name = name.replace(/"/g, "\"");
- name = name.replace(/&/g, "&");
- name = name.replace(/—/g, "-");
- name = name.replace(/</g, "<");
- name = name.replace(/>/g, ">");
-
- var label;
-
- if (item.unread > 0) {
- label = name + " (" + item.unread + ")";
- } else {
- label = name;
- }
-
- return label;
- },
- 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.set("selectedNodes", [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];
- if (is_cat) {
+ ctr = dojo.doc.createElement('span');
+ ctr.className = 'counterNode';
+ ctr.innerHTML = args.item.unread > 0 ? args.item.unread : args.item.auxcounter;
+
+ //args.item.unread > 0 ? ctr.addClassName("unread") : ctr.removeClassName("unread");
+
+ args.item.unread > 0 || args.item.auxcounter > 0 ? Element.show(ctr) : Element.hide(ctr);
+
+ args.item.unread == 0 && args.item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux");
+
+ domConstruct.place(ctr, tnode.rowNode, 'first');
+ tnode.counterNode = ctr;
+
+ //tnode.labelNode.innerHTML = args.label;
+ return tnode;
+ },
+ postCreate: function() {
+ this.connect(this.model, "onChange", "updateCounter");
+ this.connect(this, "_expandNode", function() {
+ this.hideRead(getInitParam("hide_read_feeds"), getInitParam("hide_read_shows_special"));
+ });
+
+ this.inherited(arguments);
+ },
+ updateCounter: function (item) {
+ const tree = this;
+
+ //console.log("updateCounter: " + item.id[0] + " " + item.unread + " " + tree);
+
+ let node = tree._itemNodesMap[item.id];
+
+ if (node) {
+ node = node[0];
+
+ if (node.counterNode) {
+ ctr = node.counterNode;
+ ctr.innerHTML = item.unread > 0 ? item.unread : item.auxcounter;
+ item.unread > 0 || item.auxcounter > 0 ?
+ item.unread > 0 ?
+ Effect.Appear(ctr, {duration : 0.3,
+ queue: { position: 'end', scope: 'CAPPEAR-' + item.id, limit: 1 }}) :
+ Element.show(ctr) :
+ Element.hide(ctr);
+
+ item.unread == 0 && item.auxcounter > 0 ? ctr.addClassName("aux") : ctr.removeClassName("aux");
+
+ }
+ }
+
+ },
+ getTooltip: function (item) {
+ if (item.updated)
+ return item.updated;
+ else
+ return "";
+ },
+ 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) {
+ let rc = (!item.error || item.error == '') ? "dijitTreeRow" :
+ "dijitTreeRow Error";
+
+ if (item.unread > 0) rc += " Unread";
+ if (item.updates_disabled > 0) rc += " UpdatesDisabled";
+
+ return rc;
+ },
+ getLabel: function(item) {
+ let name = String(item.name);
+
+ /* Horrible */
+ name = name.replace(/"/g, "\"");
+ name = name.replace(/&/g, "&");
+ name = name.replace(/—/g, "-");
+ name = name.replace(/</g, "<");
+ name = name.replace(/>/g, ">");
+
+ /* var label;
+
+ if (item.unread > 0) {
+ label = name + " (" + item.unread + ")";
+ } else {
+ label = name;
+ } */
+
+ return name;
+ },
+ expandParentNodes: function(feed, is_cat, list) {
+ try {
+ for (let i = 0; i < list.length; i++) {
+ const id = String(list[i].id);
+ let item = this._itemNodesMap[id];
+
+ if (item) {
+ item = item[0];
+ this._expandNode(item);
+ }
+ }
+ } catch (e) {
+ exception_error(e);
+ }
+ },
+ findNodeParentsAndExpandThem: function(feed, is_cat, root, parents) {
+ // expands all parents of specified feed to properly mark it as active
+ // my fav thing about frameworks is doing everything myself
+ try {
+ const test_id = is_cat ? 'CAT:' + feed : 'FEED:' + feed;
+
+ if (!root) {
+ if (!this.model || !this.model.store) return false;
+
+ const items = this.model.store._arrayOfTopLevelItems;
+
+ for (let i = 0; i < items.length; i++) {
+ if (String(items[i].id) == test_id) {
+ this.expandParentNodes(feed, is_cat, parents);
+ } else {
+ this.findNodeParentsAndExpandThem(feed, is_cat, items[i], []);
+ }
+ }
+ } else if (root.items) {
+ parents.push(root);
+
+ for (let i = 0; i < root.items.length; i++) {
+ if (String(root.items[i].id) == test_id) {
+ this.expandParentNodes(feed, is_cat, parents);
+ } else {
+ this.findNodeParentsAndExpandThem(feed, is_cat, root.items[i], parents.slice(0));
+ }
+ }
+ } else if (String(root.id) == test_id) {
+ this.expandParentNodes(feed, is_cat, parents.slice(0));
+ }
+ } catch (e) {
+ exception_error(e);
+ }
+ },
+ selectFeed: function(feed, is_cat) {
+ this.findNodeParentsAndExpandThem(feed, is_cat, false, false);
+
+ 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.set("selectedNodes", [treeNode]);
+ this.focusNode(treeNode);
+
+ // focus headlines to route key events there
+ setTimeout(function() {
+ $("headlines-frame").focus();
+ }, 0);
+ }
+ },
+ 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];
+ const icon = dojo.doc.createElement('img');
+ icon.src = src;
+ icon.className = 'tinyFeedIcon';
+ domConstruct.place(icon, treeNode.iconNode, 'only');
+ 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];