3 <title>The source code</title>
\r
4 <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
\r
5 <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
\r
7 <body onload="prettyPrint();">
\r
8 <pre class="prettyprint lang-js">FeedPanel = function() {
\r
9 FeedPanel.superclass.constructor.call(this, {
\r
23 root: new Ext.tree.TreeNode('My Feeds'),
\r
24 collapseFirst:false,
\r
28 handler: this.showWindow,
\r
32 iconCls:'delete-icon',
\r
34 handler: function(){
\r
35 var s = this.getSelectionModel().getSelectedNode();
\r
37 this.removeFeed(s.attributes.url);
\r
44 this.feeds = this.root.appendChild(
\r
45 new Ext.tree.TreeNode({
\r
52 this.getSelectionModel().on({
\r
53 'beforeselect' : function(sm, node){
\r
54 return node.isLeaf();
\r
56 'selectionchange' : function(sm, node){
\r
58 this.fireEvent('feedselect', node.attributes);
\r
60 this.getTopToolbar().items.get('delete').setDisabled(!node);
\r
65 this.addEvents({feedselect:true});
\r
67 this.on('contextmenu', this.onContextMenu, this);
\r
70 Ext.extend(FeedPanel, Ext.tree.TreePanel, {
\r
72 onContextMenu : function(node, e){
\r
73 if(!this.menu){ // create context menu on first right click
\r
74 this.menu = new Ext.menu.Menu({
\r
78 iconCls:'load-icon',
\r
82 this.ctxNode.select();
\r
86 iconCls:'delete-icon',
\r
89 this.ctxNode.ui.removeClass('x-node-ctx');
\r
90 this.removeFeed(this.ctxNode.attributes.url);
\r
91 this.ctxNode = null;
\r
96 handler: this.showWindow,
\r
100 this.menu.on('hide', this.onContextHide, this);
\r
103 this.ctxNode.ui.removeClass('x-node-ctx');
\r
104 this.ctxNode = null;
\r
107 this.ctxNode = node;
\r
108 this.ctxNode.ui.addClass('x-node-ctx');
\r
109 this.menu.items.get('load').setDisabled(node.isSelected());
\r
110 this.menu.showAt(e.getXY());
\r
114 onContextHide : function(){
\r
116 this.ctxNode.ui.removeClass('x-node-ctx');
\r
117 this.ctxNode = null;
\r
121 showWindow : function(btn){
\r
123 this.win = new FeedWindow();
\r
124 this.win.on('validfeed', this.addFeed, this);
\r
126 this.win.show(btn);
\r
129 selectFeed: function(url){
\r
130 this.getNodeById(url).select();
\r
133 removeFeed: function(url){
\r
134 var node = this.getNodeById(url);
\r
137 Ext.fly(node.ui.elNode).ghost('l', {
\r
138 callback: node.remove, scope: node, duration: .4
\r
143 addFeed : function(attrs, inactive, preventAnim){
\r
144 var exists = this.getNodeById(attrs.url);
\r
148 exists.ui.highlight();
\r
153 iconCls: 'feed-icon',
\r
158 var node = new Ext.tree.TreeNode(attrs);
\r
159 this.feeds.appendChild(node);
\r
162 Ext.fly(node.ui.elNode).slideIn('l', {
\r
163 callback: node.select, scope: node, duration: .4
\r
172 // prevent the default context menu when you miss the node
\r
173 afterRender : function(){
\r
174 FeedPanel.superclass.afterRender.call(this);
\r
175 this.el.on('contextmenu', function(e){
\r
176 e.preventDefault();
\r
181 Ext.reg('appfeedpanel', FeedPanel); </pre>
\r