define("dijit/form/_ButtonMixin", [ "dojo/_base/declare", // declare "dojo/dom", // dom.setSelectable "dojo/_base/event", // event.stop "../registry" // registry.byNode ], function(declare, dom, event, registry){ // module: // dijit/form/_ButtonMixin // summary: // A mixin to add a thin standard API wrapper to a normal HTML button return declare("dijit.form._ButtonMixin", null, { // summary: // A mixin to add a thin standard API wrapper to a normal HTML button // description: // A label should always be specified (through innerHTML) or the label attribute. // Attach points: // focusNode (required): this node receives focus // valueNode (optional): this node's value gets submitted with FORM elements // containerNode (optional): this node gets the innerHTML assignment for label // example: // | // // example: // | var button1 = new dijit.form.Button({label: "hello world", onClick: foo}); // | dojo.body().appendChild(button1.domNode); // label: HTML String // Content to display in button. label: "", // type: [const] String // Type of button (submit, reset, button, checkbox, radio) type: "button", _onClick: function(/*Event*/ e){ // summary: // Internal function to handle click actions if(this.disabled){ event.stop(e); return false; } var preventDefault = this.onClick(e) === false; // user click actions if(!preventDefault && this.type == "submit" && !(this.valueNode||this.focusNode).form){ // see if a non-form widget needs to be signalled for(var node=this.domNode; node.parentNode; node=node.parentNode){ var widget=registry.byNode(node); if(widget && typeof widget._onSubmit == "function"){ widget._onSubmit(e); preventDefault = true; break; } } } if(preventDefault){ e.preventDefault(); } return !preventDefault; }, postCreate: function(){ this.inherited(arguments); dom.setSelectable(this.focusNode, false); }, onClick: function(/*Event*/ /*===== e =====*/){ // summary: // Callback for when button is clicked. // If type="submit", return true to perform submit, or false to cancel it. // type: // callback return true; // Boolean }, _setLabelAttr: function(/*String*/ content){ // summary: // Hook for set('label', ...) to work. // description: // Set the label (text) of the button; takes an HTML string. this._set("label", content); (this.containerNode||this.focusNode).innerHTML = content; } }); });