-Ext.onReady(function(){\r
-\r
- // NOTE: This is an example showing simple state management. During development,\r
- // it is generally best to disable state management as dynamically-generated ids\r
- // can change across page loads, leading to unpredictable results. The developer\r
- // should ensure that stable state ids are set for stateful components in real apps.\r
- Ext.state.Manager.setProvider(new Ext.state.CookieProvider());\r
-\r
- // create some portlet tools using built in Ext tool ids\r
- var tools = [{\r
- id:'gear',\r
- handler: function(){\r
- Ext.Msg.alert('Message', 'The Settings tool was clicked.');\r
- }\r
- },{\r
- id:'close',\r
- handler: function(e, target, panel){\r
- panel.ownerCt.remove(panel, true);\r
- }\r
- }];\r
-\r
- var viewport = new Ext.Viewport({\r
- layout:'border',\r
- items:[{\r
- region:'west',\r
- id:'west-panel',\r
- title:'West',\r
- split:true,\r
- width: 200,\r
- minSize: 175,\r
- maxSize: 400,\r
- collapsible: true,\r
- margins:'35 0 5 5',\r
- cmargins:'35 5 5 5',\r
- layout:'accordion',\r
- layoutConfig:{\r
- animate:true\r
- },\r
- items: [{\r
- html: Ext.example.shortBogusMarkup,\r
- title:'Navigation',\r
- autoScroll:true,\r
- border:false,\r
- iconCls:'nav'\r
- },{\r
- title:'Settings',\r
- html: Ext.example.shortBogusMarkup,\r
- border:false,\r
- autoScroll:true,\r
- iconCls:'settings'\r
- }]\r
- },{\r
- xtype:'portal',\r
- region:'center',\r
- margins:'35 5 5 0',\r
- items:[{\r
- columnWidth:.33,\r
- style:'padding:10px 0 10px 10px',\r
- items:[{\r
- title: 'Grid in a Portlet',\r
- layout:'fit',\r
- tools: tools,\r
- items: new SampleGrid([0, 2, 3])\r
- },{\r
- title: 'Another Panel 1',\r
- tools: tools,\r
- html: Ext.example.shortBogusMarkup\r
- }]\r
- },{\r
- columnWidth:.33,\r
- style:'padding:10px 0 10px 10px',\r
- items:[{\r
- title: 'Panel 2',\r
- tools: tools,\r
- html: Ext.example.shortBogusMarkup\r
- },{\r
- title: 'Another Panel 2',\r
- tools: tools,\r
- html: Ext.example.shortBogusMarkup\r
- }]\r
- },{\r
- columnWidth:.33,\r
- style:'padding:10px',\r
- items:[{\r
- title: 'Panel 3',\r
- tools: tools,\r
- html: Ext.example.shortBogusMarkup\r
- },{\r
- title: 'Another Panel 3',\r
- tools: tools,\r
- html: Ext.example.shortBogusMarkup\r
- }]\r
- }]\r
- \r
- /*\r
- * Uncomment this block to test handling of the drop event. You could use this\r
- * to save portlet position state for example. The event arg e is the custom \r
- * event defined in Ext.ux.Portal.DropZone.\r
- */\r
-// ,listeners: {\r
-// 'drop': function(e){\r
-// Ext.Msg.alert('Portlet Dropped', e.panel.title + '<br />Column: ' + \r
-// e.columnIndex + '<br />Position: ' + e.position);\r
-// }\r
-// }\r
- }]\r
- });\r
-});\r
-\r
+// TODO: Fill in the content panel -- no AccordionLayout at the moment
+// TODO: Fix container drag/scroll support (waiting on Ext.lib.Anim)
+// TODO: Fix Ext.Tool scope being set to the panel header
+// TODO: Drag/drop does not cause a refresh of scroll overflow when needed
+// TODO: Grid portlet throws errors on destroy (grid bug)
+// TODO: Z-index issues during drag
+
+Ext.define('Ext.app.Portal', {
+
+ extend: 'Ext.container.Viewport',
+
+ uses: ['Ext.app.PortalPanel', 'Ext.app.PortalColumn', 'Ext.app.GridPortlet', 'Ext.app.ChartPortlet'],
+
+ getTools: function(){
+ return [{
+ xtype: 'tool',
+ type: 'gear',
+ handler: function(e, target, panelHeader, tool){
+ var portlet = panelHeader.ownerCt;
+ portlet.setLoading('Working...');
+ Ext.defer(function() {
+ portlet.setLoading(false);
+ }, 2000);
+ }
+ }];
+ },
+
+ initComponent: function(){
+ var content = '<div class="portlet-content">'+Ext.example.shortBogusMarkup+'</div>';
+
+ Ext.apply(this, {
+ id: 'app-viewport',
+ layout: {
+ type: 'border',
+ padding: '0 5 5 5' // pad the layout from the window edges
+ },
+ items: [{
+ id: 'app-header',
+ xtype: 'box',
+ region: 'north',
+ height: 40,
+ html: 'Ext Portal'
+ },{
+ xtype: 'container',
+ region: 'center',
+ layout: 'border',
+ items: [{
+ id: 'app-options',
+ title: 'Options',
+ region: 'west',
+ animCollapse: true,
+ width: 200,
+ minWidth: 150,
+ maxWidth: 400,
+ split: true,
+ collapsible: true,
+ layout: 'accordion',
+ layoutConfig:{
+ animate: true
+ },
+ items: [{
+ html: content,
+ title:'Navigation',
+ autoScroll: true,
+ border: false,
+ iconCls: 'nav'
+ },{
+ title:'Settings',
+ html: content,
+ border: false,
+ autoScroll: true,
+ iconCls: 'settings'
+ }]
+ },{
+ id: 'app-portal',
+ xtype: 'portalpanel',
+ region: 'center',
+ items: [{
+ id: 'col-1',
+ items: [{
+ id: 'portlet-1',
+ title: 'Grid Portlet',
+ tools: this.getTools(),
+ items: Ext.create('Ext.app.GridPortlet'),
+ listeners: {
+ 'close': Ext.bind(this.onPortletClose, this)
+ }
+ },{
+ id: 'portlet-2',
+ title: 'Portlet 2',
+ tools: this.getTools(),
+ html: content,
+ listeners: {
+ 'close': Ext.bind(this.onPortletClose, this)
+ }
+ }]
+ },{
+ id: 'col-2',
+ items: [{
+ id: 'portlet-3',
+ title: 'Portlet 3',
+ tools: this.getTools(),
+ html: '<div class="portlet-content">'+Ext.example.bogusMarkup+'</div>',
+ listeners: {
+ 'close': Ext.bind(this.onPortletClose, this)
+ }
+ }]
+ },{
+ id: 'col-3',
+ items: [{
+ id: 'portlet-4',
+ title: 'Stock Portlet',
+ tools: this.getTools(),
+ items: Ext.create('Ext.app.ChartPortlet'),
+ listeners: {
+ 'close': Ext.bind(this.onPortletClose, this)
+ }
+ }]
+ }]
+ }]
+ }]
+ });
+ this.callParent(arguments);
+ },
+
+ onPortletClose: function(portlet) {
+ this.showMsg('"' + portlet.title + '" was removed');
+ },
+
+ showMsg: function(msg) {
+ var el = Ext.get('app-msg'),
+ msgId = Ext.id();
+
+ this.msgId = msgId;
+ el.update(msg).show();
+
+ Ext.defer(this.clearMsg, 3000, this, [msgId]);
+ },
+
+ clearMsg: function(msgId) {
+ if (msgId === this.msgId) {
+ Ext.get('app-msg').hide();
+ }
+ }
+});
+