--- /dev/null
+<html>\r
+<head>\r
+ <title>The source code</title>\r
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body onload="prettyPrint();">\r
+ <pre class="prettyprint lang-js">MainPanel = function(){\r
+ this.preview = new Ext.Panel({\r
+ id: 'preview',\r
+ region: 'south',\r
+ cls:'preview',\r
+ autoScroll: true,\r
+ listeners: FeedViewer.LinkInterceptor,\r
+\r
+ tbar: [{\r
+ id:'tab',\r
+ text: 'View in New Tab',\r
+ iconCls: 'new-tab',\r
+ disabled:true,\r
+ handler : this.openTab,\r
+ scope: this\r
+ },\r
+ '-',\r
+ {\r
+ id:'win',\r
+ text: 'Go to Post',\r
+ iconCls: 'new-win',\r
+ disabled:true,\r
+ scope: this,\r
+ handler : function(){\r
+ window.open(this.gsm.getSelected().data.link);\r
+ }\r
+ }],\r
+\r
+ clear: function(){\r
+ this.body.update('');\r
+ var items = this.topToolbar.items;\r
+ items.get('tab').disable();\r
+ items.get('win').disable();\r
+ }\r
+ });\r
+\r
+ this.grid = new FeedGrid(this, {\r
+ tbar:[{\r
+ text:'Open All',\r
+ tooltip: {title:'Open All',text:'Opens all item in tabs'},\r
+ iconCls: 'tabs',\r
+ handler: this.openAll,\r
+ scope:this\r
+ },\r
+ '-',\r
+ {\r
+ split:true,\r
+ text:'Reading Pane',\r
+ tooltip: {title:'Reading Pane',text:'Show, move or hide the Reading Pane'},\r
+ iconCls: 'preview-bottom',\r
+ handler: this.movePreview.createDelegate(this, []),\r
+ menu:{\r
+ id:'reading-menu',\r
+ cls:'reading-menu',\r
+ width:100,\r
+ items: [{\r
+ text:'Bottom',\r
+ checked:true,\r
+ group:'rp-group',\r
+ checkHandler:this.movePreview,\r
+ scope:this,\r
+ iconCls:'preview-bottom'\r
+ },{\r
+ text:'Right',\r
+ checked:false,\r
+ group:'rp-group',\r
+ checkHandler:this.movePreview,\r
+ scope:this,\r
+ iconCls:'preview-right'\r
+ },{\r
+ text:'Hide',\r
+ checked:false,\r
+ group:'rp-group',\r
+ checkHandler:this.movePreview,\r
+ scope:this,\r
+ iconCls:'preview-hide'\r
+ }]\r
+ }\r
+ },\r
+ '-',\r
+ {\r
+ pressed: true,\r
+ enableToggle:true,\r
+ text:'Summary',\r
+ tooltip: {title:'Post Summary',text:'View a short summary of each item in the list'},\r
+ iconCls: 'summary',\r
+ scope:this,\r
+ toggleHandler: function(btn, pressed){\r
+ this.grid.togglePreview(pressed);\r
+ }\r
+ }]\r
+ });\r
+\r
+ MainPanel.superclass.constructor.call(this, {\r
+ id:'main-tabs',\r
+ activeTab:0,\r
+ region:'center',\r
+ margins:'0 5 5 0',\r
+ resizeTabs:true,\r
+ tabWidth:150,\r
+ minTabWidth: 120,\r
+ enableTabScroll: true,\r
+ plugins: new Ext.ux.TabCloseMenu(),\r
+ items: {\r
+ id:'main-view',\r
+ layout:'border',\r
+ title:'Loading...',\r
+ hideMode:'offsets',\r
+ items:[\r
+ this.grid, {\r
+ id:'bottom-preview',\r
+ layout:'fit',\r
+ items:this.preview,\r
+ height: 250,\r
+ split: true,\r
+ border:false,\r
+ region:'south'\r
+ }, {\r
+ id:'right-preview',\r
+ layout:'fit',\r
+ border:false,\r
+ region:'east',\r
+ width:350,\r
+ split: true,\r
+ hidden:true\r
+ }]\r
+ }\r
+ });\r
+\r
+ this.gsm = this.grid.getSelectionModel();\r
+\r
+ this.gsm.on('rowselect', function(sm, index, record){\r
+ FeedViewer.getTemplate().overwrite(this.preview.body, record.data);\r
+ var items = this.preview.topToolbar.items;\r
+ items.get('tab').enable();\r
+ items.get('win').enable();\r
+ }, this, {buffer:250});\r
+\r
+ this.grid.store.on('beforeload', this.preview.clear, this.preview);\r
+ this.grid.store.on('load', this.gsm.selectFirstRow, this.gsm);\r
+\r
+ this.grid.on('rowdblclick', this.openTab, this);\r
+};\r
+\r
+Ext.extend(MainPanel, Ext.TabPanel, {\r
+\r
+ loadFeed : function(feed){\r
+ this.grid.loadFeed(feed.url);\r
+ Ext.getCmp('main-view').setTitle(feed.text);\r
+ },\r
+\r
+ movePreview : function(m, pressed){\r
+ if(!m){ // cycle if not a menu item click\r
+ var items = Ext.menu.MenuMgr.get('reading-menu').items.items;\r
+ var b = items[0], r = items[1], h = items[2];\r
+ if(b.checked){\r
+ r.setChecked(true);\r
+ }else if(r.checked){\r
+ h.setChecked(true);\r
+ }else if(h.checked){\r
+ b.setChecked(true);\r
+ }\r
+ return;\r
+ }\r
+ if(pressed){\r
+ var preview = this.preview;\r
+ var right = Ext.getCmp('right-preview');\r
+ var bot = Ext.getCmp('bottom-preview');\r
+ var btn = this.grid.getTopToolbar().items.get(2);\r
+ switch(m.text){\r
+ case 'Bottom':\r
+ right.hide();\r
+ bot.add(preview);\r
+ bot.show();\r
+ bot.ownerCt.doLayout();\r
+ btn.setIconClass('preview-bottom');\r
+ break;\r
+ case 'Right':\r
+ bot.hide();\r
+ right.add(preview);\r
+ right.show();\r
+ right.ownerCt.doLayout();\r
+ btn.setIconClass('preview-right');\r
+ break;\r
+ case 'Hide':\r
+ preview.ownerCt.hide();\r
+ preview.ownerCt.ownerCt.doLayout();\r
+ btn.setIconClass('preview-hide');\r
+ break;\r
+ }\r
+ }\r
+ },\r
+\r
+ openTab : function(record){\r
+ record = (record && record.data) ? record : this.gsm.getSelected();\r
+ var d = record.data;\r
+ var id = !d.link ? Ext.id() : d.link.replace(/[^A-Z0-9-_]/gi, '');\r
+ var tab;\r
+ if(!(tab = this.getItem(id))){\r
+ tab = new Ext.Panel({\r
+ id: id,\r
+ cls:'preview single-preview',\r
+ title: d.title,\r
+ tabTip: d.title,\r
+ html: FeedViewer.getTemplate().apply(d),\r
+ closable:true,\r
+ listeners: FeedViewer.LinkInterceptor,\r
+ autoScroll:true,\r
+ border:true,\r
+\r
+ tbar: [{\r
+ text: 'Go to Post',\r
+ iconCls: 'new-win',\r
+ handler : function(){\r
+ window.open(d.link);\r
+ }\r
+ }]\r
+ });\r
+ this.add(tab);\r
+ }\r
+ this.setActiveTab(tab);\r
+ },\r
+\r
+ openAll : function(){\r
+ this.beginUpdate();\r
+ this.grid.store.data.each(this.openTab, this);\r
+ this.endUpdate();\r
+ }\r
+});\r
+\r
+Ext.reg('appmainpanel', MainPanel);</pre> \r
+</body>\r
+</html>
\ No newline at end of file