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.
74 lines
2.0 KiB
JavaScript
74 lines
2.0 KiB
JavaScript
define([
|
|
"dojo/_base/array", // array.forEach
|
|
"dojo/_base/declare", // declare
|
|
"dojo/dom-class", // domClass.toggle
|
|
"dojo/query!css2", // query
|
|
"./CheckedMenuItem",
|
|
"./registry" // registry.getEnclosingWidget
|
|
], function(array, declare, domClass, query, CheckedMenuItem, registry){
|
|
|
|
// module:
|
|
// dijit/RadioButtonMenuItem
|
|
|
|
return declare("dijit.RadioButtonMenuItem", CheckedMenuItem, {
|
|
// summary:
|
|
// A radio-button-like menu item for toggling on and off
|
|
|
|
// Use both base classes so we get styles like dijitMenuItemDisabled
|
|
baseClass: "dijitMenuItem dijitRadioMenuItem",
|
|
|
|
role: "menuitemradio",
|
|
|
|
// checkedChar: String
|
|
// Character (or string) used in place of radio button icon when display in high contrast mode
|
|
checkedChar: "*",
|
|
|
|
// group: String
|
|
// Toggling on a RadioMenuItem in a given group toggles off the other RadioMenuItems in that group.
|
|
group: "",
|
|
_setGroupAttr: "domNode", // needs to be set as an attribute so dojo/query can find it
|
|
|
|
_setCheckedAttr: function(/*Boolean*/ checked){
|
|
// If I am being checked then have to deselect currently checked items
|
|
this.inherited(arguments);
|
|
if(!this._created){
|
|
return;
|
|
}
|
|
if(checked && this.group){
|
|
array.forEach(this._getRelatedWidgets(), function(widget){
|
|
if(widget != this && widget.checked){
|
|
widget.set('checked', false);
|
|
}
|
|
}, this);
|
|
}
|
|
},
|
|
|
|
_onClick: function(evt){
|
|
// summary:
|
|
// Clicking this item toggles it on. If it's already on, then clicking does nothing.
|
|
// tags:
|
|
// private
|
|
|
|
if(!this.disabled && !this.checked){
|
|
this.set("checked", true);
|
|
this.onChange(true);
|
|
}
|
|
this.onClick(evt);
|
|
},
|
|
|
|
_getRelatedWidgets: function(){
|
|
// Private function needed to help iterate over all radio menu items in a group.
|
|
var ary = [];
|
|
query("[group=" + this.group + "][role=" + this.role + "]").forEach(
|
|
function(menuItemNode){
|
|
var widget = registry.getEnclosingWidget(menuItemNode);
|
|
if(widget){
|
|
ary.push(widget);
|
|
}
|
|
}
|
|
);
|
|
return ary;
|
|
}
|
|
});
|
|
});
|