Autoría | Ultima modificación | Ver Log |
/** jQuery Tooltip plugin 1.3** http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/* http://docs.jquery.com/Plugins/Tooltip** Copyright (c) 2006 - 2008 Jörn Zaefferer** $Id: jquery.tooltip.js,v 1.1.1.1 2009-03-17 18:35:18 kannan Exp $** Dual licensed under the MIT and GPL licenses:* http://www.opensource.org/licenses/mit-license.php* http://www.gnu.org/licenses/gpl.html*/;(function($) {// the tooltip elementvar helper = {},// the current tooltipped elementcurrent,// the title of the current element, used for restoringtitle,// timeout id for delayed tooltipstID,// IE 5.5 or 6IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),// flag for mouse trackingtrack = false;$.tooltip = {blocked: false,defaults: {delay: 200,fade: false,showURL: true,extraClass: "",top: 15,left: 15,id: "tooltip"},block: function() {$.tooltip.blocked = !$.tooltip.blocked;}};$.fn.extend({tooltip: function(settings) {settings = $.extend({}, $.tooltip.defaults, settings);createHelper(settings);return this.each(function() {$.data(this, "tooltip", settings);this.tOpacity = helper.parent.css("opacity");// copy tooltip into its own expando and remove the titlethis.tooltipText = this.title;$(this).removeAttr("title");// also remove alt attribute to prevent default tooltip in IEthis.alt = "";}).mouseover(save).mouseout(hide).click(hide);},fixPNG: IE ? function() {return this.each(function () {var image = $(this).css('backgroundImage');if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {image = RegExp.$1;$(this).css({'backgroundImage': 'none','filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"}).each(function () {var position = $(this).css('position');if (position != 'absolute' && position != 'relative')$(this).css('position', 'relative');});}});} : function() { return this; },unfixPNG: IE ? function() {return this.each(function () {$(this).css({'filter': '', backgroundImage: ''});});} : function() { return this; },hideWhenEmpty: function() {return this.each(function() {$(this)[ $(this).html() ? "show" : "hide" ]();});},url: function() {return this.attr('href') || this.attr('src');}});function createHelper(settings) {// there can be only one tooltip helperif( helper.parent )return;// create the helper, h3 for title, div for urlhelper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')// add to document.appendTo(document.body)// hide it at first.hide();// apply bgiframe if availableif ( $.fn.bgiframe )helper.parent.bgiframe();// save references to title and url elementshelper.title = $('h3', helper.parent);helper.body = $('div.body', helper.parent);helper.url = $('div.url', helper.parent);}function settings(element) {return $.data(element, "tooltip");}// main event handler to start showing tooltipsfunction handle(event) {// show helper, either with timeout or on instantif( settings(this).delay )tID = setTimeout(show, settings(this).delay);elseshow();// if selected, update the helper position when the mouse movestrack = !!settings(this).track;$(document.body).bind('mousemove', update);// update at least onceupdate(event);}// save elements title before the tooltip is displayedfunction save() {// if this is the current source, or it has no title (occurs with click event), stopif ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) )return;// save currentcurrent = this;title = this.tooltipText;if ( settings(this).bodyHandler ) {helper.title.hide();var bodyContent = settings(this).bodyHandler.call(this);if (bodyContent.nodeType || bodyContent.jquery) {helper.body.empty().append(bodyContent)} else {helper.body.html( bodyContent );}helper.body.show();} else if ( settings(this).showBody ) {var parts = title.split(settings(this).showBody);helper.title.html(parts.shift()).show();helper.body.empty();for(var i = 0, part; (part = parts[i]); i++) {if(i > 0)helper.body.append("<br/>");helper.body.append(part);}helper.body.hideWhenEmpty();} else {helper.title.html(title).show();helper.body.hide();}// if element has href or src, add and show it, otherwise hide itif( settings(this).showURL && $(this).url() )helper.url.html( $(this).url().replace('http://', '') ).show();elsehelper.url.hide();// add an optional class for this tiphelper.parent.addClass(settings(this).extraClass);// fix PNG background for IEif (settings(this).fixPNG )helper.parent.fixPNG();handle.apply(this, arguments);}// delete timeout and show helperfunction show() {tID = null;if ((!IE || !$.fn.bgiframe) && settings(current).fade) {if (helper.parent.is(":animated"))helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity);elsehelper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade);} else {helper.parent.show();}update();}/*** callback for mousemove* updates the helper position* removes itself when no current element*/function update(event) {if($.tooltip.blocked)return;if (event && event.target.tagName == "OPTION") {return;}// stop updating when tracking is disabled and the tooltip is visibleif ( !track && helper.parent.is(":visible")) {$(document.body).unbind('mousemove', update)}// if no current element is available, remove this listenerif( current == null ) {$(document.body).unbind('mousemove', update);return;}// remove position helper classeshelper.parent.removeClass("viewport-right").removeClass("viewport-bottom");var left = helper.parent[0].offsetLeft;var top = helper.parent[0].offsetTop;if (event) {// position the helper 15 pixel to bottom right, starting from mouse positionleft = event.pageX + settings(current).left;top = event.pageY + settings(current).top;var right='auto';if (settings(current).positionLeft) {right = $(window).width() - left;left = 'auto';}helper.parent.css({left: left,right: right,top: top});}var v = viewport(),h = helper.parent[0];// check horizontal positionif (v.x + v.cx < h.offsetLeft + h.offsetWidth) {left -= h.offsetWidth + 20 + settings(current).left;helper.parent.css({left: left + 'px'}).addClass("viewport-right");}// check vertical positionif (v.y + v.cy < h.offsetTop + h.offsetHeight) {top -= h.offsetHeight + 20 + settings(current).top;helper.parent.css({top: top + 'px'}).addClass("viewport-bottom");}}function viewport() {return {x: $(window).scrollLeft(),y: $(window).scrollTop(),cx: $(window).width(),cy: $(window).height()};}// hide helper and restore added classes and the titlefunction hide(event) {if($.tooltip.blocked)return;// clear timeout if possibleif(tID)clearTimeout(tID);// no more current elementcurrent = null;var tsettings = settings(this);function complete() {helper.parent.removeClass( tsettings.extraClass ).hide().css("opacity", "");}if ((!IE || !$.fn.bgiframe) && tsettings.fade) {if (helper.parent.is(':animated'))helper.parent.stop().fadeTo(tsettings.fade, 0, complete);elsehelper.parent.stop().fadeOut(tsettings.fade, complete);} elsecomplete();if( settings(this).fixPNG )helper.parent.unfixPNG();}})(jQuery);