src/cm/media/js/lib/tipsy/docs/jquery.tipsy.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
(function($) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
    $.fn.tipsy = function(opts) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
        opts = $.extend({fade: false, gravity: 'n'}, opts || {});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
        var tip = null, cancelHide = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
        this.hover(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
            $.data(this, 'cancel.tipsy', true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
            var tip = $.data(this, 'active.tipsy');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
            if (!tip) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
                tip = $('<div class="tipsy"><div class="tipsy-inner">' + $(this).attr('title') + '</div></div>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
                tip.css({position: 'absolute', zIndex: 100000});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
                $(this).attr('title', '');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
                $.data(this, 'active.tipsy', tip);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
            var pos = $.extend({}, $(this).offset(), {width: this.offsetWidth, height: this.offsetHeight});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
            tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
            var actualWidth = tip[0].offsetWidth, actualHeight = tip[0].offsetHeight;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
            switch (opts.gravity.charAt(0)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
                case 'n':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
                    tip.css({top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}).addClass('tipsy-north');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
                case 's':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
                    tip.css({top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}).addClass('tipsy-south');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
                case 'e':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
                    tip.css({top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}).addClass('tipsy-east');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
                case 'w':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
                    tip.css({top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}).addClass('tipsy-west');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
                    break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
            if (opts.fade) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
                tip.css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: 1});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
                tip.css({visibility: 'visible'});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        }, function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            $.data(this, 'cancel.tipsy', false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
            var self = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
            setTimeout(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
                if ($.data(this, 'cancel.tipsy')) return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
                var tip = $.data(self, 'active.tipsy');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
                if (opts.fade) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
                    tip.stop().fadeOut(function() { $(this).remove(); });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
                    tip.remove();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
            }, 100);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
})(jQuery);