Category: jquery-ui

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

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

    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);
    
  • WordPress源代码——jquery-ui(1.8.20——jquery.effects.explode.js)

    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)

    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)

    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)

    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)

    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)

    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);