85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
|
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
|
||
|
|
||
|
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:
|
||
|
// | <button data-dojo-type="dijit/form/Button" onClick="...">Hello world</button>
|
||
|
// example:
|
||
|
// | var button1 = new 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;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
});
|