1 /*! |
1 /*! |
2 * jQuery UI Selectmenu 1.12.1 |
2 * jQuery UI Selectmenu 1.13.1 |
3 * http://jqueryui.com |
3 * http://jqueryui.com |
4 * |
4 * |
5 * Copyright jQuery Foundation and other contributors |
5 * Copyright jQuery Foundation and other contributors |
6 * Released under the MIT license. |
6 * Released under the MIT license. |
7 * http://jquery.org/license |
7 * http://jquery.org/license |
8 */ |
8 */ |
9 |
9 |
10 //>>label: Selectmenu |
10 //>>label: Selectmenu |
11 //>>group: Widgets |
11 //>>group: Widgets |
12 // jscs:disable maximumLineLength |
12 /* eslint-disable max-len */ |
13 //>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select. |
13 //>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select. |
14 // jscs:enable maximumLineLength |
14 /* eslint-enable max-len */ |
15 //>>docs: http://api.jqueryui.com/selectmenu/ |
15 //>>docs: http://api.jqueryui.com/selectmenu/ |
16 //>>demos: http://jqueryui.com/selectmenu/ |
16 //>>demos: http://jqueryui.com/selectmenu/ |
17 //>>css.structure: ../../themes/base/core.css |
17 //>>css.structure: ../../themes/base/core.css |
18 //>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css |
18 //>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css |
19 //>>css.theme: ../../themes/base/theme.css |
19 //>>css.theme: ../../themes/base/theme.css |
20 |
20 |
21 ( function( factory ) { |
21 ( function( factory ) { |
|
22 "use strict"; |
|
23 |
22 if ( typeof define === "function" && define.amd ) { |
24 if ( typeof define === "function" && define.amd ) { |
23 |
25 |
24 // AMD. Register as an anonymous module. |
26 // AMD. Register as an anonymous module. |
25 define( [ |
27 define( [ |
26 "jquery", |
28 "jquery", |
88 |
91 |
89 // Associate existing label with the new button |
92 // Associate existing label with the new button |
90 this.labels = this.element.labels().attr( "for", this.ids.button ); |
93 this.labels = this.element.labels().attr( "for", this.ids.button ); |
91 this._on( this.labels, { |
94 this._on( this.labels, { |
92 click: function( event ) { |
95 click: function( event ) { |
93 this.button.focus(); |
96 this.button.trigger( "focus" ); |
94 event.preventDefault(); |
97 event.preventDefault(); |
95 } |
98 } |
96 } ); |
99 } ); |
97 |
100 |
98 // Hide original select element |
101 // Hide original select element |
222 this._renderMenu( this.menu, this.items ); |
225 this._renderMenu( this.menu, this.items ); |
223 |
226 |
224 this.menuInstance.refresh(); |
227 this.menuInstance.refresh(); |
225 this.menuItems = this.menu.find( "li" ) |
228 this.menuItems = this.menu.find( "li" ) |
226 .not( ".ui-selectmenu-optgroup" ) |
229 .not( ".ui-selectmenu-optgroup" ) |
227 .find( ".ui-menu-item-wrapper" ); |
230 .find( ".ui-menu-item-wrapper" ); |
228 |
231 |
229 this._rendered = true; |
232 this._rendered = true; |
230 |
233 |
231 if ( !options.length ) { |
234 if ( !options.length ) { |
232 return; |
235 return; |
448 }, |
451 }, |
449 |
452 |
450 keydown: function( event ) { |
453 keydown: function( event ) { |
451 var preventDefault = true; |
454 var preventDefault = true; |
452 switch ( event.keyCode ) { |
455 switch ( event.keyCode ) { |
453 case $.ui.keyCode.TAB: |
456 case $.ui.keyCode.TAB: |
454 case $.ui.keyCode.ESCAPE: |
457 case $.ui.keyCode.ESCAPE: |
455 this.close( event ); |
458 this.close( event ); |
456 preventDefault = false; |
459 preventDefault = false; |
457 break; |
460 break; |
458 case $.ui.keyCode.ENTER: |
461 case $.ui.keyCode.ENTER: |
459 if ( this.isOpen ) { |
462 if ( this.isOpen ) { |
460 this._selectFocusedItem( event ); |
463 this._selectFocusedItem( event ); |
461 } |
464 } |
462 break; |
465 break; |
463 case $.ui.keyCode.UP: |
466 case $.ui.keyCode.UP: |
464 if ( event.altKey ) { |
467 if ( event.altKey ) { |
465 this._toggle( event ); |
468 this._toggle( event ); |
466 } else { |
469 } else { |
|
470 this._move( "prev", event ); |
|
471 } |
|
472 break; |
|
473 case $.ui.keyCode.DOWN: |
|
474 if ( event.altKey ) { |
|
475 this._toggle( event ); |
|
476 } else { |
|
477 this._move( "next", event ); |
|
478 } |
|
479 break; |
|
480 case $.ui.keyCode.SPACE: |
|
481 if ( this.isOpen ) { |
|
482 this._selectFocusedItem( event ); |
|
483 } else { |
|
484 this._toggle( event ); |
|
485 } |
|
486 break; |
|
487 case $.ui.keyCode.LEFT: |
467 this._move( "prev", event ); |
488 this._move( "prev", event ); |
468 } |
489 break; |
469 break; |
490 case $.ui.keyCode.RIGHT: |
470 case $.ui.keyCode.DOWN: |
|
471 if ( event.altKey ) { |
|
472 this._toggle( event ); |
|
473 } else { |
|
474 this._move( "next", event ); |
491 this._move( "next", event ); |
475 } |
492 break; |
476 break; |
493 case $.ui.keyCode.HOME: |
477 case $.ui.keyCode.SPACE: |
494 case $.ui.keyCode.PAGE_UP: |
478 if ( this.isOpen ) { |
495 this._move( "first", event ); |
479 this._selectFocusedItem( event ); |
496 break; |
480 } else { |
497 case $.ui.keyCode.END: |
481 this._toggle( event ); |
498 case $.ui.keyCode.PAGE_DOWN: |
482 } |
499 this._move( "last", event ); |
483 break; |
500 break; |
484 case $.ui.keyCode.LEFT: |
501 default: |
485 this._move( "prev", event ); |
502 this.menu.trigger( event ); |
486 break; |
503 preventDefault = false; |
487 case $.ui.keyCode.RIGHT: |
|
488 this._move( "next", event ); |
|
489 break; |
|
490 case $.ui.keyCode.HOME: |
|
491 case $.ui.keyCode.PAGE_UP: |
|
492 this._move( "first", event ); |
|
493 break; |
|
494 case $.ui.keyCode.END: |
|
495 case $.ui.keyCode.PAGE_DOWN: |
|
496 this._move( "last", event ); |
|
497 break; |
|
498 default: |
|
499 this.menu.trigger( event ); |
|
500 preventDefault = false; |
|
501 } |
504 } |
502 |
505 |
503 if ( preventDefault ) { |
506 if ( preventDefault ) { |
504 event.preventDefault(); |
507 event.preventDefault(); |
505 } |
508 } |