210 lines
5.6 KiB
JavaScript
210 lines
5.6 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2006, The Dojo Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the
|
|
modified BSD license. For more information on Dojo licensing, see:
|
|
|
|
http://dojotoolkit.org/community/licensing.shtml
|
|
*/
|
|
|
|
dojo.provide("dojo.widget.Wizard");
|
|
|
|
dojo.require("dojo.widget.*");
|
|
dojo.require("dojo.widget.LayoutContainer");
|
|
dojo.require("dojo.widget.ContentPane");
|
|
dojo.require("dojo.event.*");
|
|
dojo.require("dojo.html");
|
|
dojo.require("dojo.style");
|
|
|
|
//////////////////////////////////////////
|
|
// WizardContainer -- a set of panels
|
|
//////////////////////////////////////////
|
|
dojo.widget.WizardContainer = function() {
|
|
dojo.widget.html.LayoutContainer.call(this);
|
|
}
|
|
dojo.inherits(dojo.widget.WizardContainer, dojo.widget.html.LayoutContainer);
|
|
|
|
dojo.lang.extend(dojo.widget.WizardContainer, {
|
|
|
|
widgetType: "WizardContainer",
|
|
|
|
labelPosition: "top",
|
|
|
|
templatePath: dojo.uri.dojoUri("src/widget/templates/Wizard.html"),
|
|
templateCssPath: dojo.uri.dojoUri("src/widget/templates/Wizard.css"),
|
|
|
|
selected: null, // currently selected panel
|
|
wizardNode: null, // the outer wizard node
|
|
wizardPanelContainerNode: null, // the container for the panels
|
|
wizardControlContainerNode: null, // the container for the wizard controls
|
|
previousButton: null, // the previous button
|
|
nextButton: null, // the next button
|
|
cancelButton: null, // the cancel button
|
|
doneButton: null, // the done button
|
|
nextButtonLabel: "next",
|
|
previousButtonLabel: "previous",
|
|
cancelButtonLabel: "cancel",
|
|
doneButtonLabel: "done",
|
|
cancelFunction : "",
|
|
|
|
hideDisabledButtons: false,
|
|
|
|
fillInTemplate: function(args, frag){
|
|
dojo.event.connect(this.nextButton, "onclick", this, "nextPanel");
|
|
dojo.event.connect(this.previousButton, "onclick", this, "previousPanel");
|
|
if (this.cancelFunction){
|
|
dojo.event.connect(this.cancelButton, "onclick", this.cancelFunction);
|
|
}else{
|
|
this.cancelButton.style.display = "none";
|
|
}
|
|
dojo.event.connect(this.doneButton, "onclick", this, "done");
|
|
this.nextButton.value = this.nextButtonLabel;
|
|
this.previousButton.value = this.previousButtonLabel;
|
|
this.cancelButton.value = this.cancelButtonLabel;
|
|
this.doneButton.value = this.doneButtonLabel;
|
|
},
|
|
|
|
checkButtons: function(){
|
|
var lastStep = !this.hasNextPanel();
|
|
this.nextButton.disabled = lastStep;
|
|
this.setButtonClass(this.nextButton);
|
|
if(this.selected.doneFunction){
|
|
this.doneButton.style.display = "";
|
|
// hide the next button if this is the last one and we have a done function
|
|
if(lastStep){
|
|
this.nextButton.style.display = "none";
|
|
}
|
|
}else{
|
|
this.doneButton.style.display = "none";
|
|
}
|
|
this.previousButton.disabled = ((!this.hasPreviousPanel()) || (!this.selected.canGoBack));
|
|
this.setButtonClass(this.previousButton);
|
|
},
|
|
|
|
setButtonClass: function(button){
|
|
if(!this.hideDisabledButtons){
|
|
button.style.display = "";
|
|
dojo.html.setClass(button, button.disabled ? "WizardButtonDisabled" : "WizardButton");
|
|
}else{
|
|
button.style.display = button.disabled ? "none" : "";
|
|
}
|
|
},
|
|
|
|
registerChild: function(panel, insertionIndex){
|
|
dojo.widget.WizardContainer.superclass.registerChild.call(this, panel, insertionIndex);
|
|
this.wizardPanelContainerNode.appendChild(panel.domNode);
|
|
panel.hide();
|
|
|
|
if(!this.selected){
|
|
this.onSelected(panel);
|
|
}
|
|
this.checkButtons();
|
|
},
|
|
|
|
onSelected: function(panel){
|
|
// Deselect old panel and select new one
|
|
if(this.selected ){
|
|
if (this.selected.checkPass()) {
|
|
this.selected.hide();
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
panel.show();
|
|
this.selected = panel;
|
|
},
|
|
|
|
getPanels: function() {
|
|
return this.getChildrenOfType("WizardPane", false);
|
|
},
|
|
|
|
selectedIndex: function() {
|
|
if (this.selected) {
|
|
return dojo.lang.indexOf(this.getPanels(), this.selected);
|
|
}
|
|
return -1;
|
|
},
|
|
|
|
nextPanel: function() {
|
|
var selectedIndex = this.selectedIndex();
|
|
if ( selectedIndex > -1 ) {
|
|
var childPanels = this.getPanels();
|
|
if (childPanels[selectedIndex + 1]) {
|
|
this.onSelected(childPanels[selectedIndex + 1]);
|
|
}
|
|
}
|
|
this.checkButtons();
|
|
},
|
|
|
|
previousPanel: function() {
|
|
var selectedIndex = this.selectedIndex();
|
|
if ( selectedIndex > -1 ) {
|
|
var childPanels = this.getPanels();
|
|
if (childPanels[selectedIndex - 1]) {
|
|
this.onSelected(childPanels[selectedIndex - 1]);
|
|
}
|
|
}
|
|
this.checkButtons();
|
|
},
|
|
|
|
hasNextPanel: function() {
|
|
var selectedIndex = this.selectedIndex();
|
|
return (selectedIndex < (this.getPanels().length - 1));
|
|
},
|
|
|
|
hasPreviousPanel: function() {
|
|
var selectedIndex = this.selectedIndex();
|
|
return (selectedIndex > 0);
|
|
},
|
|
|
|
done: function() {
|
|
this.selected.done();
|
|
}
|
|
});
|
|
dojo.widget.tags.addParseTreeHandler("dojo:WizardContainer");
|
|
|
|
//////////////////////////////////////////
|
|
// WizardPane -- a panel in a wizard
|
|
//////////////////////////////////////////
|
|
dojo.widget.WizardPane = function() {
|
|
dojo.widget.html.ContentPane.call(this);
|
|
}
|
|
dojo.inherits(dojo.widget.WizardPane, dojo.widget.html.ContentPane);
|
|
|
|
dojo.lang.extend(dojo.widget.WizardPane, {
|
|
widgetType: "WizardPane",
|
|
|
|
canGoBack: true,
|
|
|
|
passFunction: "",
|
|
doneFunction: "",
|
|
|
|
fillInTemplate: function(args, frag) {
|
|
if (this.passFunction) {
|
|
this.passFunction = dj_global[this.passFunction];
|
|
}
|
|
if (this.doneFunction) {
|
|
this.doneFunction = dj_global[this.doneFunction];
|
|
}
|
|
},
|
|
|
|
checkPass: function() {
|
|
if (this.passFunction && dojo.lang.isFunction(this.passFunction)) {
|
|
var failMessage = this.passFunction();
|
|
if (failMessage) {
|
|
alert(failMessage);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
|
|
done: function() {
|
|
if (this.doneFunction && dojo.lang.isFunction(this.doneFunction)) {
|
|
this.doneFunction();
|
|
}
|
|
}
|
|
});
|
|
|
|
dojo.widget.tags.addParseTreeHandler("dojo:WizardPane");
|