ne
1 /*!
2 * jQuery UI Effects Fold @VERSION
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/Fold
9 *
10 * Depends:
11 * jquery.effects.core.js
12 */
13 (function( $, undefined ) {
14
15 $.effects.fold = function(o) {
16
17 return this.queue(function() {
18
19 // Create element
20 var el = $(this), props = ['position','top','bottom','left','right'];
21
22 // Set options
23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
24 var size = o.options.size || 15; // Default fold size
25 var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
26 var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
27
28 // Adjust
29 $.effects.save(el, props); el.show(); // Save & Show
30 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
31 var widthFirst = ((mode == 'show') != horizFirst);
32 var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
33 var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
34 var percent = /([0-9]+)%/.exec(size);
35 if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
36 if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
37
38 // Animation
39 var animation1 = {}, animation2 = {};
40 animation1[ref[0]] = mode == 'show' ? distance[0] : size;
41 animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
42
43 // Animate
44 wrapper.animate(animation1, duration, o.options.easing)
45 .animate(animation2, duration, o.options.easing, function() {
46 if(mode == 'hide') el.hide(); // Hide
47 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
48 if(o.callback) o.callback.apply(el[0], arguments); // Callback
49 el.dequeue();
50 });
51
52 });
53
54 };
55
56 })(jQuery);
Category: WP开放源码
-

WordPress源代码——jquery-ui(1.8.20——jquery.effects.fold.js)
-

WordPress源代码——jquery-ui(1.8.20——jquery.effects.fade.js)
1 /*! 2 * jQuery UI Effects Fade @VERSION 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/Fade 9 * 10 * Depends: 11 * jquery.effects.core.js 12 */ 13 (function( $, undefined ) { 14 15 $.effects.fade = function(o) { 16 return this.queue(function() { 17 var elem = $(this), 18 mode = $.effects.setMode(elem, o.options.mode || 'hide'); 19 20 elem.animate({ opacity: mode }, { 21 queue: false, 22 duration: o.duration, 23 easing: o.options.easing, 24 complete: function() { 25 (o.callback && o.callback.apply(this, arguments)); 26 elem.dequeue(); 27 } 28 }); 29 }); 30 }; 31 32 })(jQuery); -

