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.
85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
define([
|
|
"dojo/_base/declare", // declare
|
|
"dojo/keys", // keys
|
|
"../focus", // focus.focus()
|
|
"./DropDownButton",
|
|
"dojo/text!./templates/ComboButton.html",
|
|
"../a11yclick" // template uses ondijitclick
|
|
], function(declare, keys, focus, DropDownButton, template){
|
|
|
|
// module:
|
|
// dijit/form/ComboButton
|
|
|
|
return declare("dijit.form.ComboButton", DropDownButton, {
|
|
// summary:
|
|
// A combination button and drop-down button.
|
|
// Users can click one side to "press" the button, or click an arrow
|
|
// icon to display the drop down.
|
|
//
|
|
// example:
|
|
// | <button data-dojo-type="dijit/form/ComboButton" onClick="...">
|
|
// | <span>Hello world</span>
|
|
// | <div data-dojo-type="dijit/Menu">...</div>
|
|
// | </button>
|
|
//
|
|
// example:
|
|
// | var button1 = new ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
|
|
// | dojo.body().appendChild(button1.domNode);
|
|
//
|
|
|
|
templateString: template,
|
|
|
|
// Map widget attributes to DOMNode attributes.
|
|
_setIdAttr: "", // override _FormWidgetMixin which puts id on the focusNode
|
|
_setTabIndexAttr: ["focusNode", "titleNode"],
|
|
_setTitleAttr: "titleNode",
|
|
|
|
// optionsTitle: String
|
|
// Text that describes the options menu (accessibility)
|
|
optionsTitle: "",
|
|
|
|
baseClass: "dijitComboButton",
|
|
|
|
// Set classes like dijitButtonContentsHover or dijitArrowButtonActive depending on
|
|
// mouse action over specified node
|
|
cssStateNodes: {
|
|
"buttonNode": "dijitButtonNode",
|
|
"titleNode": "dijitButtonContents",
|
|
"_popupStateNode": "dijitDownArrowButton"
|
|
},
|
|
|
|
_focusedNode: null,
|
|
|
|
_onButtonKeyDown: function(/*Event*/ evt){
|
|
// summary:
|
|
// Handler for right arrow key when focus is on left part of button
|
|
if(evt.keyCode == keys[this.isLeftToRight() ? "RIGHT_ARROW" : "LEFT_ARROW"]){
|
|
focus.focus(this._popupStateNode);
|
|
evt.stopPropagation();
|
|
evt.preventDefault();
|
|
}
|
|
},
|
|
|
|
_onArrowKeyDown: function(/*Event*/ evt){
|
|
// summary:
|
|
// Handler for left arrow key when focus is on right part of button
|
|
if(evt.keyCode == keys[this.isLeftToRight() ? "LEFT_ARROW" : "RIGHT_ARROW"]){
|
|
focus.focus(this.titleNode);
|
|
evt.stopPropagation();
|
|
evt.preventDefault();
|
|
}
|
|
},
|
|
|
|
focus: function(/*String*/ position){
|
|
// summary:
|
|
// Focuses this widget to according to position, if specified,
|
|
// otherwise on arrow node
|
|
// position:
|
|
// "start" or "end"
|
|
if(!this.disabled){
|
|
focus.focus(position == "start" ? this.titleNode : this._popupStateNode);
|
|
}
|
|
}
|
|
});
|
|
});
|