diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/jquery.ui.core.js | 13 | ||||
-rw-r--r-- | ui/jquery.ui.dialog.js | 2 | ||||
-rw-r--r-- | ui/jquery.ui.effect.js | 220 | ||||
-rw-r--r-- | ui/jquery.ui.menu.js | 84 | ||||
-rw-r--r-- | ui/jquery.ui.sortable.js | 2 | ||||
-rw-r--r-- | ui/jquery.ui.spinner.js | 8 | ||||
-rw-r--r-- | ui/jquery.ui.widget.js | 2 |
7 files changed, 148 insertions, 183 deletions
diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index ad0ab25d7..3e102f181 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -216,9 +216,16 @@ function visible( element ) { } $.extend( $.expr[ ":" ], { - data: function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, + data: $.expr.createPseudo ? + $.expr.createPseudo(function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + }) : + // support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, focusable: function( element ) { return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 818363d0b..85e4b3e2b 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -316,7 +316,7 @@ $.widget("ui.dialog", { return; } - var tabbables = $( ":tabbable", this ), + var tabbables = $( ":tabbable", uiDialog ), first = tabbables.filter( ":first" ), last = tabbables.filter( ":last" ); diff --git a/ui/jquery.ui.effect.js b/ui/jquery.ui.effect.js index da3c70b7c..7cabe5849 100644 --- a/ui/jquery.ui.effect.js +++ b/ui/jquery.ui.effect.js @@ -20,15 +20,15 @@ $.effects = { /*! * jQuery Color Animations - * http://jquery.org/ + * http://jquery.com/ * - * Copyright 2012 John Resig + * Copyright 2012 jQuery Foundation and other contributors * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license */ (function( jQuery, undefined ) { -var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color outlineColor".split(" "), + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor".split(" "), // plusequals test for += 100 -= 100 rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, @@ -47,14 +47,15 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, parse: function( execResult ) { return [ - 2.55 * execResult[1], - 2.55 * execResult[2], - 2.55 * execResult[3], + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, execResult[ 4 ] ]; } }, { - re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, parse: function( execResult ) { return [ parseInt( execResult[ 1 ], 16 ), @@ -63,7 +64,8 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo ]; } }, { - re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/, + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, parse: function( execResult ) { return [ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), @@ -76,10 +78,10 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo space: "hsla", parse: function( execResult ) { return [ - execResult[1], - execResult[2] / 100, - execResult[3] / 100, - execResult[4] + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] ]; } }], @@ -90,47 +92,35 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo }, spaces = { rgba: { - cache: "_rgba", props: { red: { idx: 0, - type: "byte", - empty: true + type: "byte" }, green: { idx: 1, - type: "byte", - empty: true + type: "byte" }, blue: { idx: 2, - type: "byte", - empty: true - }, - alpha: { - idx: 3, - type: "percent", - def: 1 + type: "byte" } } }, + hsla: { - cache: "_hsla", props: { hue: { idx: 0, - type: "degrees", - empty: true + type: "degrees" }, saturation: { idx: 1, - type: "percent", - empty: true + type: "percent" }, lightness: { idx: 2, - type: "percent", - empty: true + type: "percent" } } } @@ -138,11 +128,9 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo propTypes = { "byte": { floor: true, - min: 0, max: 255 }, "percent": { - min: 0, max: 1 }, "degrees": { @@ -152,40 +140,54 @@ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightCo }, support = color.support = {}, + // element for support tests + supportElem = jQuery( "<p>" )[ 0 ], + // colors = jQuery.Color.names colors, // local aliases of functions called often each = jQuery.each; -spaces.hsla.props.alpha = spaces.rgba.props.alpha; +// determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; -function clamp( value, prop, alwaysAllowEmpty ) { - var type = propTypes[ prop.type ] || {}, - allowEmpty = alwaysAllowEmpty || prop.empty; +// define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +}); - if ( allowEmpty && value == null ) { - return null; - } - if ( prop.def && value == null ) { - return prop.def; - } - if ( type.floor ) { - value = ~~value; - } else { - value = parseFloat( value ); +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; + + if ( value == null ) { + return (allowEmpty || !prop.def) ? null : prop.def; } - if ( value == null || isNaN( value ) ) { + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { return prop.def; } + if ( type.mod ) { - value %= type.mod; - // -10 -> 350 - return value < 0 ? type.mod + value : value; + // we add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return (value + type.mod) % type.mod; } // for now all property types without mod have min and max - return type.min > value ? type.min : type.max < value ? type.max : value; + return 0 > value ? 0 : type.max < value ? type.max : value; } function stringParse( string ) { @@ -195,19 +197,17 @@ function stringParse( string ) { string = string.toLowerCase(); each( stringParsers, function( i, parser ) { - var match = parser.re.exec( string ), + var parsed, + match = parser.re.exec( string ), values = match && parser.parse( match ), - parsed, - spaceName = parser.space || "rgba", - cache = spaces[ spaceName ].cache; - + spaceName = parser.space || "rgba"; if ( values ) { parsed = inst[ spaceName ]( values ); // if this was an rgba parse the assignment might happen twice // oh well.... - inst[ cache ] = parsed[ cache ]; + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; rgba = inst._rgba = parsed._rgba; // exit each( stringParsers ) here because we matched @@ -216,11 +216,11 @@ function stringParse( string ) { }); // Found a stringParser that handled it - if ( rgba.length !== 0 ) { + if ( rgba.length ) { // if this came from a parsed string, force "transparent" when alpha is 0 // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) - if ( Math.max.apply( Math, rgba ) === 0 ) { + if ( rgba.join() === "0,0,0,0" ) { jQuery.extend( rgba, colors.transparent ); } return inst; @@ -280,7 +280,7 @@ color.fn = jQuery.extend( color.prototype, { // if the value was null, we don't need to copy it // if the key was alpha, we don't need to copy it either - if ( red[ key ] == null || key === "alpha") { + if ( key === "alpha" || red[ key ] == null ) { return; } inst[ cache ] = space.to( inst._rgba ); @@ -298,13 +298,13 @@ color.fn = jQuery.extend( color.prototype, { is: function( compare ) { var is = color( compare ), same = true, - myself = this; + inst = this; each( spaces, function( _, space ) { - var isCache = is[ space.cache ], - localCache; + var localCache, + isCache = is[ space.cache ]; if (isCache) { - localCache = myself[ space.cache ] || space.to && space.to( myself._rgba ) || []; + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; each( space.props, function( _, prop ) { if ( isCache[ prop.idx ] != null ) { same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); @@ -330,7 +330,8 @@ color.fn = jQuery.extend( color.prototype, { var end = color( other ), spaceName = end._space(), space = spaces[ spaceName ], - start = this[ space.cache ] || space.to( this._rgba ), + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), result = start.slice(); end = end[ space.cache ]; @@ -355,7 +356,7 @@ color.fn = jQuery.extend( color.prototype, { startValue -= type.mod; } } - result[ prop.idx ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); } }); return this[ spaceName ]( result ); @@ -385,7 +386,7 @@ color.fn = jQuery.extend( color.prototype, { prefix = "rgb("; } - return prefix + rgba.join(",") + ")"; + return prefix + rgba.join() + ")"; }, toHslaString: function() { var prefix = "hsla(", @@ -405,7 +406,7 @@ color.fn = jQuery.extend( color.prototype, { hsla.pop(); prefix = "hsl("; } - return prefix + hsla.join(",") + ")"; + return prefix + hsla.join() + ")"; }, toHexString: function( includeAlpha ) { var rgba = this._rgba.slice(), @@ -429,12 +430,12 @@ color.fn = jQuery.extend( color.prototype, { color.fn.parse.prototype = color.fn; // hsla conversions adapted from: -// http://www.google.com/codesearch/p#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/Color.js&d=7&l=193 +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 function hue2rgb( p, q, h ) { h = ( h + 1 ) % 1; if ( h * 6 < 1 ) { - return p + (q - p) * 6 * h; + return p + (q - p) * h * 6; } if ( h * 2 < 1) { return q; @@ -518,10 +519,10 @@ each( spaces, function( spaceName, space ) { return this[ cache ].slice(); } - var type = jQuery.type( value ), + var ret, + type = jQuery.type( value ), arr = ( type === "array" || type === "object" ) ? value : arguments, - local = this[ cache ].slice(), - ret; + local = this[ cache ].slice(); each( props, function( key, prop ) { var val = arr[ type === "object" ? key : prop.idx ]; @@ -548,7 +549,7 @@ each( spaces, function( spaceName, space ) { } color.fn[ key ] = function( value ) { var vtype = jQuery.type( value ), - fn = ( key === 'alpha' ? ( this._hsla ? 'hsla' : 'rgba' ) : spaceName ), + fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ), local = this[ fn ](), cur = local[ prop.idx ], match; @@ -582,13 +583,12 @@ each( stepHooks, function( i, hook ) { set: function( elem, value ) { var parsed, backgroundColor, curElem; - if ( jQuery.type( value ) !== 'string' || ( parsed = stringParse( value ) ) ) - { + if ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) { value = color( parsed || value ); if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { curElem = hook === "backgroundColor" ? elem.parentNode : elem; do { - backgroundColor = jQuery.curCSS( curElem, "backgroundColor" ); + backgroundColor = jQuery.css( curElem, "backgroundColor" ); } while ( ( backgroundColor === "" || backgroundColor === "transparent" ) && ( curElem = curElem.parentNode ) && @@ -619,63 +619,31 @@ each( stepHooks, function( i, hook ) { }; }); -// detect rgba support -jQuery(function() { - var div = document.createElement( "div" ), - div_style = div.style; - - div_style.cssText = "background-color:rgba(1,1,1,.5)"; - support.rgba = div_style.backgroundColor.indexOf( "rgba" ) > -1; -}); - -// Some named colors to work with -// From Interface by Stefan Petre -// http://interface.eyecon.ro/ +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. colors = jQuery.Color.names = { + // 4.1. Basic color keywords aqua: "#00ffff", - azure: "#f0ffff", - beige: "#f5f5dc", black: "#000000", blue: "#0000ff", - brown: "#a52a2a", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgrey: "#a9a9a9", - darkgreen: "#006400", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkviolet: "#9400d3", fuchsia: "#ff00ff", - gold: "#ffd700", + gray: "#808080", green: "#008000", - indigo: "#4b0082", - khaki: "#f0e68c", - lightblue: "#add8e6", - lightcyan: "#e0ffff", - lightgreen: "#90ee90", - lightgrey: "#d3d3d3", - lightpink: "#ffb6c1", - lightyellow: "#ffffe0", lime: "#00ff00", - magenta: "#ff00ff", maroon: "#800000", navy: "#000080", olive: "#808000", - orange: "#ffa500", - pink: "#ffc0cb", purple: "#800080", - violet: "#800080", red: "#ff0000", silver: "#c0c0c0", + teal: "#008080", white: "#ffffff", yellow: "#ffff00", + + // 4.2.3. ‘transparent’ color keyword transparent: [ null, null, null, 0 ], + _default: "#ffffff" }; @@ -893,9 +861,19 @@ $.extend( $.effects, { // Restores a set of previously saved properties from a data storage restore: function( element, set ) { - for( var i=0; i < set.length; i++ ) { + var val, i; + for( i=0; i < set.length; i++ ) { if ( set[ i ] !== null ) { - element.css( set[ i ], element.data( dataSpace + set[ i ] ) ); + val = element.data( dataSpace + set[ i ] ); + // support: jQuery 1.6.2 + // http://bugs.jquery.com/ticket/9917 + // jQuery 1.6.2 incorrectly returns undefined for any falsy value. + // We can't differentiate between "" and 0 here, so we just assume + // empty string since it's likely to be a more common value... + if ( val === undefined ) { + val = ""; + } + element.css( set[ i ], val ); } } }, diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 758676199..75cfac40b 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -15,13 +15,16 @@ */ (function( $, undefined ) { -var currentEventTarget = null; +var mouseHandled = false; $.widget( "ui.menu", { version: "@VERSION", defaultElement: "<ul>", delay: 300, options: { + icons: { + submenu: "ui-icon-carat-1-e" + }, menus: "ul", position: { my: "left top", @@ -70,23 +73,13 @@ $.widget( "ui.menu", { }, "click .ui-menu-item:has(a)": function( event ) { var target = $( event.target ); - if ( target[0] !== currentEventTarget ) { - currentEventTarget = target[0]; - // TODO: What are we trying to accomplish with this check? - // Clicking a menu item twice results in a select event with - // an empty ui.item. - target.one( "click" + this.eventNamespace, function( event ) { - currentEventTarget = null; - }); - // Don't select disabled menu items - if ( !target.closest( ".ui-menu-item" ).is( ".ui-state-disabled" ) ) { - this.select( event ); - // Redirect focus to the menu with a delay for firefox - this._delay(function() { - if ( !this.element.is(":focus") ) { - this.element.focus(); - } - }, 20 ); + if ( !mouseHandled && target.closest( ".ui-menu-item" ).not( ".ui-state-disabled" ).length ) { + mouseHandled = true; + + this.select( event ); + // Redirect focus to the menu + if ( !this.element.is(":focus") ) { + this.element.focus(); } } }, @@ -100,26 +93,10 @@ $.widget( "ui.menu", { mouseleave: "collapseAll", "mouseleave .ui-menu": "collapseAll", focus: function( event ) { - var menuTop, - menu = this.element, - // Default to focusing the first item - item = menu.children( ".ui-menu-item" ).eq( 0 ); - // If there's already an active item, keep it active - if ( this.active ) { - item = this.active; - // If there's no active item and the menu is scrolled, - // then find the first visible item - } else if ( this._hasScroll() ) { - menuTop = menu.offset().top; - menu.children().each(function() { - var currentItem = $( this ); - if ( currentItem.offset().top - menuTop >= 0 ) { - item = currentItem; - return false; - } - }); - } + // If not, activate the first item + var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 ); + this.focus( event, item ); }, blur: function( event ) { @@ -140,6 +117,9 @@ $.widget( "ui.menu", { if ( !$( event.target ).closest( ".ui-menu" ).length ) { this.collapseAll( event ); } + + // Reset the mouseHandled flag + mouseHandled = false; } }); }, @@ -179,13 +159,10 @@ $.widget( "ui.menu", { // Destroy menu dividers this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); - - // Unbind currentEventTarget click event handler - this._off( $( currentEventTarget ), "click" ); }, _keydown: function( event ) { - var match, prev, character, skip, + var match, prev, character, skip, regex, preventDefault = true; function escape( value ) { @@ -240,9 +217,9 @@ $.widget( "ui.menu", { character = prev + character; } + regex = new RegExp( "^" + escape( character ), "i" ); match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { - return new RegExp( "^" + escape( character ), "i" ) - .test( $( this ).children( "a" ).text() ); + return regex.test( $( this ).children( "a" ).text() ); }); match = skip && match.index( this.active.next() ) !== -1 ? this.active.nextAll( ".ui-menu-item" ) : @@ -252,9 +229,9 @@ $.widget( "ui.menu", { // to move down the menu to the first item that starts with that character if ( !match.length ) { character = String.fromCharCode( event.keyCode ); + regex = new RegExp( "^" + escape( character ), "i" ); match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { - return new RegExp( "^" + escape( character ), "i" ) - .test( $( this ).children( "a" ).text() ); + return regex.test( $( this ).children( "a" ).text() ); }); } @@ -291,6 +268,7 @@ $.widget( "ui.menu", { refresh: function() { // Initialize nested menus var menus, + icon = this.options.icons.submenu, submenus = this.element.find( this.options.menus + ":not(.ui-menu)" ) .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) .hide() @@ -303,7 +281,7 @@ $.widget( "ui.menu", { // Don't refresh list items that are already adapted menus = submenus.add( this.element ); - menus.children( ":not( .ui-menu-item ):has( a )" ) + menus.children( ":not(.ui-menu-item):has(a)" ) .addClass( "ui-menu-item" ) .attr( "role", "presentation" ) .children( "a" ) @@ -330,7 +308,7 @@ $.widget( "ui.menu", { var menu = $( this ), item = menu.prev( "a" ), submenuCarat = $( "<span>" ) - .addClass( "ui-menu-icon ui-icon ui-icon-carat-1-e" ) + .addClass( "ui-menu-icon ui-icon " + icon ) .data( "ui-menu-submenu-carat", true ); item @@ -436,10 +414,7 @@ $.widget( "ui.menu", { _open: function( submenu ) { var position = $.extend({ of: this.active - }, $.type( this.options.position ) === "function" ? - this.options.position( this.active ) : - this.options.position - ); + }, this.options.position ); clearTimeout( this.timer ); this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) @@ -495,7 +470,6 @@ $.widget( "ui.menu", { if ( newItem && newItem.length ) { this._close(); this.focus( event, newItem ); - return true; } }, @@ -512,8 +486,7 @@ $.widget( "ui.menu", { // Delay so Firefox will not hide activedescendant change in expanding submenu from AT this._delay(function() { this.focus( event, newItem ); - }, 20 ); - return true; + }); } }, @@ -608,7 +581,8 @@ $.widget( "ui.menu", { select: function( event ) { // Save active reference before collapseAll triggers blur var ui = { - item: this.active + // Selecting a menu item removes the active item causing multiple clicks to be missing an item + item: this.active || $( event.target ).closest( ".ui-menu-item" ) }; this.collapseAll( event, true ); this._trigger( "select", event, ui ); diff --git a/ui/jquery.ui.sortable.js b/ui/jquery.ui.sortable.js index 7e5875200..db24fed38 100644 --- a/ui/jquery.ui.sortable.js +++ b/ui/jquery.ui.sortable.js @@ -1030,6 +1030,8 @@ $.widget("ui.sortable", $.ui.mouse, { for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events this._trigger("stop", event, this._uiHash()); } + + this.fromOutside = false; return false; } diff --git a/ui/jquery.ui.spinner.js b/ui/jquery.ui.spinner.js index 6acb3693e..ead3b17be 100644 --- a/ui/jquery.ui.spinner.js +++ b/ui/jquery.ui.spinner.js @@ -32,6 +32,10 @@ $.widget( "ui.spinner", { widgetEventPrefix: "spin", options: { culture: null, + icons: { + down: "ui-icon-triangle-1-s", + up: "ui-icon-triangle-1-n" + }, incremental: true, max: null, min: null, @@ -244,10 +248,10 @@ $.widget( "ui.spinner", { _buttonHtml: function() { return "" + "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" + - "<span class='ui-icon ui-icon-triangle-1-n'>▲</span>" + + "<span class='ui-icon " + this.options.icons.up + "'>▲</span>" + "</a>" + "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" + - "<span class='ui-icon ui-icon-triangle-1-s'>▼</span>" + + "<span class='ui-icon " + this.options.icons.down + "'>▼</span>" + "</a>"; }, diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 628b63bb0..b5dfaa344 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -36,7 +36,7 @@ $.widget = function( name, base, prototype ) { } // create selector for plugin - $.expr[ ":" ][ fullName ] = function( elem ) { + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { return !!$.data( elem, fullName ); }; |