<!--
/*!
* Ext JS Library 3.0.0
* Copyright(c) 2006-2009 Ext JS, LLC
* licensing@extjs.com
* http://www.extjs.com/license
*/
-->
<!-- Revised from demo code in ext3.0.0 -->
<html>
<head>
<title>Hello World Window</title>
<link rel="stylesheet" type="text/css" href="ext-3.0.0/resources/css/ext-all.css" />
<script type="text/javascript" src="ext-3.0.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext-3.0.0/ext-all.js"></script>
<script type="text/javascript" src="ext-3.0.0/examples/ux/StatusBar.js"> </script>
<link rel="stylesheet" type="text/css" href="ext-3.0.0/examples/ux/css/StatusBar.css" />
<script type="text/javascript">
/*
* Ext JS Library 2.2
* Copyright(c) 2006-2008, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
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();
(function(){
statusBar.clearStatus({useDefaults:true});
btn.enable();
}).defer(2000);
};
/*
* Basic StatusBar example
*/
new Ext.Panel({
title: 'Basic StatusBar',
renderTo: 'basic',
width: 350,
height: 100,
bodyStyle: 'padding:10px;',
items:[{
xtype: 'button',
id: 'basic-button',
text: 'Do Loading',
handler: loadFn.createCallback('basic-button', 'basic-statusbar')
}],
bbar: new Ext.ux.StatusBar({
defaultText: 'Default status',
id: 'basic-statusbar',
items: [{
text: 'A Button'
}, '-', 'Plain Text', ' ', ' ']
})
});
/*
* Right-aligned StatusBar example
*/
new Ext.Panel({
title: 'Right-aligned StatusBar',
renderTo: 'right-aligned',
width: 350,
height: 100,
bodyStyle: 'padding:10px;',
items:[{
xtype: 'button',
id: 'right-button',
text: 'Do Loading',
handler: loadFn.createCallback('right-button', 'right-statusbar')
}],
bbar: new 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 = new Ext.Window({
title: 'StatusBar Window',
width: 400,
minWidth: 350,
height: 150,
modal: true,
closeAction: 'hide',
bodyStyle: 'padding:10px;',
items:[{
xtype: 'button',
id: 'win-button',
text: 'Do Loading',
handler: loadFn.createCallback('win-button', 'win-statusbar')
}],
bbar: new Ext.ux.StatusBar({
id: 'win-statusbar',
defaultText: 'Ready',
items: [{
text: 'A Button'
}, '-',
new Date().format('n/d/Y'), ' ', ' ', '-', {
xtype:'tbsplit',
text:'Status Menu',
menuAlign: 'br-tr?',
menu: new Ext.menu.Menu({
items: [{text: 'Item 1'}, {text: 'Item 2'}]
})
}]
})
});
new 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 = new Ext.Toolbar.TextItem('Words: 0');
var charCount = new Ext.Toolbar.TextItem('Chars: 0');
var clock = new Ext.Toolbar.TextItem('');
new Ext.Panel({
title: 'Ext Word Processor',
renderTo: 'word-proc',
width: 500,
autoHeight: true,
bodyStyle: 'padding:5px;',
layout: 'fit',
bbar: new 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,
grow: true,
growMin: 100,
growMax: 200,
listeners: {
// After each keypress update the word and character count text items
'keypress': {
fn: function(t){
var v = t.getValue(),
wc = 0, cc = v.length ? v.length : 0;
if(cc > 0){
wc = v.match(/\b/g);
wc = wc ? wc.length / 2 : 0;
}
Ext.fly(wordCount.getEl()).update('Words: '+wc);
Ext.fly(charCount.getEl()).update('Chars: '+cc);
},
buffer: 1 // buffer to allow the value to update first
}
}
},
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()).addClass('x-status-text-panel').createChild({cls:'spacer'});
Ext.fly(charCount.getEl().parent()).addClass('x-status-text-panel').createChild({cls:'spacer'});
Ext.fly(clock.getEl().parent()).addClass('x-status-text-panel').createChild({cls:'spacer'});
// Kick off the clock timer that updates the clock el every second:
Ext.TaskMgr.start({
run: function(){
Ext.fly(clock.getEl()).update(new Date().format('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.fly('word-textarea').on('keypress', function(){
var sb = Ext.getCmp('word-status');
sb.showBusy('Saving draft...');
(function(){
sb.setStatus({
iconCls: 'x-status-saved',
text: 'Draft auto-saved at ' + new Date().format('g:i:s A')
});
}).defer(4000);
}, this, {buffer:1500});
});
</script>
</head>
<body>
<h1>StatusBar Examples</h1>
<p>Here are several examples of using and customizing the Ext.ux.StatusBar component.</p>
<p>Note that the js is not minified so it is readable. See <a href="statusbar-demo.js">statusbar-demo.js</a>.</p>
<h2>Basic StatusBar</h2>
<p>This is a simple StatusBar with a few standard Toolbar items included.</p>
<div id="basic"></div>
<p>
<h2>Right-Aligned StatusBar</h2>
<p>This is a simple StatusBar that has the status element right-aligned. Any StatusBar items will be added in
exactly the same order on the left side of the bar.</p>
<div id="right-aligned"></div>
<h2>Status Window</h2>
<p>You can add a StatusBar to a window in exactly the same way.</p>
<div id="window" style="margin-bottom:20px;"></div>
<h2>Customizing the Look and Feel</h2>
<p>This is a standard StatusBar with some custom CSS styles applied and some event handling in place to
handle the TextArea's keypress events. Notice that after you've stopped typing for a few seconds a
simulated auto-save process will begin.</p>
<div id="word-proc"></div>
</body>
</html>
|