WordPress源代码——jquery-ui(1.8.20——jquery.effects.explode.js)
1 /*! 2 * jQuery UI Effects Explode @VERSION 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/Explode 9 * 10 * Depends: 11 * jquery.effects.core.js 12 */ 13 (function( $, undefined ) { 14 15 $.effects.explode = function(o) { 16 17 return this.queue(function() { 18 19 var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; 20 var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; 21 22 o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; 23 var el = $(this).show().css('visibility', 'hidden'); 24 var offset = el.offset(); 25 26 //Substract the margins - not fixing the problem yet. 27 offset.top -= parseInt(el.css("marginTop"),10) || 0; 28 offset.left -= parseInt(el.css("marginLeft"),10) || 0; 29 30 var width = el.outerWidth(true); 31 var height = el.outerHeight(true); 32 33 for(var i=0;i<rows;i++) { // = 34 for(var j=0;j<cells;j++) { // || 35 el 36 .clone() 37 .appendTo('body') 38 .wrap('<div></div>') 39 .css({ 40 position: 'absolute', 41 visibility: 'visible', 42 left: -j*(width/cells), 43 top: -i*(height/rows) 44 }) 45 .parent() 46 .addClass('ui-effects-explode') 47 .css({ 48 position: 'absolute', 49 overflow: 'hidden', 50 width: width/cells, 51 height: height/rows, 52 left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), 53 top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), 54 opacity: o.options.mode == 'show' ? 0 : 1 55 }).animate({ 56 left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), 57 top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), 58 opacity: o.options.mode == 'show' ? 1 : 0 59 }, o.duration || 500); 60 } 61 } 62 63 // Set a timeout, to call the callback approx. when the other animations have finished 64 setTimeout(function() { 65 66 o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); 67 if(o.callback) o.callback.apply(el[0]); // Callback 68 el.dequeue(); 69 70 $('div.ui-effects-explode').remove(); 71 72 }, o.duration || 500); 73 74 75 }); 76 77 }; 78 79 })(jQuery); -

WordPress源代码——jquery-ui(1.8.20——jquery.effects.drop.js)
1 /*! 2 * jQuery UI Effects Drop @VERSION 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/Drop 9 * 10 * Depends: 11 * jquery.effects.core.js 12 */ 13 (function( $, undefined ) { 14 15 $.effects.drop = function(o) { 16 17 return this.queue(function() { 18 19 // Create element 20 var el = $(this), props = ['position','top','bottom','left','right','opacity']; 21 22 // Set options 23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode 24 var direction = o.options.direction || 'left'; // Default Direction 25 26 // Adjust 27 $.effects.save(el, props); el.show(); // Save & Show 28 $.effects.createWrapper(el); // Create Wrapper 29 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; 30 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; 31 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); 32 if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift 33 34 // Animation 35 var animation = {opacity: mode == 'show' ? 1 : 0}; 36 animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; 37 38 // Animate 39 el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { 40 if(mode == 'hide') el.hide(); // Hide 41 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore 42 if(o.callback) o.callback.apply(this, arguments); // Callback 43 el.dequeue(); 44 }}); 45 46 }); 47 48 }; 49 50 })(jQuery); -

WordPress源代码——jquery-ui(1.8.20——jquery.effects.core.js)
1 /*! 2 * jQuery UI Effects @VERSION 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'], 23 function(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] 43 function 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 74 function getColor(elem, attr) { 75 var color; 76 77 do { 78 color = $.curCSS(elem, attr); 79 80 // Keep going until we find an element that has color, or we hit the body 81 if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) 82 break; 83 84 attr = "backgroundColor"; 85 } while ( elem = elem.parentNode ); 86 87 return getRGB(color); 88 }; 89 90 // Some named colors to work with 91 // From Interface by Stefan Petre 92 // http://interface.eyecon.ro/ 93 94 var colors = { 95 aqua:[0,255,255], 96 azure:[240,255,255], 97 beige:[245,245,220], 98 black:[0,0,0], 99 blue:[0,0,255], 100 brown:[165,42,42], 101 cyan:[0,255,255], 102 darkblue:[0,0,139], 103 darkcyan:[0,139,139], 104 darkgrey:[169,169,169], 105 darkgreen:[0,100,0], 106 darkkhaki:[189,183,107], 107 darkmagenta:[139,0,139], 108 darkolivegreen:[85,107,47], 109 darkorange:[255,140,0], 110 darkorchid:[153,50,204], 111 darkred:[139,0,0], 112 darksalmon:[233,150,122], 113 darkviolet:[148,0,211], 114 fuchsia:[255,0,255], 115 gold:[255,215,0], 116 green:[0,128,0], 117 indigo:[75,0,130], 118 khaki:[240,230,140], 119 lightblue:[173,216,230], 120 lightcyan:[224,255,255], 121 lightgreen:[144,238,144], 122 lightgrey:[211,211,211], 123 lightpink:[255,182,193], 124 lightyellow:[255,255,224], 125 lime:[0,255,0], 126 magenta:[255,0,255], 127 maroon:[128,0,0], 128 navy:[0,0,128], 129 olive:[128,128,0], 130 orange:[255,165,0], 131 pink:[255,192,203], 132 purple:[128,0,128], 133 violet:[128,0,128], 134 red:[255,0,0], 135 silver:[192,192,192], 136 white:[255,255,255], 137 yellow:[255,255,0], 138 transparent: [255,255,255] 139 }; 140 141 142 143 /******************************************************************************/ 144 /****************************** CLASS ANIMATIONS ******************************/ 145 /******************************************************************************/ 146 147 var classAnimationActions = ['add', 'remove', 'toggle'], 148 shorthandStyles = { 149 border: 1, 150 borderBottom: 1, 151 borderColor: 1, 152 borderLeft: 1, 153 borderRight: 1, 154 borderTop: 1, 155 borderWidth: 1, 156 margin: 1, 157 padding: 1 158 }; 159 160 function getElementStyles() { 161 var style = document.defaultView 162 ? document.defaultView.getComputedStyle(this, null) 163 : this.currentStyle, 164 newStyle = {}, 165 key, 166 camelCase; 167 168 // webkit enumerates style porperties 169 if (style && style.length && style[0] && style[style[0]]) { 170 var len = style.length; 171 while (len--) { 172 key = style[len]; 173 if (typeof style[key] == 'string') { 174 camelCase = key.replace(/\-(\w)/g, function(all, letter){ 175 return letter.toUpperCase(); 176 }); 177 newStyle[camelCase] = style[key]; 178 } 179 } 180 } else { 181 for (key in style) { 182 if (typeof style[key] === 'string') { 183 newStyle[key] = style[key]; 184 } 185 } 186 } 187 188 return newStyle; 189 } 190 191 function filterStyles(styles) { 192 var name, value; 193 for (name in styles) { 194 value = styles[name]; 195 if ( 196 // ignore null and undefined values 197 value == null || 198 // ignore functions (when does this occur?) 199 $.isFunction(value) || 200 // shorthand styles that need to be expanded 201 name in shorthandStyles || 202 // ignore scrollbars (break in IE) 203 (/scrollbar/).test(name) || 204 205 // only colors or values that can be converted to numbers 206 (!(/color/i).test(name) && isNaN(parseFloat(value))) 207 ) { 208 delete styles[name]; 209 } 210 } 211 212 return styles; 213 } 214 215 function styleDifference(oldStyle, newStyle) { 216 var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 217 name; 218 219 for (name in newStyle) { 220 if (oldStyle[name] != newStyle[name]) { 221 diff[name] = newStyle[name]; 222 } 223 } 224 225 return diff; 226 } 227 228 $.effects.animateClass = function(value, duration, easing, callback) { 229 if ($.isFunction(easing)) { 230 callback = easing; 231 easing = null; 232 } 233 234 return this.queue(function() { 235 var that = $(this), 236 originalStyleAttr = that.attr('style') || ' ', 237 originalStyle = filterStyles(getElementStyles.call(this)), 238 newStyle, 239 className = that.attr('class') || ""; 240 241 $.each(classAnimationActions, function(i, action) { 242 if (value[action]) { 243 that[action + 'Class'](value[action]); 244 } 245 }); 246 newStyle = filterStyles(getElementStyles.call(this)); 247 that.attr('class', className); 248 249 that.animate(styleDifference(originalStyle, newStyle), { 250 queue: false, 251 duration: duration, 252 easing: easing, 253 complete: function() { 254 $.each(classAnimationActions, function(i, action) { 255 if (value[action]) { that[action + 'Class'](value[action]); } 256 }); 257 // work around bug in IE by clearing the cssText before setting it 258 if (typeof that.attr('style') == 'object') { 259 that.attr('style').cssText = ''; 260 that.attr('style').cssText = originalStyleAttr; 261 } else { 262 that.attr('style', originalStyleAttr); 263 } 264 if (callback) { callback.apply(this, arguments); } 265 $.dequeue( this ); 266 } 267 }); 268 }); 269 }; 270 271 $.fn.extend({ 272 _addClass: $.fn.addClass, 273 addClass: function(classNames, speed, easing, callback) { 274 return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); 275 }, 276 277 _removeClass: $.fn.removeClass, 278 removeClass: function(classNames,speed,easing,callback) { 279 return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); 280 }, 281 282 _toggleClass: $.fn.toggleClass, 283 toggleClass: function(classNames, force, speed, easing, callback) { 284 if ( typeof force == "boolean" || force === undefined ) { 285 if ( !speed ) { 286 // without speed parameter; 287 return this._toggleClass(classNames, force); 288 } else { 289 return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); 290 } 291 } else { 292 // without switch parameter; 293 return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); 294 } 295 }, 296 297 switchClass: function(remove,add,speed,easing,callback) { 298 return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); 299 } 300 }); 301 302 303 304 /******************************************************************************/ 305 /*********************************** EFFECTS **********************************/ 306 /******************************************************************************/ 307 308 $.extend($.effects, { 309 version: "@VERSION", 310 311 // Saves a set of properties in a data storage 312 save: function(element, set) { 313 for(var i=0; i < set.length; i++) { 314 if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); 315 } 316 }, 317 318 // Restores a set of previously saved properties from a data storage 319 restore: function(element, set) { 320 for(var i=0; i < set.length; i++) { 321 if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); 322 } 323 }, 324 325 setMode: function(el, mode) { 326 if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle 327 return mode; 328 }, 329 330 getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value 331 // this should be a little more flexible in the future to handle a string & hash 332 var y, x; 333 switch (origin[0]) { 334 case 'top': y = 0; break; 335 case 'middle': y = 0.5; break; 336 case 'bottom': y = 1; break; 337 default: y = origin[0] / original.height; 338 }; 339 switch (origin[1]) { 340 case 'left': x = 0; break; 341 case 'center': x = 0.5; break; 342 case 'right': x = 1; break; 343 default: x = origin[1] / original.width; 344 }; 345 return {x: x, y: y}; 346 }, 347 348 // Wraps the element around a wrapper that copies position properties 349 createWrapper: function(element) { 350 351 // if the element is already wrapped, return it 352 if (element.parent().is('.ui-effects-wrapper')) { 353 return element.parent(); 354 } 355 356 // wrap the element 357 var props = { 358 width: element.outerWidth(true), 359 height: element.outerHeight(true), 360 'float': element.css('float') 361 }, 362 wrapper = $('<div></div>') 363 .addClass('ui-effects-wrapper') 364 .css({ 365 fontSize: '100%', 366 background: 'transparent', 367 border: 'none', 368 margin: 0, 369 padding: 0 370 }), 371 active = document.activeElement; 372 373 element.wrap(wrapper); 374 375 // Fixes #7595 - Elements lose focus when wrapped. 376 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 377 $( active ).focus(); 378 } 379 380 wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element 381 382 // transfer positioning properties to the wrapper 383 if (element.css('position') == 'static') { 384 wrapper.css({ position: 'relative' }); 385 element.css({ position: 'relative' }); 386 } else { 387 $.extend(props, { 388 position: element.css('position'), 389 zIndex: element.css('z-index') 390 }); 391 $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { 392 props[pos] = element.css(pos); 393 if (isNaN(parseInt(props[pos], 10))) { 394 props[pos] = 'auto'; 395 } 396 }); 397 element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); 398 } 399 400 return wrapper.css(props).show(); 401 }, 402 403 removeWrapper: function(element) { 404 var parent, 405 active = document.activeElement; 406 407 if (element.parent().is('.ui-effects-wrapper')) { 408 parent = element.parent().replaceWith(element); 409 // Fixes #7595 - Elements lose focus when wrapped. 410 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 411 $( active ).focus(); 412 } 413 return parent; 414 } 415 416 return element; 417 }, 418 419 setTransition: function(element, list, factor, value) { 420 value = value || {}; 421 $.each(list, function(i, x){ 422 var unit = element.cssUnit(x); 423 if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; 424 }); 425 return value; 426 } 427 }); 428 429 430 function _normalizeArguments(effect, options, speed, callback) { 431 // shift params for method overloading 432 if (typeof effect == 'object') { 433 callback = options; 434 speed = null; 435 options = effect; 436 effect = options.effect; 437 } 438 if ($.isFunction(options)) { 439 callback = options; 440 speed = null; 441 options = {}; 442 } 443 if (typeof options == 'number' || $.fx.speeds[options]) { 444 callback = speed; 445 speed = options; 446 options = {}; 447 } 448 if ($.isFunction(speed)) { 449 callback = speed; 450 speed = null; 451 } 452 453 options = options || {}; 454 455 speed = speed || options.duration; 456 speed = $.fx.off ? 0 : typeof speed == 'number' 457 ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; 458 459 callback = callback || options.complete; 460 461 return [effect, options, speed, callback]; 462 } 463 464 function standardSpeed( speed ) { 465 // valid standard speeds 466 if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { 467 return true; 468 } 469 470 // invalid strings - treat as "normal" speed 471 if ( typeof speed === "string" && !$.effects[ speed ] ) { 472 return true; 473 } 474 475 return false; 476 } 477 478 $.fn.extend({ 479 effect: function(effect, options, speed, callback) { 480 var args = _normalizeArguments.apply(this, arguments), 481 // TODO: make effects take actual parameters instead of a hash 482 args2 = { 483 options: args[1], 484 duration: args[2], 485 callback: args[3] 486 }, 487 mode = args2.options.mode, 488 effectMethod = $.effects[effect]; 489 490 if ( $.fx.off || !effectMethod ) { 491 // delegate to the original method (e.g., .show()) if possible 492 if ( mode ) { 493 return this[ mode ]( args2.duration, args2.callback ); 494 } else { 495 return this.each(function() { 496 if ( args2.callback ) { 497 args2.callback.call( this ); 498 } 499 }); 500 } 501 } 502 503 return effectMethod.call(this, args2); 504 }, 505 506 _show: $.fn.show, 507 show: function(speed) { 508 if ( standardSpeed( speed ) ) { 509 return this._show.apply(this, arguments); 510 } else { 511 var args = _normalizeArguments.apply(this, arguments); 512 args[1].mode = 'show'; 513 return this.effect.apply(this, args); 514 } 515 }, 516 517 _hide: $.fn.hide, 518 hide: function(speed) { 519 if ( standardSpeed( speed ) ) { 520 return this._hide.apply(this, arguments); 521 } else { 522 var args = _normalizeArguments.apply(this, arguments); 523 args[1].mode = 'hide'; 524 return this.effect.apply(this, args); 525 } 526 }, 527 528 // jQuery core overloads toggle and creates _toggle 529 __toggle: $.fn.toggle, 530 toggle: function(speed) { 531 if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { 532 return this.__toggle.apply(this, arguments); 533 } else { 534 var args = _normalizeArguments.apply(this, arguments); 535 args[1].mode = 'toggle'; 536 return this.effect.apply(this, args); 537 } 538 }, 539 540 // helper functions 541 cssUnit: function(key) { 542 var style = this.css(key), val = []; 543 $.each( ['em','px','%','pt'], function(i, unit){ 544 if(style.indexOf(unit) > 0) 545 val = [parseFloat(style), unit]; 546 }); 547 return val; 548 } 549 }); 550 551 552 553 /******************************************************************************/ 554 /*********************************** EASING ***********************************/ 555 /******************************************************************************/ 556 557 /* 558 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 559 * 560 * Uses the built in easing capabilities added In jQuery 1.1 561 * to offer multiple easing options 562 * 563 * TERMS OF USE - jQuery Easing 564 * 565 * Open source under the BSD License. 566 * 567 * Copyright 2008 George McGinley Smith 568 * All rights reserved. 569 * 570 * Redistribution and use in source and binary forms, with or without modification, 571 * are permitted provided that the following conditions are met: 572 * 573 * Redistributions of source code must retain the above copyright notice, this list of 574 * conditions and the following disclaimer. 575 * Redistributions in binary form must reproduce the above copyright notice, this list 576 * of conditions and the following disclaimer in the documentation and/or other materials 577 * provided with the distribution. 578 * 579 * Neither the name of the author nor the names of contributors may be used to endorse 580 * or promote products derived from this software without specific prior written permission. 581 * 582 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 583 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 584 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 585 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 586 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 587 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 588 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 589 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 590 * OF THE POSSIBILITY OF SUCH DAMAGE. 591 * 592 */ 593 594 // t: current time, b: begInnIng value, c: change In value, d: duration 595 $.easing.jswing = $.easing.swing; 596 597 $.extend($.easing, 598 { 599 def: 'easeOutQuad', 600 swing: function (x, t, b, c, d) { 601 //alert($.easing.default); 602 return $.easing[$.easing.def](x, t, b, c, d); 603 }, 604 easeInQuad: function (x, t, b, c, d) { 605 return c*(t/=d)*t + b; 606 }, 607 easeOutQuad: function (x, t, b, c, d) { 608 return -c *(t/=d)*(t-2) + b; 609 }, 610 easeInOutQuad: function (x, t, b, c, d) { 611 if ((t/=d/2) < 1) return c/2*t*t + b; 612 return -c/2 * ((--t)*(t-2) - 1) + b; 613 }, 614 easeInCubic: function (x, t, b, c, d) { 615 return c*(t/=d)*t*t + b; 616 }, 617 easeOutCubic: function (x, t, b, c, d) { 618 return c*((t=t/d-1)*t*t + 1) + b; 619 }, 620 easeInOutCubic: function (x, t, b, c, d) { 621 if ((t/=d/2) < 1) return c/2*t*t*t + b; 622 return c/2*((t-=2)*t*t + 2) + b; 623 }, 624 easeInQuart: function (x, t, b, c, d) { 625 return c*(t/=d)*t*t*t + b; 626 }, 627 easeOutQuart: function (x, t, b, c, d) { 628 return -c * ((t=t/d-1)*t*t*t - 1) + b; 629 }, 630 easeInOutQuart: function (x, t, b, c, d) { 631 if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 632 return -c/2 * ((t-=2)*t*t*t - 2) + b; 633 }, 634 easeInQuint: function (x, t, b, c, d) { 635 return c*(t/=d)*t*t*t*t + b; 636 }, 637 easeOutQuint: function (x, t, b, c, d) { 638 return c*((t=t/d-1)*t*t*t*t + 1) + b; 639 }, 640 easeInOutQuint: function (x, t, b, c, d) { 641 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 642 return c/2*((t-=2)*t*t*t*t + 2) + b; 643 }, 644 easeInSine: function (x, t, b, c, d) { 645 return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 646 }, 647 easeOutSine: function (x, t, b, c, d) { 648 return c * Math.sin(t/d * (Math.PI/2)) + b; 649 }, 650 easeInOutSine: function (x, t, b, c, d) { 651 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 652 }, 653 easeInExpo: function (x, t, b, c, d) { 654 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 655 }, 656 easeOutExpo: function (x, t, b, c, d) { 657 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 658 }, 659 easeInOutExpo: function (x, t, b, c, d) { 660 if (t==0) return b; 661 if (t==d) return b+c; 662 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 663 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 664 }, 665 easeInCirc: function (x, t, b, c, d) { 666 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 667 }, 668 easeOutCirc: function (x, t, b, c, d) { 669 return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 670 }, 671 easeInOutCirc: function (x, t, b, c, d) { 672 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 673 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 674 }, 675 easeInElastic: function (x, t, b, c, d) { 676 var s=1.70158;var p=0;var a=c; 677 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 678 if (a < Math.abs(c)) { a=c; var s=p/4; } 679 else var s = p/(2*Math.PI) * Math.asin (c/a); 680 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 681 }, 682 easeOutElastic: function (x, t, b, c, d) { 683 var s=1.70158;var p=0;var a=c; 684 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 685 if (a < Math.abs(c)) { a=c; var s=p/4; } 686 else var s = p/(2*Math.PI) * Math.asin (c/a); 687 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 688 }, 689 easeInOutElastic: function (x, t, b, c, d) { 690 var s=1.70158;var p=0;var a=c; 691 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 692 if (a < Math.abs(c)) { a=c; var s=p/4; } 693 else var s = p/(2*Math.PI) * Math.asin (c/a); 694 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 695 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 696 }, 697 easeInBack: function (x, t, b, c, d, s) { 698 if (s == undefined) s = 1.70158; 699 return c*(t/=d)*t*((s+1)*t - s) + b; 700 }, 701 easeOutBack: function (x, t, b, c, d, s) { 702 if (s == undefined) s = 1.70158; 703 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 704 }, 705 easeInOutBack: function (x, t, b, c, d, s) { 706 if (s == undefined) s = 1.70158; 707 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 708 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 709 }, 710 easeInBounce: function (x, t, b, c, d) { 711 return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; 712 }, 713 easeOutBounce: function (x, t, b, c, d) { 714 if ((t/=d) < (1/2.75)) { 715 return c*(7.5625*t*t) + b; 716 } else if (t < (2/2.75)) { 717 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 718 } else if (t < (2.5/2.75)) { 719 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 720 } else { 721 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 722 } 723 }, 724 easeInOutBounce: function (x, t, b, c, d) { 725 if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 726 return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 727 } 728 }); 729 730 /* 731 * 732 * TERMS OF USE - EASING EQUATIONS 733 * 734 * Open source under the BSD License. 735 * 736 * Copyright 2001 Robert Penner 737 * All rights reserved. 738 * 739 * Redistribution and use in source and binary forms, with or without modification, 740 * are permitted provided that the following conditions are met: 741 * 742 * Redistributions of source code must retain the above copyright notice, this list of 743 * conditions and the following disclaimer. 744 * Redistributions in binary form must reproduce the above copyright notice, this list 745 * of conditions and the following disclaimer in the documentation and/or other materials 746 * provided with the distribution. 747 * 748 * Neither the name of the author nor the names of contributors may be used to endorse 749 * or promote products derived from this software without specific prior written permission. 750 * 751 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 752 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 753 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 754 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 755 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 756 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 757 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 758 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 759 * OF THE POSSIBILITY OF SUCH DAMAGE. 760 * 761 */ 762 763 })(jQuery); -

WordPress源代码——jquery-ui(1.8.20——jquery.effects.clip.js)
1 /*! 2 * jQuery UI Effects Clip @VERSION 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/Clip 9 * 10 * Depends: 11 * jquery.effects.core.js 12 */ 13 (function( $, undefined ) { 14 15 $.effects.clip = function(o) { 16 17 return this.queue(function() { 18 19 // Create element 20 var el = $(this), props = ['position','top','bottom','left','right','height','width']; 21 22 // Set options 23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode 24 var direction = o.options.direction || 'vertical'; // Default direction 25 26 // Adjust 27 $.effects.save(el, props); el.show(); // Save & Show 28 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper 29 var animate = el[0].tagName == 'IMG' ? wrapper : el; 30 var ref = { 31 size: (direction == 'vertical') ? 'height' : 'width', 32 position: (direction == 'vertical') ? 'top' : 'left' 33 }; 34 var distance = (direction == 'vertical') ? animate.height() : animate.width(); 35 if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift 36 37 // Animation 38 var animation = {}; 39 animation[ref.size] = mode == 'show' ? distance : 0; 40 animation[ref.position] = mode == 'show' ? 0 : distance / 2; 41 42 // Animate 43 animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { 44 if(mode == 'hide') el.hide(); // Hide 45 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore 46 if(o.callback) o.callback.apply(el[0], arguments); // Callback 47 el.dequeue(); 48 }}); 49 50 }); 51 52 }; 53 54 })(jQuery); -

WordPress源代码——jquery-ui(1.8.20——jquery.effects.bounce.js)
1 /*! 2 * jQuery UI Effects Bounce @VERSION 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/Bounce 9 * 10 * Depends: 11 * jquery.effects.core.js 12 */ 13 (function( $, undefined ) { 14 15 $.effects.bounce = function(o) { 16 17 return this.queue(function() { 18 19 // Create element 20 var el = $(this), props = ['position','top','bottom','left','right']; 21 22 // Set options 23 var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode 24 var direction = o.options.direction || 'up'; // Default direction 25 var distance = o.options.distance || 20; // Default distance 26 var times = o.options.times || 5; // Default # of times 27 var speed = o.duration || 250; // Default speed per bounce 28 if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE 29 30 // Adjust 31 $.effects.save(el, props); el.show(); // Save & Show 32 $.effects.createWrapper(el); // Create Wrapper 33 var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; 34 var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; 35 var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); 36 if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift 37 if (mode == 'hide') distance = distance / (times * 2); 38 if (mode != 'hide') times--; 39 40 // Animate 41 if (mode == 'show') { // Show Bounce 42 var animation = {opacity: 1}; 43 animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; 44 el.animate(animation, speed / 2, o.options.easing); 45 distance = distance / 2; 46 times--; 47 }; 48 for (var i = 0; i < times; i++) { // Bounces 49 var animation1 = {}, animation2 = {}; 50 animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; 51 animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; 52 el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); 53 distance = (mode == 'hide') ? distance * 2 : distance / 2; 54 }; 55 if (mode == 'hide') { // Last Bounce 56 var animation = {opacity: 0}; 57 animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; 58 el.animate(animation, speed / 2, o.options.easing, function(){ 59 el.hide(); // Hide 60 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore 61 if(o.callback) o.callback.apply(this, arguments); // Callback 62 }); 63 } else { 64 var animation1 = {}, animation2 = {}; 65 animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; 66 animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; 67 el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ 68 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore 69 if(o.callback) o.callback.apply(this, arguments); // Callback 70 }); 71 }; 72 el.queue('fx', function() { el.dequeue(); }); 73 el.dequeue(); 74 }); 75 76 }; 77 78 })(jQuery); -

WordPress源代码——jquery-ui(1.8.20——jquery.effects.blind.js)
1 /*! 2 * jQuery UI Effects Blind @VERSION 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/Blind 9 * 10 * Depends: 11 * jquery.effects.core.js 12 */ 13 (function( $, undefined ) { 14 15 $.effects.blind = function(o) { 16 17 return this.queue(function() { 18 19 // Create element 20 var el = $(this), props = ['position','top','bottom','left','right']; 21 22 // Set options 23 var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode 24 var direction = o.options.direction || 'vertical'; // Default direction 25 26 // Adjust 27 $.effects.save(el, props); el.show(); // Save & Show 28 var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper 29 var ref = (direction == 'vertical') ? 'height' : 'width'; 30 var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); 31 if(mode == 'show') wrapper.css(ref, 0); // Shift 32 33 // Animation 34 var animation = {}; 35 animation[ref] = mode == 'show' ? distance : 0; 36 37 // Animate 38 wrapper.animate(animation, o.duration, o.options.easing, function() { 39 if(mode == 'hide') el.hide(); // Hide 40 $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore 41 if(o.callback) o.callback.apply(el[0], arguments); // Callback 42 el.dequeue(); 43 }); 44 45 }); 46 47 }; 48 49 })(jQuery); -

WordPress源代码——jquery-plugins(jquery.ui.touch-punch.js)
1 /*! 2 * jQuery UI Touch Punch 0.2.2 3 * 4 * Copyright 2011, Dave Furfero 5 * Dual licensed under the MIT or GPL Version 2 licenses. 6 * 7 * Depends: 8 * jquery.ui.widget.js 9 * jquery.ui.mouse.js 10 */ 11 (function ($) { 12 13 // Detect touch support 14 $.support.touch = 'ontouchend' in document; 15 16 // Ignore browsers without touch support 17 if (!$.support.touch) { 18 return; 19 } 20 21 var mouseProto = $.ui.mouse.prototype, 22 _mouseInit = mouseProto._mouseInit, 23 touchHandled; 24 25 /** 26 * Simulate a mouse event based on a corresponding touch event 27 * @param {Object} event A touch event 28 * @param {String} simulatedType The corresponding mouse event 29 */ 30 function simulateMouseEvent (event, simulatedType) { 31 32 // Ignore multi-touch events 33 if (event.originalEvent.touches.length > 1) { 34 return; 35 } 36 37 event.preventDefault(); 38 39 var touch = event.originalEvent.changedTouches[0], 40 simulatedEvent = document.createEvent('MouseEvents'); 41 42 // Initialize the simulated mouse event using the touch event's coordinates 43 simulatedEvent.initMouseEvent( 44 simulatedType, // type 45 true, // bubbles 46 true, // cancelable 47 window, // view 48 1, // detail 49 touch.screenX, // screenX 50 touch.screenY, // screenY 51 touch.clientX, // clientX 52 touch.clientY, // clientY 53 false, // ctrlKey 54 false, // altKey 55 false, // shiftKey 56 false, // metaKey 57 0, // button 58 null // relatedTarget 59 ); 60 61 // Dispatch the simulated event to the target element 62 event.target.dispatchEvent(simulatedEvent); 63 } 64 65 /** 66 * Handle the jQuery UI widget's touchstart events 67 * @param {Object} event The widget element's touchstart event 68 */ 69 mouseProto._touchStart = function (event) { 70 71 var self = this; 72 73 // Ignore the event if another widget is already being handled 74 if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { 75 return; 76 } 77 78 // Set the flag to prevent other widgets from inheriting the touch event 79 touchHandled = true; 80 81 // Track movement to determine if interaction was a click 82 self._touchMoved = false; 83 84 // Simulate the mouseover event 85 simulateMouseEvent(event, 'mouseover'); 86 87 // Simulate the mousemove event 88 simulateMouseEvent(event, 'mousemove'); 89 90 // Simulate the mousedown event 91 simulateMouseEvent(event, 'mousedown'); 92 }; 93 94 /** 95 * Handle the jQuery UI widget's touchmove events 96 * @param {Object} event The document's touchmove event 97 */ 98 mouseProto._touchMove = function (event) { 99 100 // Ignore event if not handled 101 if (!touchHandled) { 102 return; 103 } 104 105 // Interaction was not a click 106 this._touchMoved = true; 107 108 // Simulate the mousemove event 109 simulateMouseEvent(event, 'mousemove'); 110 }; 111 112 /** 113 * Handle the jQuery UI widget's touchend events 114 * @param {Object} event The document's touchend event 115 */ 116 mouseProto._touchEnd = function (event) { 117 118 // Ignore event if not handled 119 if (!touchHandled) { 120 return; 121 } 122 123 // Simulate the mouseup event 124 simulateMouseEvent(event, 'mouseup'); 125 126 // Simulate the mouseout event 127 simulateMouseEvent(event, 'mouseout'); 128 129 // If the touch interaction did not move, it should trigger a click 130 if (!this._touchMoved) { 131 132 // Simulate the click event 133 simulateMouseEvent(event, 'click'); 134 } 135 136 // Unset the flag to allow other widgets to inherit the touch event 137 touchHandled = false; 138 }; 139 140 /** 141 * A duck punch of the $.ui.mouse _mouseInit method to support touch events. 142 * This method extends the widget with bound touch event handlers that 143 * translate touch events to mouse events and pass them to the widget's 144 * original mouse event handling methods. 145 */ 146 mouseProto._mouseInit = function () { 147 148 var self = this; 149 150 // Delegate the touch handlers to the widget's element 151 self.element 152 .bind('touchstart', $.proxy(self, '_touchStart')) 153 .bind('touchmove', $.proxy(self, '_touchMove')) 154 .bind('touchend', $.proxy(self, '_touchEnd')); 155 156 // Call the original $.ui.mouse init method 157 _mouseInit.call(self); 158 }; 159 160 })(jQuery); -

WordPress源代码——jquery-plugins(jquery.schedule.js)
1 /* 2 ** jquery.schedule.js -- jQuery plugin for scheduled/deferred actions 3 ** Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com> 4 ** Licensed under GPL <http://www.gnu.org/licenses/gpl.txt> 5 ** 6 ** $LastChangedDate$ 7 ** $LastChangedRevision$ 8 */ 9 10 /* 11 * <div id="button">TEST BUTTON</div> 12 * <div id="test"></div> 13 * 14 * <script type="text/javascript"> 15 * $(document).ready( 16 * function(){ 17 * $('#button').click(function () { 18 * $(this).css("color", "blue").schedule(2000, function (x) { 19 * $(this).css("color", "red"); 20 * $("#test").html("test: x = " + x); 21 * }, 42); 22 * }); 23 * }); 24 * </script> 25 */ 26 27 (function($) { 28 29 /* object constructor */ 30 $.scheduler = function () { 31 this.bucket = {}; 32 return; 33 }; 34 35 /* object methods */ 36 $.scheduler.prototype = { 37 /* schedule a task */ 38 schedule: function () { 39 /* schedule context with default parameters */ 40 var ctx = { 41 "id": null, /* unique identifier of high-level schedule */ 42 "time": 1000, /* time in milliseconds after which the task is run */ 43 "repeat": false, /* whether schedule should be automatically repeated */ 44 "protect": false, /* whether schedule should be protected from double scheduling */ 45 "obj": null, /* function context object ("this") */ 46 "func": function(){}, /* function to call */ 47 "args": [] /* function arguments to pass */ 48 }; 49 50 /* helper function: portable checking whether something is a function */ 51 function _isfn (fn) { 52 return ( 53 !!fn 54 && typeof fn != "string" 55 && typeof fn[0] == "undefined" 56 && RegExp("function", "i").test(fn + "") 57 ); 58 }; 59 60 /* parse arguments into context parameters (part 1/4): 61 detect an override object (special case to support jQuery method) */ 62 var i = 0; 63 var override = false; 64 if (typeof arguments[i] == "object" && arguments.length > 1) { 65 override = true; 66 i++; 67 } 68 69 /* parse arguments into context parameters (part 2/4): 70 support the flexible way of an associated array */ 71 if (typeof arguments[i] == "object") { 72 for (var option in arguments[i]) 73 if (typeof ctx[option] != "undefined") 74 ctx[option] = arguments[i][option]; 75 i++; 76 } 77 78 /* parse arguments into context parameters (part 3/4): 79 support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */ 80 if ( typeof arguments[i] == "number" 81 || ( typeof arguments[i] == "string" 82 && arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 83 ctx["time"] = arguments[i++]; 84 if (typeof arguments[i] == "boolean") 85 ctx["repeat"] = arguments[i++]; 86 if (typeof arguments[i] == "boolean") 87 ctx["protect"] = arguments[i++]; 88 if ( typeof arguments[i] == "object" 89 && typeof arguments[i+1] == "string" 90 && _isfn(arguments[i][arguments[i+1]])) { 91 ctx["obj"] = arguments[i++]; 92 ctx["func"] = arguments[i++]; 93 } 94 else if ( typeof arguments[i] != "undefined" 95 && ( _isfn(arguments[i]) 96 || typeof arguments[i] == "string")) 97 ctx["func"] = arguments[i++]; 98 while (typeof arguments[i] != "undefined") 99 ctx["args"].push(arguments[i++]); 100 101 /* parse arguments into context parameters (part 4/4): 102 apply parameters from override object */ 103 if (override) { 104 if (typeof arguments[1] == "object") { 105 for (var option in arguments[0]) 106 if ( typeof ctx[option] != "undefined" 107 && typeof arguments[1][option] == "undefined") 108 ctx[option] = arguments[0][option]; 109 } 110 else { 111 for (var option in arguments[0]) 112 if (typeof ctx[option] != "undefined") 113 ctx[option] = arguments[0][option]; 114 } 115 i++; 116 } 117 118 /* annotate context with internals */ 119 ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */ 120 ctx["_handle"] = null; /* internal: unique handle of low-level task */ 121 122 /* determine time value in milliseconds */ 123 var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$")); 124 if (match && match[0] != "undefined" && match[1] != "undefined") 125 ctx["time"] = String(parseInt(match[1]) * 126 { s: 1000, m: 1000*60, h: 1000*60*60, 127 d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]); 128 129 /* determine unique identifier of task */ 130 if (ctx["id"] == null) 131 ctx["id"] = ( String(ctx["repeat"]) + ":" 132 + String(ctx["protect"]) + ":" 133 + String(ctx["time"]) + ":" 134 + String(ctx["obj"]) + ":" 135 + String(ctx["func"]) + ":" 136 + String(ctx["args"]) ); 137 138 /* optionally protect from duplicate calls */ 139 if (ctx["protect"]) 140 if (typeof this.bucket[ctx["id"]] != "undefined") 141 return this.bucket[ctx["id"]]; 142 143 /* support execution of methods by name and arbitrary scripts */ 144 if (!_isfn(ctx["func"])) { 145 if ( ctx["obj"] != null 146 && typeof ctx["obj"] == "object" 147 && typeof ctx["func"] == "string" 148 && _isfn(ctx["obj"][ctx["func"]])) 149 /* method by name */ 150 ctx["func"] = ctx["obj"][ctx["func"]]; 151 else 152 /* arbitrary script */ 153 ctx["func"] = eval("function () { " + ctx["func"] + " }"); 154 } 155 156 /* pass-through to internal scheduling operation */ 157 ctx["_handle"] = this._schedule(ctx); 158 159 /* store context into bucket of scheduler object */ 160 this.bucket[ctx["id"]] = ctx; 161 162 /* return context */ 163 return ctx; 164 }, 165 166 /* re-schedule a task */ 167 reschedule: function (ctx) { 168 if (typeof ctx == "string") 169 ctx = this.bucket[ctx]; 170 171 /* pass-through to internal scheduling operation */ 172 ctx["_handle"] = this._schedule(ctx); 173 174 /* return context */ 175 return ctx; 176 }, 177 178 /* internal scheduling operation */ 179 _schedule: function (ctx) { 180 /* closure to act as the call trampoline function */ 181 var trampoline = function () { 182 /* jump into function */ 183 var obj = (ctx["obj"] != null ? ctx["obj"] : ctx); 184 (ctx["func"]).apply(obj, ctx["args"]); 185 186 /* either repeat scheduling and keep in bucket or 187 just stop scheduling and delete from scheduler bucket */ 188 if ( /* not cancelled from inside... */ 189 typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined" 190 && /* ...and repeating requested */ 191 ctx["repeat"]) 192 (ctx["_scheduler"])._schedule(ctx); 193 else 194 delete (ctx["_scheduler"]).bucket[ctx["id"]]; 195 }; 196 197 /* schedule task and return handle */ 198 return setTimeout(trampoline, ctx["time"]); 199 }, 200 201 /* cancel a scheduled task */ 202 cancel: function (ctx) { 203 if (typeof ctx == "string") 204 ctx = this.bucket[ctx]; 205 206 /* cancel scheduled task */ 207 if (typeof ctx == "object") { 208 clearTimeout(ctx["_handle"]); 209 delete this.bucket[ctx["id"]]; 210 } 211 } 212 }; 213 214 /* integrate a global instance of the scheduler into the global jQuery object */ 215 $.extend({ 216 scheduler$: new $.scheduler(), 217 schedule: function () { return $.scheduler$.schedule.apply ($.scheduler$, arguments) }, 218 reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) }, 219 cancel: function () { return $.scheduler$.cancel.apply ($.scheduler$, arguments) } 220 }); 221 222 /* integrate scheduling convinience method into all jQuery objects */ 223 $.fn.extend({ 224 schedule: function () { 225 var a = [ {} ]; 226 for (var i = 0; i < arguments.length; i++) 227 a.push(arguments[i]); 228 return this.each(function () { 229 a[0] = { "id": this, "obj": this }; 230 return $.schedule.apply($, a); 231 }); 232 } 233 }); 234 235 })(jQuery); 236 237 /* 238 ** jquery.schedule.js -- jQuery plugin for scheduled/deferred actions 239 ** Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com> 240 ** Licensed under GPL <http://www.gnu.org/licenses/gpl.txt> 241 ** 242 ** $LastChangedDate$ 243 ** $LastChangedRevision$ 244 */ 245 246 /* 247 * <div id="button">TEST BUTTON</div> 248 * <div id="test"></div> 249 * 250 * <script type="text/javascript"> 251 * $(document).ready( 252 * function(){ 253 * $('#button').click(function () { 254 * $(this).css("color", "blue").schedule(2000, function (x) { 255 * $(this).css("color", "red"); 256 * $("#test").html("test: x = " + x); 257 * }, 42); 258 * }); 259 * }); 260 * </script> 261 */ 262 263 (function($) { 264 265 /* object constructor */ 266 $.scheduler = function () { 267 this.bucket = {}; 268 return; 269 }; 270 271 /* object methods */ 272 $.scheduler.prototype = { 273 /* schedule a task */ 274 schedule: function () { 275 /* schedule context with default parameters */ 276 var ctx = { 277 "id": null, /* unique identifier of high-level schedule */ 278 "time": 1000, /* time in milliseconds after which the task is run */ 279 "repeat": false, /* whether schedule should be automatically repeated */ 280 "protect": false, /* whether schedule should be protected from double scheduling */ 281 "obj": null, /* function context object ("this") */ 282 "func": function(){}, /* function to call */ 283 "args": [] /* function arguments to pass */ 284 }; 285 286 /* helper function: portable checking whether something is a function */ 287 function _isfn (fn) { 288 return ( 289 !!fn 290 && typeof fn != "string" 291 && typeof fn[0] == "undefined" 292 && RegExp("function", "i").test(fn + "") 293 ); 294 }; 295 296 /* parse arguments into context parameters (part 1/4): 297 detect an override object (special case to support jQuery method) */ 298 var i = 0; 299 var override = false; 300 if (typeof arguments[i] == "object" && arguments.length > 1) { 301 override = true; 302 i++; 303 } 304 305 /* parse arguments into context parameters (part 2/4): 306 support the flexible way of an associated array */ 307 if (typeof arguments[i] == "object") { 308 for (var option in arguments[i]) 309 if (typeof ctx[option] != "undefined") 310 ctx[option] = arguments[i][option]; 311 i++; 312 } 313 314 /* parse arguments into context parameters (part 3/4): 315 support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */ 316 if ( typeof arguments[i] == "number" 317 || ( typeof arguments[i] == "string" 318 && arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 319 ctx["time"] = arguments[i++]; 320 if (typeof arguments[i] == "boolean") 321 ctx["repeat"] = arguments[i++]; 322 if (typeof arguments[i] == "boolean") 323 ctx["protect"] = arguments[i++]; 324 if ( typeof arguments[i] == "object" 325 && typeof arguments[i+1] == "string" 326 && _isfn(arguments[i][arguments[i+1]])) { 327 ctx["obj"] = arguments[i++]; 328 ctx["func"] = arguments[i++]; 329 } 330 else if ( typeof arguments[i] != "undefined" 331 && ( _isfn(arguments[i]) 332 || typeof arguments[i] == "string")) 333 ctx["func"] = arguments[i++]; 334 while (typeof arguments[i] != "undefined") 335 ctx["args"].push(arguments[i++]); 336 337 /* parse arguments into context parameters (part 4/4): 338 apply parameters from override object */ 339 if (override) { 340 if (typeof arguments[1] == "object") { 341 for (var option in arguments[0]) 342 if ( typeof ctx[option] != "undefined" 343 && typeof arguments[1][option] == "undefined") 344 ctx[option] = arguments[0][option]; 345 } 346 else { 347 for (var option in arguments[0]) 348 if (typeof ctx[option] != "undefined") 349 ctx[option] = arguments[0][option]; 350 } 351 i++; 352 } 353 354 /* annotate context with internals */ 355 ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */ 356 ctx["_handle"] = null; /* internal: unique handle of low-level task */ 357 358 /* determine time value in milliseconds */ 359 var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$")); 360 if (match && match[0] != "undefined" && match[1] != "undefined") 361 ctx["time"] = String(parseInt(match[1]) * 362 { s: 1000, m: 1000*60, h: 1000*60*60, 363 d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]); 364 365 /* determine unique identifier of task */ 366 if (ctx["id"] == null) 367 ctx["id"] = ( String(ctx["repeat"]) + ":" 368 + String(ctx["protect"]) + ":" 369 + String(ctx["time"]) + ":" 370 + String(ctx["obj"]) + ":" 371 + String(ctx["func"]) + ":" 372 + String(ctx["args"]) ); 373 374 /* optionally protect from duplicate calls */ 375 if (ctx["protect"]) 376 if (typeof this.bucket[ctx["id"]] != "undefined") 377 return this.bucket[ctx["id"]]; 378 379 /* support execution of methods by name and arbitrary scripts */ 380 if (!_isfn(ctx["func"])) { 381 if ( ctx["obj"] != null 382 && typeof ctx["obj"] == "object" 383 && typeof ctx["func"] == "string" 384 && _isfn(ctx["obj"][ctx["func"]])) 385 /* method by name */ 386 ctx["func"] = ctx["obj"][ctx["func"]]; 387 else 388 /* arbitrary script */ 389 ctx["func"] = eval("function () { " + ctx["func"] + " }"); 390 } 391 392 /* pass-through to internal scheduling operation */ 393 ctx["_handle"] = this._schedule(ctx); 394 395 /* store context into bucket of scheduler object */ 396 this.bucket[ctx["id"]] = ctx; 397 398 /* return context */ 399 return ctx; 400 }, 401 402 /* re-schedule a task */ 403 reschedule: function (ctx) { 404 if (typeof ctx == "string") 405 ctx = this.bucket[ctx]; 406 407 /* pass-through to internal scheduling operation */ 408 ctx["_handle"] = this._schedule(ctx); 409 410 /* return context */ 411 return ctx; 412 }, 413 414 /* internal scheduling operation */ 415 _schedule: function (ctx) { 416 /* closure to act as the call trampoline function */ 417 var trampoline = function () { 418 /* jump into function */ 419 var obj = (ctx["obj"] != null ? ctx["obj"] : ctx); 420 (ctx["func"]).apply(obj, ctx["args"]); 421 422 /* either repeat scheduling and keep in bucket or 423 just stop scheduling and delete from scheduler bucket */ 424 if ( /* not cancelled from inside... */ 425 typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined" 426 && /* ...and repeating requested */ 427 ctx["repeat"]) 428 (ctx["_scheduler"])._schedule(ctx); 429 else 430 delete (ctx["_scheduler"]).bucket[ctx["id"]]; 431 }; 432 433 /* schedule task and return handle */ 434 return setTimeout(trampoline, ctx["time"]); 435 }, 436 437 /* cancel a scheduled task */ 438 cancel: function (ctx) { 439 if (typeof ctx == "string") 440 ctx = this.bucket[ctx]; 441 442 /* cancel scheduled task */ 443 if (typeof ctx == "object") { 444 clearTimeout(ctx["_handle"]); 445 delete this.bucket[ctx["id"]]; 446 } 447 } 448 }; 449 450 /* integrate a global instance of the scheduler into the global jQuery object */ 451 $.extend({ 452 scheduler$: new $.scheduler(), 453 schedule: function () { return $.scheduler$.schedule.apply ($.scheduler$, arguments) }, 454 reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) }, 455 cancel: function () { return $.scheduler$.cancel.apply ($.scheduler$, arguments) } 456 }); 457 458 /* integrate scheduling convinience method into all jQuery objects */ 459 $.fn.extend({ 460 schedule: function () { 461 var a = [ {} ]; 462 for (var i = 0; i < arguments.length; i++) 463 a.push(arguments[i]); 464 return this.each(function () { 465 a[0] = { "id": this, "obj": this }; 466 return $.schedule.apply($, a); 467 }); 468 } 469 }); 470 471 })(jQuery); 472 473 /* 474 ** jquery.schedule.js -- jQuery plugin for scheduled/deferred actions 475 ** Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com> 476 ** Licensed under GPL <http://www.gnu.org/licenses/gpl.txt> 477 ** 478 ** $LastChangedDate$ 479 ** $LastChangedRevision$ 480 */ 481 482 /* 483 * <div id="button">TEST BUTTON</div> 484 * <div id="test"></div> 485 * 486 * <script type="text/javascript"> 487 * $(document).ready( 488 * function(){ 489 * $('#button').click(function () { 490 * $(this).css("color", "blue").schedule(2000, function (x) { 491 * $(this).css("color", "red"); 492 * $("#test").html("test: x = " + x); 493 * }, 42); 494 * }); 495 * }); 496 * </script> 497 */ 498 499 (function($) { 500 501 /* object constructor */ 502 $.scheduler = function () { 503 this.bucket = {}; 504 return; 505 }; 506 507 /* object methods */ 508 $.scheduler.prototype = { 509 /* schedule a task */ 510 schedule: function () { 511 /* schedule context with default parameters */ 512 var ctx = { 513 "id": null, /* unique identifier of high-level schedule */ 514 "time": 1000, /* time in milliseconds after which the task is run */ 515 "repeat": false, /* whether schedule should be automatically repeated */ 516 "protect": false, /* whether schedule should be protected from double scheduling */ 517 "obj": null, /* function context object ("this") */ 518 "func": function(){}, /* function to call */ 519 "args": [] /* function arguments to pass */ 520 }; 521 522 /* helper function: portable checking whether something is a function */ 523 function _isfn (fn) { 524 return ( 525 !!fn 526 && typeof fn != "string" 527 && typeof fn[0] == "undefined" 528 && RegExp("function", "i").test(fn + "") 529 ); 530 }; 531 532 /* parse arguments into context parameters (part 1/4): 533 detect an override object (special case to support jQuery method) */ 534 var i = 0; 535 var override = false; 536 if (typeof arguments[i] == "object" && arguments.length > 1) { 537 override = true; 538 i++; 539 } 540 541 /* parse arguments into context parameters (part 2/4): 542 support the flexible way of an associated array */ 543 if (typeof arguments[i] == "object") { 544 for (var option in arguments[i]) 545 if (typeof ctx[option] != "undefined") 546 ctx[option] = arguments[i][option]; 547 i++; 548 } 549 550 /* parse arguments into context parameters (part 3/4): 551 support: schedule([time [, repeat], ]{{obj, methodname} | func}[, arg, ...]); */ 552 if ( typeof arguments[i] == "number" 553 || ( typeof arguments[i] == "string" 554 && arguments[i].match(RegExp("^[0-9]+[smhdw]$")))) 555 ctx["time"] = arguments[i++]; 556 if (typeof arguments[i] == "boolean") 557 ctx["repeat"] = arguments[i++]; 558 if (typeof arguments[i] == "boolean") 559 ctx["protect"] = arguments[i++]; 560 if ( typeof arguments[i] == "object" 561 && typeof arguments[i+1] == "string" 562 && _isfn(arguments[i][arguments[i+1]])) { 563 ctx["obj"] = arguments[i++]; 564 ctx["func"] = arguments[i++]; 565 } 566 else if ( typeof arguments[i] != "undefined" 567 && ( _isfn(arguments[i]) 568 || typeof arguments[i] == "string")) 569 ctx["func"] = arguments[i++]; 570 while (typeof arguments[i] != "undefined") 571 ctx["args"].push(arguments[i++]); 572 573 /* parse arguments into context parameters (part 4/4): 574 apply parameters from override object */ 575 if (override) { 576 if (typeof arguments[1] == "object") { 577 for (var option in arguments[0]) 578 if ( typeof ctx[option] != "undefined" 579 && typeof arguments[1][option] == "undefined") 580 ctx[option] = arguments[0][option]; 581 } 582 else { 583 for (var option in arguments[0]) 584 if (typeof ctx[option] != "undefined") 585 ctx[option] = arguments[0][option]; 586 } 587 i++; 588 } 589 590 /* annotate context with internals */ 591 ctx["_scheduler"] = this; /* internal: back-reference to scheduler object */ 592 ctx["_handle"] = null; /* internal: unique handle of low-level task */ 593 594 /* determine time value in milliseconds */ 595 var match = String(ctx["time"]).match(RegExp("^([0-9]+)([smhdw])$")); 596 if (match && match[0] != "undefined" && match[1] != "undefined") 597 ctx["time"] = String(parseInt(match[1]) * 598 { s: 1000, m: 1000*60, h: 1000*60*60, 599 d: 1000*60*60*24, w: 1000*60*60*24*7 }[match[2]]); 600 601 /* determine unique identifier of task */ 602 if (ctx["id"] == null) 603 ctx["id"] = ( String(ctx["repeat"]) + ":" 604 + String(ctx["protect"]) + ":" 605 + String(ctx["time"]) + ":" 606 + String(ctx["obj"]) + ":" 607 + String(ctx["func"]) + ":" 608 + String(ctx["args"]) ); 609 610 /* optionally protect from duplicate calls */ 611 if (ctx["protect"]) 612 if (typeof this.bucket[ctx["id"]] != "undefined") 613 return this.bucket[ctx["id"]]; 614 615 /* support execution of methods by name and arbitrary scripts */ 616 if (!_isfn(ctx["func"])) { 617 if ( ctx["obj"] != null 618 && typeof ctx["obj"] == "object" 619 && typeof ctx["func"] == "string" 620 && _isfn(ctx["obj"][ctx["func"]])) 621 /* method by name */ 622 ctx["func"] = ctx["obj"][ctx["func"]]; 623 else 624 /* arbitrary script */ 625 ctx["func"] = eval("function () { " + ctx["func"] + " }"); 626 } 627 628 /* pass-through to internal scheduling operation */ 629 ctx["_handle"] = this._schedule(ctx); 630 631 /* store context into bucket of scheduler object */ 632 this.bucket[ctx["id"]] = ctx; 633 634 /* return context */ 635 return ctx; 636 }, 637 638 /* re-schedule a task */ 639 reschedule: function (ctx) { 640 if (typeof ctx == "string") 641 ctx = this.bucket[ctx]; 642 643 /* pass-through to internal scheduling operation */ 644 ctx["_handle"] = this._schedule(ctx); 645 646 /* return context */ 647 return ctx; 648 }, 649 650 /* internal scheduling operation */ 651 _schedule: function (ctx) { 652 /* closure to act as the call trampoline function */ 653 var trampoline = function () { 654 /* jump into function */ 655 var obj = (ctx["obj"] != null ? ctx["obj"] : ctx); 656 (ctx["func"]).apply(obj, ctx["args"]); 657 658 /* either repeat scheduling and keep in bucket or 659 just stop scheduling and delete from scheduler bucket */ 660 if ( /* not cancelled from inside... */ 661 typeof (ctx["_scheduler"]).bucket[ctx["id"]] != "undefined" 662 && /* ...and repeating requested */ 663 ctx["repeat"]) 664 (ctx["_scheduler"])._schedule(ctx); 665 else 666 delete (ctx["_scheduler"]).bucket[ctx["id"]]; 667 }; 668 669 /* schedule task and return handle */ 670 return setTimeout(trampoline, ctx["time"]); 671 }, 672 673 /* cancel a scheduled task */ 674 cancel: function (ctx) { 675 if (typeof ctx == "string") 676 ctx = this.bucket[ctx]; 677 678 /* cancel scheduled task */ 679 if (typeof ctx == "object") { 680 clearTimeout(ctx["_handle"]); 681 delete this.bucket[ctx["id"]]; 682 } 683 } 684 }; 685 686 /* integrate a global instance of the scheduler into the global jQuery object */ 687 $.extend({ 688 scheduler$: new $.scheduler(), 689 schedule: function () { return $.scheduler$.schedule.apply ($.scheduler$, arguments) }, 690 reschedule: function () { return $.scheduler$.reschedule.apply($.scheduler$, arguments) }, 691 cancel: function () { return $.scheduler$.cancel.apply ($.scheduler$, arguments) } 692 }); 693 694 /* integrate scheduling convinience method into all jQuery objects */ 695 $.fn.extend({ 696 schedule: function () { 697 var a = [ {} ]; 698 for (var i = 0; i < arguments.length; i++) 699 a.push(arguments[i]); 700 return this.each(function () { 701 a[0] = { "id": this, "obj": this }; 702 return $.schedule.apply($, a); 703 }); 704 } 705 }); 706 707 })(jQuery); 708