1/*! 2 * jQuery UI Effects 1.8.24 3 * 4 * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 * Dual licensed under the MIT or GPL Version 2 licenses. 6 * http://jquery.org/license 7 * 8 * http://docs.jquery.com/UI/Effects/ 9 */ 10;jQuery.effects || (function($, undefined) { 11 12$.effects = {}; 13 14 15 16/******************************************************************************/ 17/****************************** COLOR ANIMATIONS ******************************/ 18/******************************************************************************/ 19 20// override the animation for color styles 21$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 22 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], 23function(i, attr) { 24 $.fx.step[attr] = function(fx) { 25 if (!fx.colorInit) { 26 fx.start = getColor(fx.elem, attr); 27 fx.end = getRGB(fx.end); 28 fx.colorInit = true; 29 } 30 31 fx.elem.style[attr] = 'rgb(' + 32 Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + 33 Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + 34 Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; 35 }; 36}); 37 38// Color Conversion functions from highlightFade 39// By Blair Mitchelmore 40// http://jquery.offput.ca/highlightFade/ 41 42// Parse strings looking for color tuples [255,255,255] 43function getRGB(color) { 44 var result; 45 46 // Check if we're already dealing with an array of colors 47 if ( color && color.constructor == Array && color.length == 3 ) 48 return color; 49 50 // Look for rgb(num,num,num) 51 if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) 52 return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; 53 54 // Look for rgb(num%,num%,num%) 55 if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) 56 return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; 57 58 // Look for #a0b1c2 59 if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) 60 return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; 61 62 // Look for #fff 63 if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) 64 return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; 65 66 // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 67 if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) 68 return colors['transparent']; 69 70 // Otherwise, we're most likely dealing with a named color 71 return colors[$.trim(color).toLowerCase()]; 72} 73 74function getColor(elem, attr) { 75 var color; 76 77 do { 78 // jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css 79 color = ($.curCSS || $.css)(elem, attr); 80 81 // Keep going until we find an element that has color, or we hit the body 82 if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) 83 break; 84 85 attr = "backgroundColor"; 86 } while ( elem = elem.parentNode ); 87 88 return getRGB(color); 89}; 90 91// Some named colors to work with 92// From Interface by Stefan Petre 93// http://interface.eyecon.ro/ 94 95var colors = { 96 aqua:[0,255,255], 97 azure:[240,255,255], 98 beige:[245,245,220], 99 black:[0,0,0], 100 blue:[0,0,255], 101 brown:[165,42,42], 102 cyan:[0,255,255], 103 darkblue:[0,0,139], 104 darkcyan:[0,139,139], 105 darkgrey:[169,169,169], 106 darkgreen:[0,100,0], 107 darkkhaki:[189,183,107], 108 darkmagenta:[139,0,139], 109 darkolivegreen:[85,107,47], 110 darkorange:[255,140,0], 111 darkorchid:[153,50,204], 112 darkred:[139,0,0], 113 darksalmon:[233,150,122], 114 darkviolet:[148,0,211], 115 fuchsia:[255,0,255], 116 gold:[255,215,0], 117 green:[0,128,0], 118 indigo:[75,0,130], 119 khaki:[240,230,140], 120 lightblue:[173,216,230], 121 lightcyan:[224,255,255], 122 lightgreen:[144,238,144], 123 lightgrey:[211,211,211], 124 lightpink:[255,182,193], 125 lightyellow:[255,255,224], 126 lime:[0,255,0], 127 magenta:[255,0,255], 128 maroon:[128,0,0], 129 navy:[0,0,128], 130 olive:[128,128,0], 131 orange:[255,165,0], 132 pink:[255,192,203], 133 purple:[128,0,128], 134 violet:[128,0,128], 135 red:[255,0,0], 136 silver:[192,192,192], 137 white:[255,255,255], 138 yellow:[255,255,0],
139 transparent: [255,255,255] 140}; 141 142 143 144/******************************************************************************/ 145/****************************** CLASS ANIMATIONS ******************************/ 146/******************************************************************************/ 147 148var classAnimationActions = ['add', 'remove', 'toggle'], 149 shorthandStyles = { 150 border: 1, 151 borderBottom: 1, 152 borderColor: 1, 153 borderLeft: 1, 154 borderRight: 1, 155 borderTop: 1, 156 borderWidth: 1, 157 margin: 1, 158 padding: 1 159 }; 160 161function getElementStyles() { 162 var style = document.defaultView 163 ? document.defaultView.getComputedStyle(this, null) 164 : this.currentStyle, 165 newStyle = {}, 166 key, 167 camelCase; 168 169 // webkit enumerates style porperties 170 if (style && style.length && style[0] && style[style[0]]) { 171 var len = style.length; 172 while (len--) { 173 key = style[len]; 174 if (typeof style[key] == 'string') { 175 camelCase = key.replace(/\-(\w)/g, function(all, letter){ 176 return letter.toUpperCase(); 177 }); 178 newStyle[camelCase] = style[key]; 179 } 180 } 181 } else { 182 for (key in style) { 183 if (typeof style[key] === 'string') { 184 newStyle[key] = style[key]; 185 } 186 } 187 } 188 189 return newStyle; 190} 191 192function filterStyles(styles) { 193 var name, value; 194 for (name in styles) { 195 value = styles[name]; 196 if ( 197 // ignore null and undefined values 198 value == null || 199 // ignore functions (when does this occur?) 200 $.isFunction(value) || 201 // shorthand styles that need to be expanded 202 name in shorthandStyles || 203 // ignore scrollbars (break in IE) 204 (/scrollbar/).test(name) || 205 206 // only colors or values that can be converted to numbers 207 (!(/color/i).test(name) && isNaN(parseFloat(value))) 208 ) { 209 delete styles[name]; 210 } 211 } 212 213 return styles; 214} 215 216function styleDifference(oldStyle, newStyle) { 217 var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 218 name; 219 220 for (name in newStyle) { 221 if (oldStyle[name] != newStyle[name]) { 222 diff[name] = newStyle[name]; 223 } 224 } 225 226 return diff; 227} 228 229$.effects.animateClass = function(value, duration, easing, callback) { 230 if ($.isFunction(easing)) { 231 callback = easing; 232 easing = null; 233 } 234 235 return this.queue(function() { 236 var that = $(this), 237 originalStyleAttr = that.attr('style') || ' ', 238 originalStyle = filterStyles(getElementStyles.call(this)), 239 newStyle, 240 className = that.attr('class') || ""; 241 242 $.each(classAnimationActions, function(i, action) { 243 if (value[action]) { 244 that[action + 'Class'](value[action]); 245 } 246 }); 247 newStyle = filterStyles(getElementStyles.call(this)); 248 that.attr('class', className); 249 250 that.animate(styleDifference(originalStyle, newStyle), { 251 queue: false, 252 duration: duration, 253 easing: easing, 254 complete: function() { 255 $.each(classAnimationActions, function(i, action) { 256 if (value[action]) { that[action + 'Class'](value[action]); } 257 }); 258 // work around bug in IE by clearing the cssText before setting it 259 if (typeof that.attr('style') == 'object') { 260 that.attr('style').cssText = ''; 261 that.attr('style').cssText = originalStyleAttr; 262 } else { 263 that.attr('style', originalStyleAttr); 264 } 265 if (callback) { callback.apply(this, arguments); } 266 $.dequeue( this ); 267 } 268 }); 269 }); 270}; 271 272$.fn.extend({ 273 _addClass: $.fn.addClass, 274 addClass: function(classNames, speed, easing, callback) { 275 return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); 276 }, 277 278 _removeClass: $.fn.removeClass, 279 removeClass: function(classNames,speed,easing,callback) { 280 return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); 281 }, 282 283 _toggleClass: $.fn.toggleClass, 284 toggleClass: function(classNames, force, speed, easing, callback) { 285 if ( typeof force == "boolean" || force === undefined ) { 286 if ( !speed ) { 287 // without speed parameter; 288 return this._toggleClass(classNames, force); 289 } else { 290 return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); 291 } 292 } else { 293 // without switch parameter; 294 return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); 295 } 296 }, 297 298 switchClass: function(remove,add,speed,easing,callback) { 299 return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); 300 } 301}); 302 303 304 305/******************************************************************************/ 306/*********************************** EFFECTS **********************************/ 307/******************************************************************************/ 308 309$.extend($.effects, { 310 version: "1.8.24", 311 312 // Saves a set of properties in a data storage 313 save: function(element, set) { 314 for(var i=0; i < set.length; i++) { 315 if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); 316 } 317 }, 318 319 // Restores a set of previously saved properties from a data storage 320 restore: function(element, set) { 321 for(var i=0; i < set.length; i++) { 322 if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); 323 } 324 }, 325 326 setMode: function(el, mode) { 327 if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle 328 return mode; 329 }, 330 331 getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value 332 // this should be a little more flexible in the future to handle a string & hash 333 var y, x; 334 switch (origin[0]) { 335 case 'top': y = 0; break; 336 case 'middle': y = 0.5; break; 337 case 'bottom': y = 1; break; 338 default: y = origin[0] / original.height; 339 }; 340 switch (origin[1]) { 341 case 'left': x = 0; break; 342 case 'center': x = 0.5; break; 343 case 'right': x = 1; break; 344 default: x = origin[1] / original.width; 345 }; 346 return {x: x, y: y}; 347 }, 348
349 // Wraps the element around a wrapper that copies position properties 350 createWrapper: function(element) { 351 352 // if the element is already wrapped, return it 353 if (element.parent().is('.ui-effects-wrapper')) { 354 return element.parent(); 355 } 356 357 // wrap the element 358 var props = { 359 width: element.outerWidth(true), 360 height: element.outerHeight(true), 361 'float': element.css('float') 362 }, 363 wrapper = $('<div></div>') 364 .addClass('ui-effects-wrapper') 365 .css({ 366 fontSize: '100%', 367 background: 'transparent', 368 border: 'none', 369 margin: 0, 370 padding: 0 371 }), 372 active = document.activeElement; 373 374 // support: Firefox 375 // Firefox incorrectly exposes anonymous content 376 // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 377 try { 378 active.id; 379 } catch( e ) { 380 active = document.body; 381 } 382 383 element.wrap( wrapper ); 384 385 // Fixes #7595 - Elements lose focus when wrapped. 386 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 387 $( active ).focus(); 388 } 389 390 wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element 391 392 // transfer positioning properties to the wrapper 393 if (element.css('position') == 'static') { 394 wrapper.css({ position: 'relative' }); 395 element.css({ position: 'relative' }); 396 } else { 397 $.extend(props, { 398 position: element.css('position'), 399 zIndex: element.css('z-index') 400 }); 401 $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { 402 props[pos] = element.css(pos); 403 if (isNaN(parseInt(props[pos], 10))) { 404 props[pos] = 'auto'; 405 } 406 }); 407 element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); 408 } 409 410 return wrapper.css(props).show(); 411 }, 412 413 removeWrapper: function(element) { 414 var parent, 415 active = document.activeElement; 416 417 if (element.parent().is('.ui-effects-wrapper')) { 418 parent = element.parent().replaceWith(element); 419 // Fixes #7595 - Elements lose focus when wrapped. 420 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 421 $( active ).focus(); 422 } 423 return parent; 424 } 425 426 return element; 427 }, 428 429 setTransition: function(element, list, factor, value) { 430 value = value || {}; 431 $.each(list, function(i, x){ 432 var unit = element.cssUnit(x); 433 if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; 434 }); 435 return value; 436 } 437}); 438 439 440function _normalizeArguments(effect, options, speed, callback) { 441 // shift params for method overloading 442 if (typeof effect == 'object') { 443 callback = options; 444 speed = null; 445 options = effect; 446 effect = options.effect; 447 } 448 if ($.isFunction(options)) { 449 callback = options; 450 speed = null; 451 options = {}; 452 } 453 if (typeof options == 'number' || $.fx.speeds[options]) { 454 callback = speed; 455 speed = options; 456 options = {}; 457 } 458 if ($.isFunction(speed)) { 459 callback = speed; 460 speed = null; 461 } 462 463 options = options || {}; 464 465 speed = speed || options.duration; 466 speed = $.fx.off ? 0 : typeof speed == 'number' 467 ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; 468 469 callback = callback || options.complete; 470 471 return [effect, options, speed, callback]; 472} 473 474function standardSpeed( speed ) { 475 // valid standard speeds 476 if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { 477 return true; 478 } 479 480 // invalid strings - treat as "normal" speed 481 if ( typeof speed === "string" && !$.effects[ speed ] ) { 482 return true; 483 } 484 485 return false; 486} 487 488$.fn.extend({ 489 effect: function(effect, options, speed, callback) { 490 var args = _normalizeArguments.apply(this, arguments), 491 // TODO: make effects take actual parameters instead of a hash 492 args2 = { 493 options: args[1], 494 duration: args[2], 495 callback: args[3] 496 }, 497 mode = args2.options.mode, 498 effectMethod = $.effects[effect]; 499 500 if ( $.fx.off || !effectMethod ) { 501 // delegate to the original method (e.g., .show()) if possible 502 if ( mode ) { 503 return this[ mode ]( args2.duration, args2.callback ); 504 } else { 505 return this.each(function() { 506 if ( args2.callback ) { 507 args2.callback.call( this ); 508 } 509 }); 510 } 511 } 512 513 return effectMethod.call(this, args2); 514 }, 515 516 _show: $.fn.show, 517 show: function(speed) { 518 if ( standardSpeed( speed ) ) { 519 return this._show.apply(this, arguments); 520 } else { 521 var args = _normalizeArguments.apply(this, arguments); 522 args[1].mode = 'show'; 523 return this.effect.apply(this, args); 524 } 525 }, 526 527 _hide: $.fn.hide, 528 hide: function(speed) { 529 if ( standardSpeed( speed ) ) { 530 return this._hide.apply(this, arguments); 531 } else { 532 var args = _normalizeArguments.apply(this, arguments); 533 args[1].mode = 'hide'; 534 return this.effect.apply(this, args); 535 } 536 }, 537 538 // jQuery core overloads toggle and creates _toggle 539 __toggle: $.fn.toggle, 540 toggle: function(speed) { 541 if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { 542 return this.__toggle.apply(this, arguments); 543 } else { 544 var args = _normalizeArguments.apply(this, arguments); 545 args[1].mode = 'toggle'; 546 return this.effect.apply(this, args); 547 } 548 }, 549 550 // helper functions 551 cssUnit: function(key) { 552 var style = this.css(key), val = []; 553 $.each( ['em','px','%','pt'], function(i, unit){ 554 if(style.indexOf(unit) > 0) 555 val = [parseFloat(style), unit]; 556 }); 557 return val; 558 } 559}); 560 561 562 563/******************************************************************************/ 564/*********************************** EASING ***********************************/ 565/******************************************************************************/ 566 567// based on easing equations from Robert Penner (http://www.robertpenner.com/easing) 568 569var baseEasings = {}; 570 571$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { 572 baseEasings[ name ] = function( p ) { 573 return Math.pow( p, i + 2 ); 574 }; 575}); 576 577$.extend( baseEasings, { 578 Sine: function ( p ) { 579 return 1 - Math.cos( p * Math.PI / 2 ); 580 }, 581 Circ: function ( p ) { 582 return 1 - Math.sqrt( 1 - p * p ); 583 }, 584 Elastic: function( p ) { 585 return p === 0 || p === 1 ? p : 586 -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 ); 587 }, 588 Back: function( p ) { 589 return p * p * ( 3 * p - 2 ); 590 }, 591 Bounce: function ( p ) { 592 var pow2, 593 bounce = 4; 594 595 while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} 596 return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); 597 } 598}); 599 600$.each( baseEasings, function( name, easeIn ) {
601 $.easing[ "easeIn" + name ] = easeIn; 602 $.easing[ "easeOut" + name ] = function( p ) { 603 return 1 - easeIn( 1 - p ); 604 }; 605 $.easing[ "easeInOut" + name ] = function( p ) { 606 return p < .5 ? 607 easeIn( p * 2 ) / 2 : 608 easeIn( p * -2 + 2 ) / -2 + 1; 609 }; 610}); 611 612})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.