Вход Регистрация
Файл: wordpress/wp-includes/js/wp-pointer.js
Строк: 348
<?php
/* global wpPointerL10n */
/**
 * Pointer jQuery widget.
 */
(function($){
    var 
identifier 0,
        
zindex 9999;

    $.
widget('wp.pointer', {
        
options: {
            
pointerClass'wp-pointer',
            
pointerWidth320,
            
content: function() {
                return $(
this).text();
            },
            
buttons: function( event) {
                var 
close  = ( wpPointerL10n ) ? wpPointerL10n.dismiss 'Dismiss',
                    
button = $('<a class="close" href="#">' close '</a>');

                return 
button.bind'click.pointer', function(e) {
                    
e.preventDefault();
                    
t.element.pointer('close');
                });
            },
            
position'top',
            
show: function( event) {
                
t.pointer.show();
                
t.opened();
            },
            
hide: function( event) {
                
t.pointer.hide();
                
t.closed();
            },
            
documentdocument
        
},

        
_create: function() {
            var 
positioning,
                
family;

            
this.content = $('<div class="wp-pointer-content"></div>');
            
this.arrow   = $('<div class="wp-pointer-arrow"><div class="wp-pointer-arrow-inner"></div></div>');

            
family this.element.parents().addthis.element );
            
positioning 'absolute';

            if ( 
family.filter(function(){ return 'fixed' === $(this).css('position'); }).length )
                
positioning 'fixed';

            
this.pointer = $('<div />')
                .
appendthis.content )
                .
appendthis.arrow )
                .
attr('id''wp-pointer-' identifier++)
                .
addClassthis.options.pointerClass )
                .
css({'position'positioning'width'this.options.pointerWidth+'px''display''none'})
                .
appendTothis.options.document.body );
        },

        
_setOption: function( keyvalue ) {
            var 
o   this.options,
                
tip this.pointer;

            
// Handle document transfer
            
if ( key === 'document' && value !== o.document ) {
                
tip.detach().appendTovalue.body );

            
// Handle class change
            
} else if ( key === 'pointerClass' ) {
                
tip.removeClasso.pointerClass ).addClassvalue );
            }

            
// Call super method.
            
$.Widget.prototype._setOption.applythisarguments );

            
// Reposition automatically
            
if ( key === 'position' ) {
                
this.reposition();

            
// Update content automatically if pointer is open
            
} else if ( key === 'content' && this.active ) {
                
this.update();
            }
        },

        
destroy: function() {
            
this.pointer.remove();
            $.
Widget.prototype.destroy.callthis );
        },

        
widget: function() {
            return 
this.pointer;
        },

        
update: function( event ) {
            var 
self this,
                
o    this.options,
                
dfd  = $.Deferred(),
                
content;

            if ( 
o.disabled )
                return;

            
dfd.done( function( content ) {
                
self._updateeventcontent );
            });

            
// Either o.content is a string...
            
if ( typeof o.content === 'string' ) {
                
content o.content;

            
// ...or o.content is a callback.
            
} else {
                
content o.content.callthis.element[0], dfd.resolveeventthis._handoff() );
            }

            
// If content is set, then complete the update.
            
if ( content )
                
dfd.resolvecontent );

            return 
dfd.promise();
        },

        
/**
         * Update is separated into two functions to allow events to defer
         * updating the pointer (e.g. fetch content with ajax, etc).
         */
        
_update: function( eventcontent ) {
            var 
buttons,
                
this.options;

            if ( ! 
content )
                return;

            
this.pointer.stop(); // Kill any animations on the pointer.
            
this.content.htmlcontent );

            
buttons o.buttons.callthis.element[0], eventthis._handoff() );
            if ( 
buttons ) {
                
buttons.wrap('<div class="wp-pointer-buttons" />').parent().appendTothis.content );
            }

            
this.reposition();
        },

        
reposition: function() {
            var 
position;

            if ( 
this.options.disabled )
                return;

            
position this._processPositionthis.options.position );

            
// Reposition pointer.
            
this.pointer.css({
                
top0,
                
left0,
                
zIndexzindex++ // Increment the z-index so that it shows above other opened pointers.
            
}).show().position($.extend({
                
ofthis.element,
                
collision'fit none'
            
}, position )); // the object comes before this.options.position so the user can override position.of.

            
this.repoint();
        },

        
repoint: function() {
            var 
this.options,
                
edge;

            if ( 
o.disabled )
                return;

            
edge = ( typeof o.position == 'string' ) ? o.position o.position.edge;

            
// Remove arrow classes.
            
this.pointer[0].className this.pointer[0].className.replace( /wp-pointer-[^s'"]*/, '' );

            // Add arrow class.
            this.pointer.addClass( '
wp-pointer-' + edge );
        },

        _processPosition: function( position ) {
            var opposite = {
                    top: '
bottom',
                    bottom: '
top',
                    left: '
right',
                    right: '
left'
                },
                result;

            // If the position object is a string, it is shorthand for position.edge.
            if ( typeof position == '
string' ) {
                result = {
                    edge: position + ''
                };
            } else {
                result = $.extend( {}, position );
            }

            if ( ! result.edge )
                return result;

            if ( result.edge == '
top' || result.edge == 'bottom' ) {
                result.align = result.align || '
left';

                result.at = result.at || result.align + ' ' + opposite[ result.edge ];
                result.my = result.my || result.align + ' ' + result.edge;
            } else {
                result.align = result.align || '
top';

                result.at = result.at || opposite[ result.edge ] + ' ' + result.align;
                result.my = result.my || result.edge + ' ' + result.align;
            }

            return result;
        },

        open: function( event ) {
            var self = this,
                o    = this.options;

            if ( this.active || o.disabled || this.element.is('
:hidden') )
                return;

            this.update().done( function() {
                self._open( event );
            });
        },

        _open: function( event ) {
            var self = this,
                o    = this.options;

            if ( this.active || o.disabled || this.element.is('
:hidden') )
                return;

            this.active = true;

            this._trigger( '
open', event, this._handoff() );

            this._trigger( '
show', event, this._handoff({
                opened: function() {
                    self._trigger( '
opened', event, self._handoff() );
                }
            }));
        },

        close: function( event ) {
            if ( !this.active || this.options.disabled )
                return;

            var self = this;
            this.active = false;

            this._trigger( '
close', event, this._handoff() );
            this._trigger( '
hide', event, this._handoff({
                closed: function() {
                    self._trigger( '
closed', event, self._handoff() );
                }
            }));
        },

        sendToTop: function() {
            if ( this.active )
                this.pointer.css( '
z-index', zindex++ );
        },

        toggle: function( event ) {
            if ( this.pointer.is('
:hidden') )
                this.open( event );
            else
                this.close( event );
        },

        _handoff: function( extend ) {
            return $.extend({
                pointer: this.pointer,
                element: this.element
            }, extend);
        }
    });
})(jQuery);
?>
Онлайн: 1
Реклама