]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/widget/Wizard.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / widget / Wizard.js
diff --git a/static/dojo-release-1.1.1/dojox/widget/Wizard.js b/static/dojo-release-1.1.1/dojox/widget/Wizard.js
new file mode 100644 (file)
index 0000000..b8921b1
--- /dev/null
@@ -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();
+               }
+       }
+
+});
+
+}