diff --git a/ui/jquery.ui.selectmenu.js b/ui/jquery.ui.selectmenu.js index 773d49f88fc..5eea5841dd7 100644 --- a/ui/jquery.ui.selectmenu.js +++ b/ui/jquery.ui.selectmenu.js @@ -1,835 +1,829 @@ - /* - * jQuery UI Selectmenu version 1.5.0pre - * - * Copyright (c) 2009-2010 filament group, http://filamentgroup.com - * Copyright (c) 2010-2013 Felix Nagel, http://www.felixnagel.com - * Licensed under the MIT (MIT-LICENSE.txt) - * - * https://github.com/fnagel/jquery-ui/wiki/Selectmenu - */ - -(function( $ ) { - -$.widget("ui.selectmenu", { - options: { - appendTo: "body", - typeAhead: 1000, - style: 'dropdown', - positionOptions: null, - width: null, - menuWidth: null, - handleWidth: 26, - maxHeight: null, - icons: null, - format: null, - escapeHtml: false, - bgImage: function() {} - }, - - _create: function() { - var self = this, o = this.options; - - // make / set unique id - var selectmenuId = this.element.uniqueId().attr( "id" ); - - // quick array of button and menu id's - this.ids = [ selectmenuId, selectmenuId + '-button', selectmenuId + '-menu' ]; - - // define safe mouseup for future toggling - this._safemouseup = true; - this.isOpen = false; - - // create menu button wrapper - this.newelement = $( '', { - 'class': 'ui-selectmenu ui-widget ui-state-default ui-corner-all', - 'id' : this.ids[ 1 ], - 'role': 'button', - 'href': '#nogo', - 'tabindex': this.element.attr( 'disabled' ) ? 1 : 0, - 'aria-haspopup': true, - 'aria-owns': this.ids[ 2 ] - }); - this.newelementWrap = $( "" ) - .append( this.newelement ) - .insertAfter( this.element ); - - // transfer tabindex - var tabindex = this.element.attr( 'tabindex' ); - if ( tabindex ) { - this.newelement.attr( 'tabindex', tabindex ); - } - - // save reference to select in data for ease in calling methods - this.newelement.data( 'selectelement', this.element ); - - // menu icon - this.selectmenuIcon = $( '' ) - .prependTo( this.newelement ); - - // append status span to button - this.newelement.prepend( '' ); - - // make associated form label trigger focus - this.element.bind({ - 'click.selectmenu': function( event ) { - self.newelement.focus(); - event.preventDefault(); - } - }); - - // click toggle for menu visibility - this.newelement - .bind( 'mousedown.selectmenu', function( event ) { - self._toggle( event, true ); - // make sure a click won't open/close instantly - if ( o.style == "popup" ) { - self._safemouseup = false; - setTimeout( function() { self._safemouseup = true; }, 300 ); - } - - event.preventDefault(); - }) - .bind( 'click.selectmenu', function( event ) { - event.preventDefault(); - }) - .bind( "keydown.selectmenu", function( event ) { - var ret = false; - switch ( event.keyCode ) { - case $.ui.keyCode.ENTER: - ret = true; - break; - case $.ui.keyCode.SPACE: - self._toggle( event ); - break; - case $.ui.keyCode.UP: - if ( event.altKey ) { - self.open( event ); - } else { - self._moveSelection( -1 ); - } - break; - case $.ui.keyCode.DOWN: - if ( event.altKey ) { - self.open( event ); - } else { - self._moveSelection( 1 ); - } - break; - case $.ui.keyCode.LEFT: - self._moveSelection( -1 ); - break; - case $.ui.keyCode.RIGHT: - self._moveSelection( 1 ); - break; - case $.ui.keyCode.TAB: - ret = true; - break; - case $.ui.keyCode.PAGE_UP: - case $.ui.keyCode.HOME: - self.index( 0 ); - break; - case $.ui.keyCode.PAGE_DOWN: - case $.ui.keyCode.END: - self.index( self._optionLis.length ); - break; - default: - ret = true; - } - return ret; - }) - .bind( 'keypress.selectmenu', function( event ) { - if ( event.which > 0 ) { - self._typeAhead( event.which, 'mouseup' ); - } - return true; - }) - .bind( 'mouseover.selectmenu', function() { - if ( !o.disabled ) $( this ).addClass( 'ui-state-hover' ); - }) - .bind( 'mouseout.selectmenu', function() { - if ( !o.disabled ) $( this ).removeClass( 'ui-state-hover' ); - }) - .bind( 'focus.selectmenu', function() { - if ( !o.disabled ) $( this ).addClass( 'ui-state-focus' ); - }) - .bind( 'blur.selectmenu', function() { - if (!o.disabled) $( this ).removeClass( 'ui-state-focus' ); - }); - - // document click closes menu - $( document ).bind( "mousedown.selectmenu-" + this.ids[ 0 ], function( event ) { - //check if open and if the clicket targes parent is the same - if ( self.isOpen && !$( event.target ).closest( "#" + self.ids[ 1 ] ).length ) { - self.close( event ); - } - }); - - // change event on original selectmenu - this.element - .bind( "click.selectmenu", function() { - self._refreshValue(); - }) - // FIXME: newelement can be null under unclear circumstances in IE8 - // TODO not sure if this is still a problem (fnagel 20.03.11) - .bind( "focus.selectmenu", function() { - if ( self.newelement ) { - self.newelement[ 0 ].focus(); - } - }); - - // set width when not set via options - if ( !o.width ) { - o.width = this.element.outerWidth(); - } - // set menu button width - this.newelement.width( o.width ); - - // hide original selectmenu element - this.element.hide(); - - // create menu portion, append to body - this.list = $( '