You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tt-rss/lib/dijit/form/_ButtonMixin.js.uncompresse...

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;
}
});
});