wp/wp-includes/js/jquery/ui/selectmenu.js
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
equal deleted inserted replaced
20:7b1b88e27a20 21:48c4eec2b7e6
     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 ) {
    25 
    25 
    26 		// AMD. Register as an anonymous module.
    26 		// AMD. Register as an anonymous module.
    27 		define( [
    27 		define( [
    28 			"jquery",
    28 			"jquery",
    29 			"./menu",
    29 			"./menu",
    30 			"./core"
    30 			"../form-reset-mixin",
       
    31 			"../keycode",
       
    32 			"../labels",
       
    33 			"../position",
       
    34 			"../unique-id",
       
    35 			"../version",
       
    36 			"../widget"
    31 		], factory );
    37 		], factory );
    32 	} else {
    38 	} else {
    33 
    39 
    34 		// Browser globals
    40 		// Browser globals
    35 		factory( jQuery );
    41 		factory( jQuery );
    36 	}
    42 	}
    37 } )( function( $ ) {
    43 } )( function( $ ) {
    38 "use strict";
    44 "use strict";
    39 
    45 
    40 return $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
    46 return $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
    41 	version: "1.13.1",
    47 	version: "1.13.3",
    42 	defaultElement: "<select>",
    48 	defaultElement: "<select>",
    43 	options: {
    49 	options: {
    44 		appendTo: null,
    50 		appendTo: null,
    45 		classes: {
    51 		classes: {
    46 			"ui-selectmenu-button-open": "ui-corner-top",
    52 			"ui-selectmenu-button-open": "ui-corner-top",
   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 ) {
   437 				selection = window.getSelection();
   448 				selection = window.getSelection();
   438 				if ( selection.rangeCount ) {
   449 				if ( selection.rangeCount ) {
   439 					this.range = selection.getRangeAt( 0 );
   450 					this.range = selection.getRangeAt( 0 );
   440 				}
   451 				}
   441 
   452 
   442 				// Support: IE8
   453 			// Support: IE8
   443 			} else {
   454 			} else {
   444 				this.range = document.selection.createRange();
   455 				this.range = document.selection.createRange();
   445 			}
   456 			}
   446 		},
   457 		},
   447 
   458 
   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 			}
   650 
   661 
   651 	_parseOptions: function( options ) {
   662 	_parseOptions: function( options ) {
   652 		var that = this,
   663 		var that = this,
   653 			data = [];
   664 			data = [];
   654 		options.each( function( index, item ) {
   665 		options.each( function( index, item ) {
   655 			if ( item.hidden ) {
       
   656 				return;
       
   657 			}
       
   658 
       
   659 			data.push( that._parseOption( $( item ), index ) );
   666 			data.push( that._parseOption( $( item ), index ) );
   660 		} );
   667 		} );
   661 		this.items = data;
   668 		this.items = data;
   662 	},
   669 	},
   663 
   670 
   667 		return {
   674 		return {
   668 			element: option,
   675 			element: option,
   669 			index: index,
   676 			index: index,
   670 			value: option.val(),
   677 			value: option.val(),
   671 			label: option.text(),
   678 			label: option.text(),
       
   679 			hidden: optgroup.prop( "hidden" ) || option.prop( "hidden" ),
   672 			optgroup: optgroup.attr( "label" ) || "",
   680 			optgroup: optgroup.attr( "label" ) || "",
   673 			disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
   681 			disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
   674 		};
   682 		};
   675 	},
   683 	},
   676 
   684