1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
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;
}
});
});
|