123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- define("dijit/form/_ComboBoxMenu", [
- "dojo/_base/declare", // declare
- "dojo/dom-class", // domClass.add domClass.remove
- "dojo/dom-construct", // domConstruct.create
- "dojo/dom-style", // domStyle.get
- "dojo/keys", // keys.DOWN_ARROW keys.PAGE_DOWN keys.PAGE_UP keys.UP_ARROW
- "../_WidgetBase",
- "../_TemplatedMixin",
- "./_ComboBoxMenuMixin",
- "./_ListMouseMixin"
- ], function(declare, domClass, domConstruct, domStyle, keys,
- _WidgetBase, _TemplatedMixin, _ComboBoxMenuMixin, _ListMouseMixin){
- /*=====
- var _WidgetBase = dijit._WidgetBase;
- var _TemplatedMixin = dijit._TemplatedMixin;
- var _ComboBoxMenuMixin = dijit.form._ComboBoxMenuMixin;
- var _ListMouseMixin = dijit.form._ListMouseMixin;
- =====*/
- // module:
- // dijit/form/_ComboBoxMenu
- // summary:
- // Focus-less menu for internal use in `dijit.form.ComboBox`
- return declare("dijit.form._ComboBoxMenu",[_WidgetBase, _TemplatedMixin, _ListMouseMixin, _ComboBoxMenuMixin], {
- // summary:
- // Focus-less menu for internal use in `dijit.form.ComboBox`
- // Abstract methods that must be defined externally:
- // onChange: item was explicitly chosen (mousedown somewhere on the menu and mouseup somewhere on the menu)
- // onPage: next(1) or previous(-1) button pressed
- // tags:
- // private
- templateString: "<div class='dijitReset dijitMenu' data-dojo-attach-point='containerNode' style='overflow: auto; overflow-x: hidden;'>"
- +"<div class='dijitMenuItem dijitMenuPreviousButton' data-dojo-attach-point='previousButton' role='option'></div>"
- +"<div class='dijitMenuItem dijitMenuNextButton' data-dojo-attach-point='nextButton' role='option'></div>"
- +"</div>",
- baseClass: "dijitComboBoxMenu",
- postCreate: function(){
- this.inherited(arguments);
- if(!this.isLeftToRight()){
- domClass.add(this.previousButton, "dijitMenuItemRtl");
- domClass.add(this.nextButton, "dijitMenuItemRtl");
- }
- },
- _createMenuItem: function(){
- return domConstruct.create("div", {
- "class": "dijitReset dijitMenuItem" +(this.isLeftToRight() ? "" : " dijitMenuItemRtl"),
- role: "option"
- });
- },
- onHover: function(/*DomNode*/ node){
- // summary:
- // Add hover CSS
- domClass.add(node, "dijitMenuItemHover");
- },
- onUnhover: function(/*DomNode*/ node){
- // summary:
- // Remove hover CSS
- domClass.remove(node, "dijitMenuItemHover");
- },
- onSelect: function(/*DomNode*/ node){
- // summary:
- // Add selected CSS
- domClass.add(node, "dijitMenuItemSelected");
- },
- onDeselect: function(/*DomNode*/ node){
- // summary:
- // Remove selected CSS
- domClass.remove(node, "dijitMenuItemSelected");
- },
- _page: function(/*Boolean*/ up){
- // summary:
- // Handles page-up and page-down keypresses
- var scrollamount = 0;
- var oldscroll = this.domNode.scrollTop;
- var height = domStyle.get(this.domNode, "height");
- // if no item is highlighted, highlight the first option
- if(!this.getHighlightedOption()){
- this.selectNextNode();
- }
- while(scrollamount<height){
- var highlighted_option = this.getHighlightedOption();
- if(up){
- // stop at option 1
- if(!highlighted_option.previousSibling ||
- highlighted_option.previousSibling.style.display == "none"){
- break;
- }
- this.selectPreviousNode();
- }else{
- // stop at last option
- if(!highlighted_option.nextSibling ||
- highlighted_option.nextSibling.style.display == "none"){
- break;
- }
- this.selectNextNode();
- }
- // going backwards
- var newscroll = this.domNode.scrollTop;
- scrollamount += (newscroll-oldscroll)*(up ? -1:1);
- oldscroll = newscroll;
- }
- },
- handleKey: function(evt){
- // summary:
- // Handle keystroke event forwarded from ComboBox, returning false if it's
- // a keystroke I recognize and process, true otherwise.
- switch(evt.keyCode){
- case keys.DOWN_ARROW:
- this.selectNextNode();
- return false;
- case keys.PAGE_DOWN:
- this._page(false);
- return false;
- case keys.UP_ARROW:
- this.selectPreviousNode();
- return false;
- case keys.PAGE_UP:
- this._page(true);
- return false;
- default:
- return true;
- }
- }
- });
- });
|