123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /*
- * Ext JS Library 2.0 Copyright(c) 2006-2007, Ext JS, LLC. licensing@extjs.com
- *
- * http://extjs.com/license
- */
- FeedPanel = function() {
- FeedPanel.superclass.constructor.call(this, {
- id : 'feed-tree',
- region : 'west',
- title : 'Feeds',
- split : true,
- width : 225,
- minSize : 175,
- maxSize : 400,
- collapsible : true,
- margins : '5 0 5 5',
- cmargins : '5 5 5 5',
- rootVisible : false,
- lines : false,
- autoScroll : true,
- root : new Ext.tree.TreeNode('Feed Viewer'),
- collapseFirst : false,
- tbar : [{
- iconCls : 'add-feed',
- text : 'Add Feed',
- handler : this.showWindow,
- scope : this
- }, {
- id : 'delete',
- iconCls : 'delete-icon',
- text : 'Remove',
- handler : function() {
- var s = this.getSelectionModel()
- .getSelectedNode();
- if (s) {
- this.removeFeed(s.attributes.url);
- }
- },
- scope : this
- }]
- });
- this.feeds = this.root.appendChild(new Ext.tree.TreeNode({
- text : 'My Feeds',
- cls : 'feeds-node',
- expanded : true
- }));
- this.getSelectionModel().on({
- 'beforeselect' : function(sm, node) {
- return node.isLeaf();
- },
- 'selectionchange' : function(sm, node) {
- if (node) {
- this.fireEvent('feedselect', node.attributes);
- }
- this.getTopToolbar().items.get('delete').setDisabled(!node);
- },
- scope : this
- });
- this.addEvents({
- feedselect : true
- });
- this.on('contextmenu', this.onContextMenu, this);
- };
- Ext.extend(FeedPanel, Ext.tree.TreePanel, {
- onContextMenu : function(node, e) {
- if (!this.menu) { // create context menu on first right click
- this.menu = new Ext.menu.Menu({
- id : 'feeds-ctx',
- items : [{
- id : 'load',
- iconCls : 'load-icon',
- text : 'Load Feed',
- scope : this,
- handler : function() {
- this.ctxNode.select();
- }
- }, {
- text : 'Remove',
- iconCls : 'delete-icon',
- scope : this,
- handler : function() {
- this.ctxNode.ui
- .removeClass('x-node-ctx');
- this
- .removeFeed(this.ctxNode.attributes.url);
- this.ctxNode = null;
- }
- }, '-', {
- iconCls : 'add-feed',
- text : 'Add Feed',
- handler : this.showWindow,
- scope : this
- }]
- });
- this.menu.on('hide', this.onContextHide, this);
- }
- if (this.ctxNode) {
- this.ctxNode.ui.removeClass('x-node-ctx');
- this.ctxNode = null;
- }
- if (node.isLeaf()) {
- this.ctxNode = node;
- this.ctxNode.ui.addClass('x-node-ctx');
- this.menu.items.get('load').setDisabled(node.isSelected());
- this.menu.showAt(e.getXY());
- }
- },
- onContextHide : function() {
- if (this.ctxNode) {
- this.ctxNode.ui.removeClass('x-node-ctx');
- this.ctxNode = null;
- }
- },
- showWindow : function(btn) {
- if (!this.win) {
- this.win = new FeedWindow();
- this.win.on('validfeed', this.addFeed, this);
- }
- this.win.show(btn);
- },
- selectFeed : function(url) {
- this.getNodeById(url).select();
- },
- removeFeed : function(url) {
- var node = this.getNodeById(url);
- if (node) {
- node.unselect();
- Ext.fly(node.ui.elNode).ghost('l', {
- callback : node.remove,
- scope : node,
- duration : .4
- });
- }
- },
- addFeed : function(attrs, inactive, preventAnim) {
- var exists = this.getNodeById(attrs.url);
- if (exists) {
- if (!inactive) {
- exists.select();
- exists.ui.highlight();
- }
- return;
- }
- Ext.apply(attrs, {
- iconCls : 'feed-icon',
- leaf : true,
- cls : 'feed',
- id : attrs.url
- });
- var node = new Ext.tree.TreeNode(attrs);
- this.feeds.appendChild(node);
- if (!inactive) {
- if (!preventAnim) {
- Ext.fly(node.ui.elNode).slideIn('l', {
- callback : node.select,
- scope : node,
- duration : .4
- });
- } else {
- node.select();
- }
- }
- return node;
- },
- // prevent the default context menu when you miss the node
- afterRender : function() {
- FeedPanel.superclass.afterRender.call(this);
- this.el.on('contextmenu', function(e) {
- e.preventDefault();
- });
- }
- });
|