| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | Ext.Loader.setConfig({    enabled: true});Ext.Loader.setPath('Ext.ux', '../ux/');Ext.require([  'Ext.panel.Panel',  'Ext.button.Button',  'Ext.window.Window',  'Ext.ux.statusbar.StatusBar',  'Ext.toolbar.TextItem',  'Ext.menu.Menu',  'Ext.toolbar.Spacer',  'Ext.button.Split',  'Ext.form.field.TextArea']);Ext.onReady(function(){    // This is a shared function that simulates a load action on a StatusBar.    // It is reused by most of the example panels.    var loadFn = function(btn, statusBar){        btn = Ext.getCmp(btn);        statusBar = Ext.getCmp(statusBar);        btn.disable();        statusBar.showBusy();         Ext.defer(function(){            statusBar.clearStatus({useDefaults:true});            btn.enable();        }, 2000);    };/* * ================  Basic StatusBar example  ======================= */    Ext.create('Ext.Panel', {        title: 'Basic StatusBar',        renderTo: 'basic',        width: 550,        height: 100,        bodyPadding: 10,        items:[{            xtype: 'button',            id: 'basic-button',            text: 'Do Loading',            handler: Ext.Function.pass(loadFn, ['basic-button', 'basic-statusbar'])        }],        bbar: Ext.create('Ext.ux.StatusBar', {            id: 'basic-statusbar',            // defaults to use when the status is cleared:            defaultText: 'Default status text',            //defaultIconCls: 'default-icon',                    // values to set initially:            text: 'Ready',            iconCls: 'x-status-valid',            // any standard Toolbar items:            items: [                {                    xtype: 'button',                    text: 'Show Warning & Clear',                    handler: function (){                        var sb = Ext.getCmp('basic-statusbar');                        sb.setStatus({                            text: 'Oops!',                            iconCls: 'x-status-error',                            clear: true // auto-clear after a set interval                        });                    }                },                {                    xtype: 'button',                    text: 'Show Busy',                    handler: function (){                        var sb = Ext.getCmp('basic-statusbar');                        // Set the status bar to show that something is processing:                        sb.showBusy();                    }                },                {                    xtype: 'button',                    text: 'Clear status',                    handler: function (){                        var sb = Ext.getCmp('basic-statusbar');                        // once completed                        sb.clearStatus();                     }                },                '-',                'Plain Text'            ]        })    });/* * ================  Right-aligned StatusBar example  ======================= */    Ext.create('Ext.Panel', {        title: 'Right-aligned StatusBar',        renderTo: 'right-aligned',        width: 550,        height: 100,        bodyPadding: 10,        items:[{            xtype: 'button',            id: 'right-button',            text: 'Do Loading',            handler: Ext.Function.pass(loadFn, ['right-button', 'right-statusbar'])        }],        bbar: Ext.create('Ext.ux.StatusBar', {            defaultText: 'Default status',            id: 'right-statusbar',            statusAlign: 'right', // the magic config            items: [{                text: 'A Button'            }, '-', 'Plain Text', ' ', ' ']        })    });/* * ================  StatusBar Window example  ======================= */    var win = Ext.create('Ext.Window', {        title: 'StatusBar Window',        width: 400,        minWidth: 350,        height: 150,        modal: true,        closeAction: 'hide',        bodyPadding: 10,        items:[{            xtype: 'button',            id: 'win-button',            text: 'Do Loading',            handler: Ext.Function.pass(loadFn, ['win-button', 'win-statusbar'])        }],        bbar: Ext.create('Ext.ux.StatusBar', {            id: 'win-statusbar',            defaultText: 'Ready',            items: [{                xtype: 'button',                text: 'A Button'            }, '-',            Ext.Date.format(new Date(), 'n/d/Y'), ' ', ' ', '-', {                xtype:'splitbutton',                text:'Status Menu',                menuAlign: 'br-tr?',                menu: Ext.create('Ext.menu.Menu', {                    items: [{text: 'Item 1'}, {text: 'Item 2'}]                })            }]        })    });    Ext.create('Ext.Button', {        text: 'Show Window',        renderTo: 'window',        handler: function(){            win.show();        }    });/* * ================  Ext Word Processor example  ======================= * * The StatusBar used in this example is completely standard.  What is * customized are the styles and event handling to make the example a * lot more dynamic and application-oriented. * */    // Create these explicitly so we can manipulate them later    var wordCount = Ext.create('Ext.toolbar.TextItem', {text: 'Words: 0'}),        charCount = Ext.create('Ext.toolbar.TextItem', {text: 'Chars: 0'}),         clock = Ext.create('Ext.toolbar.TextItem', {text: Ext.Date.format(new Date(), 'g:i:s A')}),        event = Ext.isOpera ? 'keypress' : 'keydown'; // opera behaves a little weird with keydown    Ext.create('Ext.Panel', {        title: 'Ext Word Processor',        renderTo: 'word-proc',        width: 500,        bodyPadding: 5,        layout: 'fit',        bbar: Ext.create('Ext.ux.StatusBar', {            id: 'word-status',            // These are just the standard toolbar TextItems we created above.  They get            // custom classes below in the render handler which is what gives them their            // customized inset appearance.            items: [wordCount, ' ', charCount, ' ', clock, ' ']        }),        items: {            xtype: 'textarea',            id: 'word-textarea',            enableKeyEvents: true,            hideLabel: true,            grow: true,            growMin: 100,            growMax: 200        },        listeners: {            render: {                fn: function(){                    // Add a class to the parent TD of each text item so we can give them some custom inset box                    // styling. Also, since we are using a greedy spacer, we have to add a block level element                    // into each text TD in order to give them a fixed width (TextItems are spans).  Insert a                    // spacer div into each TD using createChild() so that we can give it a width in CSS.                    Ext.fly(wordCount.getEl().parent()).addCls('x-status-text-panel').createChild({cls:'spacer'});                    Ext.fly(charCount.getEl().parent()).addCls('x-status-text-panel').createChild({cls:'spacer'});                    Ext.fly(clock.getEl().parent()).addCls('x-status-text-panel').createChild({cls:'spacer'});                    // Kick off the clock timer that updates the clock el every second:                 Ext.TaskManager.start({                     run: function(){                         Ext.fly(clock.getEl()).update(Ext.Date.format(new Date(), 'g:i:s A'));                     },                     interval: 1000                 });                },                delay: 100            }        }    });    // This sets up a fake auto-save function.  It monitors keyboard activity and after no typing    // has occurred for 1.5 seconds, it updates the status message to indicate that it's saving.    // After a fake delay so that you can see the save activity it will update again to indicate    // that the action succeeded.    Ext.getCmp('word-textarea').on(event, function(){        var sb = Ext.getCmp('word-status');        sb.showBusy('Saving draft...');        Ext.defer(function(){            sb.setStatus({                iconCls: 'x-status-saved',                text: 'Draft auto-saved at ' + Ext.Date.format(new Date(), 'g:i:s A')            });        }, 4000);    }, null, {buffer:1500});        // Set up our event for updating the word/char count    Ext.getCmp('word-textarea').on(event, function(comp){        var v = comp.getValue(),            wc = 0,             cc = v.length ? v.length : 0;        if (cc > 0) {            wc = v.match(/\b/g);            wc = wc ? wc.length / 2 : 0;        }        wordCount.update('Words: ' + wc);        charCount.update('Chars: ' + cc);    }, null, {buffer: 1});});
 |