175 lines
4.8 KiB
JavaScript
175 lines
4.8 KiB
JavaScript
Ext.namespace('Ext.ux.Wiz');
|
|
|
|
/**
|
|
* Licensed under GNU LESSER GENERAL PUBLIC LICENSE Version 3
|
|
*
|
|
* @author Thorsten Suckow-Homberg <ts@siteartwork.de>
|
|
* @url http://www.siteartwork.de/wizardcomponent
|
|
*/
|
|
|
|
/**
|
|
* @class Ext.ux.Wiz.Header
|
|
* @extends Ext.BoxComponent
|
|
*
|
|
* A specific {@link Ext.BoxComponent} that can be used to show the current process in an
|
|
* {@link Ext.ux.Wiz}.
|
|
*
|
|
* An instance of this class is usually being created by {@link Ext.ux.Wiz#initPanels} using the
|
|
* {@link Ext.ux.Wiz#headerConfig}-object.
|
|
*
|
|
* @private
|
|
* @constructor
|
|
* @param {Object} config The config object
|
|
*/
|
|
Ext.ux.Wiz.Header = Ext.extend(Ext.BoxComponent, {
|
|
|
|
/**
|
|
* @cfg {Number} height The height of this component. Defaults to "55".
|
|
*/
|
|
height : 55,
|
|
|
|
/**
|
|
* @cfg {String} region The Region of this component. Since a {@link Ext.ux.Wiz}
|
|
* usually uses a {@link Ext.layout.BorderLayout}, this property defaults to
|
|
* "north". If you want to change this property, you should also change the appropriate
|
|
* css-classes that are used for this component.
|
|
*/
|
|
region : 'north',
|
|
|
|
/**
|
|
* @cfg {String} title The title that gets rendered in the head of the component. This
|
|
* should be a text describing the purpose of the wizard.
|
|
*/
|
|
title : 'Wizard',
|
|
|
|
/**
|
|
* @cfg {Number} steps The overall number of steps the user has to go through
|
|
* to finish the wizard.
|
|
*/
|
|
steps : 0,
|
|
|
|
/**
|
|
* @cfg {String} stepText The text in the header indicating the current process in the wizard.
|
|
* (defaults to "Step {0} of {1}: {2}").
|
|
* {0} is replaced with the index (+1) of the current card, {1} is replaced by the
|
|
* total number of cards in the wizard and {2} is replaced with the title-property of the
|
|
* {@link Ext.ux.Wiz.Card}
|
|
* @type String
|
|
*/
|
|
stepText : "Step {0} of {1}: {2}",
|
|
|
|
/**
|
|
* @cfg {Object} autoEl The element markup used to render this component.
|
|
*/
|
|
autoEl : {
|
|
tag : 'div',
|
|
cls : 'ext-ux-wiz-Header',
|
|
children : [{
|
|
tag : 'div',
|
|
cls : 'ext-ux-wiz-Header-title'
|
|
}, {
|
|
tag : 'div',
|
|
children : [{
|
|
tag : 'div',
|
|
cls : 'ext-ux-wiz-Header-step'
|
|
}, {
|
|
tag : 'div',
|
|
cls : 'ext-ux-wiz-Header-stepIndicator-container'
|
|
}]
|
|
}]
|
|
},
|
|
|
|
/**
|
|
* @param {Ext.Element}
|
|
*/
|
|
titleEl : null,
|
|
|
|
/**
|
|
* @param {Ext.Element}
|
|
*/
|
|
stepEl : null,
|
|
|
|
/**
|
|
* @param {Ext.Element}
|
|
*/
|
|
imageContainer : null,
|
|
|
|
/**
|
|
* @param {Array}
|
|
*/
|
|
indicators : null,
|
|
|
|
/**
|
|
* @param {Ext.Template}
|
|
*/
|
|
stepTemplate : null,
|
|
|
|
/**
|
|
* @param {Number} lastActiveStep Stores the index of the last active card that
|
|
* was shown-
|
|
*/
|
|
lastActiveStep : -1,
|
|
|
|
// -------- helper
|
|
/**
|
|
* Gets called by {@link Ext.ux.Wiz#onCardShow()} and updates the header
|
|
* with the approppriate information, such as the progress of the wizard
|
|
* (i.e. which card is being shown etc.)
|
|
*
|
|
* @param {Number} currentStep The index of the card currently shown in
|
|
* the wizard
|
|
* @param {String} title The title-property of the {@link Ext.ux.Wiz.Card}
|
|
*
|
|
* @private
|
|
*/
|
|
updateStep : function(currentStep, title)
|
|
{
|
|
var html = this.stepTemplate.apply({
|
|
0 : currentStep+1,
|
|
1 : this.steps,
|
|
2 : title
|
|
});
|
|
|
|
this.stepEl.update(html);
|
|
|
|
if (this.lastActiveStep != -1) {
|
|
this.indicators[this.lastActiveStep].removeClass('ext-ux-wiz-Header-stepIndicator-active');
|
|
}
|
|
|
|
this.indicators[currentStep].addClass('ext-ux-wiz-Header-stepIndicator-active');
|
|
|
|
this.lastActiveStep = currentStep;
|
|
},
|
|
|
|
|
|
// -------- listener
|
|
/**
|
|
* Overrides parent implementation to render this component properly.
|
|
*/
|
|
onRender : function(ct, position)
|
|
{
|
|
Ext.ux.Wiz.Header.superclass.onRender.call(this, ct, position);
|
|
|
|
this.indicators = [];
|
|
this.stepTemplate = new Ext.Template(this.stepText);
|
|
this.stepTemplate.compile();
|
|
|
|
var el = this.el.dom.firstChild;
|
|
var ns = el.nextSibling;
|
|
|
|
this.titleEl = new Ext.Element(el);
|
|
this.stepEl = new Ext.Element(ns.firstChild);
|
|
this.imageContainer = new Ext.Element(ns.lastChild);
|
|
|
|
this.titleEl.update(this.title);
|
|
|
|
var image = null;
|
|
for (var i = 0, len = this.steps; i < len; i++) {
|
|
image = document.createElement('div');
|
|
image.innerHTML = " ";
|
|
image.className = 'ext-ux-wiz-Header-stepIndicator';
|
|
this.indicators[i] = new Ext.Element(image);
|
|
this.imageContainer.appendChild(image);
|
|
}
|
|
}
|
|
}); |