diff options
Diffstat (limited to 'includes/js/dojox/widget/Wizard.js')
-rw-r--r-- | includes/js/dojox/widget/Wizard.js | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/includes/js/dojox/widget/Wizard.js b/includes/js/dojox/widget/Wizard.js new file mode 100644 index 0000000..b8921b1 --- /dev/null +++ b/includes/js/dojox/widget/Wizard.js @@ -0,0 +1,192 @@ +if(!dojo._hasResource["dojox.widget.Wizard"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.widget.Wizard"] = true; +dojo.provide("dojox.widget.Wizard"); + +dojo.require("dijit.layout.StackContainer"); +dojo.require("dijit.layout.ContentPane"); +dojo.require("dijit.form.Button"); + +dojo.require("dojo.i18n"); +dojo.requireLocalization("dijit", "common", null, "zh,pt,da,tr,ru,de,sv,ja,he,fi,nb,el,ar,ROOT,pt-pt,cs,fr,es,ko,nl,zh-tw,pl,it,hu"); +dojo.requireLocalization("dojox.widget", "Wizard", null, "zh,pt,da,tr,ru,de,sv,ja,he,fi,nb,el,ar,pt-pt,cs,fr,es,nl,ko,zh-tw,ROOT,pl,it,hu"); + +dojo.declare( + "dojox.widget.WizardContainer", + [dijit.layout.StackContainer,dijit._Templated], + { + // summary: + // A set of panels that display sequentially, typically notating a step-by-step + // procedure like an install + // + + widgetsInTemplate: true, + templateString:"<div class=\"dojoxWizard\" dojoAttachPoint=\"wizardNode\">\n <div class=\"dojoxWizardContainer\" dojoAttachPoint=\"containerNode\"></div>\n <div class=\"dojoxWizardButtons\" dojoAttachPoint=\"wizardNav\">\n <button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"previousButton\">${previousButtonLabel}</button>\n <button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"nextButton\">${nextButtonLabel}</button>\n <button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"doneButton\" style=\"display:none\">${doneButtonLabel}</button>\n <button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"cancelButton\">${cancelButtonLabel}</button>\n </div>\n</div>\n", + + // nextButtonLabel: String + // Label override for the "Next" button. + nextButtonLabel: "", + + // previousButtonLabel: String + // Label override for the "Previous" button. + previousButtonLabel: "", + + // cancelButtonLabel: String + // Label override for the "Cancel" button. + cancelButtonLabel: "", + + // doneButtonLabel: String + // Label override for the "Done" button. + doneButtonLabel: "", + + // cancelFunction: FunctionName + // Name of function to call if user presses cancel button. + // Cancel button is not displayed if function is not specified. + cancelFunction: "", + + // hideDisabled: Boolean + // If true, disabled buttons are hidden; otherwise, they are assigned the + // "WizardButtonDisabled" CSS class + hideDisabled: false, + + postMixInProperties: function(){ + this.inherited(arguments); + var labels = dojo.mixin({cancel: dojo.i18n.getLocalization("dijit", "common", this.lang).buttonCancel}, + dojo.i18n.getLocalization("dojox.widget", "Wizard", this.lang)); + for(prop in labels){ + if(!this[prop + "ButtonLabel"]){ + this[prop + "ButtonLabel"] = labels[prop]; + } + } + }, + + startup: function(){ + this.inherited(arguments); + + this.connect(this.nextButton, "onClick", "_forward"); + this.connect(this.previousButton, "onClick", "back"); + + if(this.cancelFunction){ + this.cancelFunction = dojo.getObject(this.cancelFunction); + this.connect(this.cancelButton, "onClick", this.cancelFunction); + }else{ + this.cancelButton.domNode.style.display = "none"; + } + this.connect(this.doneButton, "onClick", "done"); + + this._subscription = dojo.subscribe(this.id+"-selectChild", dojo.hitch(this,"_checkButtons")); + this._checkButtons(); + }, + + _checkButtons: function(){ + + var sw = this.selectedChildWidget; + + var lastStep = sw.isLastChild; + this.nextButton.setAttribute("disabled", lastStep); + this._setButtonClass(this.nextButton); + if(sw.doneFunction){ + this.doneButton.domNode.style.display = ""; + if(lastStep){ + this.nextButton.domNode.style.display = "none"; + } + }else{ + // #1438 issue here. + this.doneButton.domNode.style.display = "none"; + } + this.previousButton.setAttribute("disabled", !this.selectedChildWidget.canGoBack); + this._setButtonClass(this.previousButton); + }, + + _setButtonClass: function(button){ + button.domNode.style.display = (this.hideDisabled && button.disabled) ? "none" : ""; + }, + + _forward: function(){ + // summary: callback when next button is clicked + if(this.selectedChildWidget._checkPass()){ + this.forward(); + } + }, + + done: function(){ + // summary: Finish the wizard's operation + this.selectedChildWidget.done(); + }, + + destroy: function(){ + dojo.unsubscribe(this._subscription); + this.inherited(arguments); + } +}); + +dojo.declare( + "dojox.widget.WizardPane", + dijit.layout.ContentPane, + { + // summary: a panel in a WizardContainer + // + // description: + // An extended ContentPane with additional hooks for passing named + // functions to prevent the pane from going either forward or + // backwards. + // + // 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(){ + if(this.passFunction){ + this.passFunction = dojo.getObject(this.passFunction); + } + if(this.doneFunction){ + this.doneFunction = dojo.getObject(this.doneFunction); + } + this.inherited(arguments); + }, + + startup: function(){ + this.inherited(arguments); + if(this.isFirstChild){ this.canGoBack = false; } + }, + + _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. + var r = true; + if(this.passFunction && dojo.isFunction(this.passFunction)){ + var failMessage = this.passFunction(); + switch(typeof failMessage){ + case "boolean": + r = failMessage; + break; + case "string": + alert(failMessage); + r = false; + break; + } + } + return r; + }, + + done: function(){ + if(this.doneFunction && dojo.isFunction(this.doneFunction)){ + this.doneFunction(); + } + } + +}); + +} |