1 /*! |
1 /*! |
2 * jQuery UI Selectmenu 1.13.1 |
2 * jQuery UI Selectmenu 1.13.3 |
3 * http://jqueryui.com |
3 * https://jqueryui.com |
4 * |
4 * |
5 * Copyright jQuery Foundation and other contributors |
5 * Copyright OpenJS Foundation and other contributors |
6 * Released under the MIT license. |
6 * Released under the MIT license. |
7 * http://jquery.org/license |
7 * https://jquery.org/license |
8 */ |
8 */ |
9 |
9 |
10 //>>label: Selectmenu |
10 //>>label: Selectmenu |
11 //>>group: Widgets |
11 //>>group: Widgets |
12 /* eslint-disable max-len */ |
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 /* eslint-enable max-len */ |
14 /* eslint-enable max-len */ |
15 //>>docs: http://api.jqueryui.com/selectmenu/ |
15 //>>docs: https://api.jqueryui.com/selectmenu/ |
16 //>>demos: http://jqueryui.com/selectmenu/ |
16 //>>demos: https://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 ) { |
225 this._renderMenu( this.menu, this.items ); |
231 this._renderMenu( this.menu, this.items ); |
226 |
232 |
227 this.menuInstance.refresh(); |
233 this.menuInstance.refresh(); |
228 this.menuItems = this.menu.find( "li" ) |
234 this.menuItems = this.menu.find( "li" ) |
229 .not( ".ui-selectmenu-optgroup" ) |
235 .not( ".ui-selectmenu-optgroup" ) |
230 .find( ".ui-menu-item-wrapper" ); |
236 .find( ".ui-menu-item-wrapper" ); |
231 |
237 |
232 this._rendered = true; |
238 this._rendered = true; |
233 |
239 |
234 if ( !options.length ) { |
240 if ( !options.length ) { |
235 return; |
241 return; |
346 } ); |
352 } ); |
347 |
353 |
348 if ( item.disabled ) { |
354 if ( item.disabled ) { |
349 this._addClass( li, null, "ui-state-disabled" ); |
355 this._addClass( li, null, "ui-state-disabled" ); |
350 } |
356 } |
351 this._setText( wrapper, item.label ); |
357 |
|
358 if ( item.hidden ) { |
|
359 li.prop( "hidden", true ); |
|
360 } else { |
|
361 this._setText( wrapper, item.label ); |
|
362 } |
352 |
363 |
353 return li.append( wrapper ).appendTo( ul ); |
364 return li.append( wrapper ).appendTo( ul ); |
354 }, |
365 }, |
355 |
366 |
356 _setText: function( element, value ) { |
367 _setText: function( element, value ) { |
401 if ( window.getSelection ) { |
412 if ( window.getSelection ) { |
402 selection = window.getSelection(); |
413 selection = window.getSelection(); |
403 selection.removeAllRanges(); |
414 selection.removeAllRanges(); |
404 selection.addRange( this.range ); |
415 selection.addRange( this.range ); |
405 |
416 |
406 // Support: IE8 |
417 // Support: IE8 |
407 } else { |
418 } else { |
408 this.range.select(); |
419 this.range.select(); |
409 } |
420 } |
410 |
421 |
411 // Support: IE |
422 // Support: IE |
412 // Setting the text selection kills the button focus in IE, but |
423 // Setting the text selection kills the button focus in IE, but |
413 // restoring the focus doesn't kill the selection. |
424 // restoring the focus doesn't kill the selection. |
414 this.button.focus(); |
425 this.button.trigger( "focus" ); |
415 }, |
426 }, |
416 |
427 |
417 _documentClick: { |
428 _documentClick: { |
418 mousedown: function( event ) { |
429 mousedown: function( event ) { |
419 if ( !this.isOpen ) { |
430 if ( !this.isOpen ) { |
451 }, |
462 }, |
452 |
463 |
453 keydown: function( event ) { |
464 keydown: function( event ) { |
454 var preventDefault = true; |
465 var preventDefault = true; |
455 switch ( event.keyCode ) { |
466 switch ( event.keyCode ) { |
456 case $.ui.keyCode.TAB: |
467 case $.ui.keyCode.TAB: |
457 case $.ui.keyCode.ESCAPE: |
468 case $.ui.keyCode.ESCAPE: |
458 this.close( event ); |
469 this.close( event ); |
459 preventDefault = false; |
470 preventDefault = false; |
460 break; |
471 break; |
461 case $.ui.keyCode.ENTER: |
472 case $.ui.keyCode.ENTER: |
462 if ( this.isOpen ) { |
473 if ( this.isOpen ) { |
463 this._selectFocusedItem( event ); |
474 this._selectFocusedItem( event ); |
464 } |
475 } |
465 break; |
476 break; |
466 case $.ui.keyCode.UP: |
477 case $.ui.keyCode.UP: |
467 if ( event.altKey ) { |
478 if ( event.altKey ) { |
468 this._toggle( event ); |
479 this._toggle( event ); |
469 } else { |
480 } 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: |
|
488 this._move( "prev", event ); |
481 this._move( "prev", event ); |
489 break; |
482 } |
490 case $.ui.keyCode.RIGHT: |
483 break; |
|
484 case $.ui.keyCode.DOWN: |
|
485 if ( event.altKey ) { |
|
486 this._toggle( event ); |
|
487 } else { |
491 this._move( "next", event ); |
488 this._move( "next", event ); |
492 break; |
489 } |
493 case $.ui.keyCode.HOME: |
490 break; |
494 case $.ui.keyCode.PAGE_UP: |
491 case $.ui.keyCode.SPACE: |
495 this._move( "first", event ); |
492 if ( this.isOpen ) { |
496 break; |
493 this._selectFocusedItem( event ); |
497 case $.ui.keyCode.END: |
494 } else { |
498 case $.ui.keyCode.PAGE_DOWN: |
495 this._toggle( event ); |
499 this._move( "last", event ); |
496 } |
500 break; |
497 break; |
501 default: |
498 case $.ui.keyCode.LEFT: |
502 this.menu.trigger( event ); |
499 this._move( "prev", event ); |
503 preventDefault = false; |
500 break; |
|
501 case $.ui.keyCode.RIGHT: |
|
502 this._move( "next", event ); |
|
503 break; |
|
504 case $.ui.keyCode.HOME: |
|
505 case $.ui.keyCode.PAGE_UP: |
|
506 this._move( "first", event ); |
|
507 break; |
|
508 case $.ui.keyCode.END: |
|
509 case $.ui.keyCode.PAGE_DOWN: |
|
510 this._move( "last", event ); |
|
511 break; |
|
512 default: |
|
513 this.menu.trigger( event ); |
|
514 preventDefault = false; |
504 } |
515 } |
505 |
516 |
506 if ( preventDefault ) { |
517 if ( preventDefault ) { |
507 event.preventDefault(); |
518 event.preventDefault(); |
508 } |
519 } |