mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5282 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
234 lines
6.7 KiB
JavaScript
234 lines
6.7 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.style");
|
|
|
|
// TODO: base this on PageContainer
|
|
dojo.widget.defineWidget(
|
|
"dojo.widget.WizardContainer",
|
|
dojo.widget.LayoutContainer,
|
|
{
|
|
// summary
|
|
// A set of panels that display sequentially, typically notating a step-by-step
|
|
// procedure like an install
|
|
|
|
templatePath: dojo.uri.dojoUri("src/widget/templates/Wizard.html"),
|
|
templateCssPath: dojo.uri.dojoUri("src/widget/templates/Wizard.css"),
|
|
|
|
// selected: DomNode
|
|
// Currently selected panel. (Read-only)
|
|
selected: null,
|
|
|
|
// nextButtonLabel: String
|
|
// Label for the "Next" button.
|
|
nextButtonLabel: "next",
|
|
|
|
// previousButtonLabel: String
|
|
// Label for the "Previous" button.
|
|
previousButtonLabel: "previous",
|
|
|
|
// cancelButtonLabel: String
|
|
// Label for the "Cancel" button.
|
|
cancelButtonLabel: "cancel",
|
|
|
|
// doneButtonLabel: String
|
|
// Label for the "Done" button.
|
|
doneButtonLabel: "done",
|
|
|
|
// cancelButtonLabel: FunctionName
|
|
// Name of function to call if user presses cancel button.
|
|
// Cancel button is not displayed if function is not specified.
|
|
cancelFunction: "",
|
|
|
|
// hideDisabledButtons: Boolean
|
|
// If true, disabled buttons are hidden; otherwise, they are assigned the
|
|
// "WizardButtonDisabled" CSS class
|
|
hideDisabledButtons: false,
|
|
|
|
fillInTemplate: function(args, frag){
|
|
dojo.event.connect(this.nextButton, "onclick", this, "_onNextButtonClick");
|
|
dojo.event.connect(this.previousButton, "onclick", this, "_onPreviousButtonClick");
|
|
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(/*WizardPanel*/ panel){
|
|
// summary: Callback when new panel is selected.. 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() {
|
|
// summary: returns array of WizardPane children
|
|
return this.getChildrenOfType("WizardPane", false); // WizardPane[]
|
|
},
|
|
|
|
selectedIndex: function() {
|
|
// summary: Returns index (into this.children[]) for currently selected child.
|
|
if (this.selected) {
|
|
return dojo.lang.indexOf(this.getPanels(), this.selected); // Integer
|
|
}
|
|
return -1;
|
|
},
|
|
|
|
_onNextButtonClick: function() {
|
|
// summary: callback when next button is clicked
|
|
var selectedIndex = this.selectedIndex();
|
|
if ( selectedIndex > -1 ) {
|
|
var childPanels = this.getPanels();
|
|
if (childPanels[selectedIndex + 1]) {
|
|
this.onSelected(childPanels[selectedIndex + 1]);
|
|
}
|
|
}
|
|
this._checkButtons();
|
|
},
|
|
|
|
_onPreviousButtonClick: function() {
|
|
// summary: callback when previous button is clicked
|
|
var selectedIndex = this.selectedIndex();
|
|
if ( selectedIndex > -1 ) {
|
|
var childPanels = this.getPanels();
|
|
if (childPanels[selectedIndex - 1]) {
|
|
this.onSelected(childPanels[selectedIndex - 1]);
|
|
}
|
|
}
|
|
this._checkButtons();
|
|
},
|
|
|
|
hasNextPanel: function() {
|
|
// summary: Returns true if there's a another panel after the current panel
|
|
var selectedIndex = this.selectedIndex();
|
|
return (selectedIndex < (this.getPanels().length - 1));
|
|
},
|
|
|
|
hasPreviousPanel: function() {
|
|
// summary: Returns true if there's a panel before the current panel
|
|
var selectedIndex = this.selectedIndex();
|
|
return (selectedIndex > 0);
|
|
},
|
|
|
|
done: function() {
|
|
// summary: Finish the wizard's operation
|
|
this.selected.done();
|
|
}
|
|
});
|
|
|
|
dojo.widget.defineWidget(
|
|
"dojo.widget.WizardPane",
|
|
dojo.widget.ContentPane,
|
|
{
|
|
// summary
|
|
// a panel in a WizardContainer
|
|
|
|
// canGoBack: Boolean
|
|
// If true, then can move back to a previous panel (by clicking the "Previous" button)
|
|
canGoBack: true,
|
|
|
|
// passFunction: String
|
|
// Name of function that checks if it's OK to advance to the next panel.
|
|
// If it's not OK (for example, mandatory field hasn't been entered), then
|
|
// returns an error message (String) explaining the reason.
|
|
passFunction: "",
|
|
|
|
// doneFunction: String
|
|
// Name of function that is run if you press the "Done" button from this panel
|
|
doneFunction: "",
|
|
|
|
postMixInProperties: function(args, frag) {
|
|
if (this.passFunction) {
|
|
this.passFunction = dj_global[this.passFunction];
|
|
}
|
|
if (this.doneFunction) {
|
|
this.doneFunction = dj_global[this.doneFunction];
|
|
}
|
|
dojo.widget.WizardPane.superclass.postMixInProperties.apply(this, arguments);
|
|
},
|
|
|
|
_checkPass: function() {
|
|
// summary:
|
|
// Called when the user presses the "next" button.
|
|
// Calls passFunction to see if it's OK to advance to next panel, and
|
|
// if it isn't, then display error.
|
|
// Returns true to advance, false to not advance.
|
|
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();
|
|
}
|
|
}
|
|
});
|