Free cookie consent management tool by TermsFeed Policy Generator

source: branches/WebApplication/MVC2/HeuristicLabWeb.PluginHost/HLWebPluginHost/Content/jQuery/jQueryPlugins/DataTables-1.7.6/examples/examples_support/jquery.tooltip.js @ 6286

Last change on this file since 6286 was 6286, checked in by dkahn, 13 years ago

#1198 Added jQuery plus plugins

File size: 7.9 KB
RevLine 
[6286]1/*
2 * jQuery Tooltip plugin 1.3
3 *
4 * http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
5 * http://docs.jquery.com/Plugins/Tooltip
6 *
7 * Copyright (c) 2006 - 2008 Jörn Zaefferer
8 *
9 * $Id: jquery.tooltip.js 5741 2008-06-21 15:22:16Z joern.zaefferer $
10 *
11 * Dual licensed under the MIT and GPL licenses:
12 *   http://www.opensource.org/licenses/mit-license.php
13 *   http://www.gnu.org/licenses/gpl.html
14 */
15 
16;(function($) {
17 
18    // the tooltip element
19  var helper = {},
20    // the current tooltipped element
21    current,
22    // the title of the current element, used for restoring
23    title,
24    // timeout id for delayed tooltips
25    tID,
26    // IE 5.5 or 6
27    IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
28    // flag for mouse tracking
29    track = false;
30 
31  $.tooltip = {
32    blocked: false,
33    defaults: {
34      delay: 200,
35      fade: false,
36      showURL: true,
37      extraClass: "",
38      top: 15,
39      left: 15,
40      id: "tooltip"
41    },
42    block: function() {
43      $.tooltip.blocked = !$.tooltip.blocked;
44    }
45  };
46 
47  $.fn.extend({
48    tooltip: function(settings) {
49      settings = $.extend({}, $.tooltip.defaults, settings);
50      createHelper(settings);
51      return this.each(function() {
52          $.data(this, "tooltip", settings);
53          this.tOpacity = helper.parent.css("opacity");
54          // copy tooltip into its own expando and remove the title
55          this.tooltipText = this.title;
56          $(this).removeAttr("title");
57          // also remove alt attribute to prevent default tooltip in IE
58          this.alt = "";
59        })
60        .mouseover(save)
61        .mouseout(hide)
62        .click(hide);
63    },
64    fixPNG: IE ? function() {
65      return this.each(function () {
66        var image = $(this).css('backgroundImage');
67        if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
68          image = RegExp.$1;
69          $(this).css({
70            'backgroundImage': 'none',
71            'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
72          }).each(function () {
73            var position = $(this).css('position');
74            if (position != 'absolute' && position != 'relative')
75              $(this).css('position', 'relative');
76          });
77        }
78      });
79    } : function() { return this; },
80    unfixPNG: IE ? function() {
81      return this.each(function () {
82        $(this).css({'filter': '', backgroundImage: ''});
83      });
84    } : function() { return this; },
85    hideWhenEmpty: function() {
86      return this.each(function() {
87        $(this)[ $(this).html() ? "show" : "hide" ]();
88      });
89    },
90    url: function() {
91      return this.attr('href') || this.attr('src');
92    }
93  });
94 
95  function createHelper(settings) {
96    // there can be only one tooltip helper
97    if( helper.parent )
98      return;
99    // create the helper, h3 for title, div for url
100    helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')
101      // add to document
102      .appendTo(document.body)
103      // hide it at first
104      .hide();
105     
106    // apply bgiframe if available
107    if ( $.fn.bgiframe )
108      helper.parent.bgiframe();
109   
110    // save references to title and url elements
111    helper.title = $('h3', helper.parent);
112    helper.body = $('div.body', helper.parent);
113    helper.url = $('div.url', helper.parent);
114  }
115 
116  function settings(element) {
117    return $.data(element, "tooltip");
118  }
119 
120  // main event handler to start showing tooltips
121  function handle(event) {
122    // show helper, either with timeout or on instant
123    if( settings(this).delay )
124      tID = setTimeout(show, settings(this).delay);
125    else
126      show();
127   
128    // if selected, update the helper position when the mouse moves
129    track = !!settings(this).track;
130    $(document.body).bind('mousemove', update);
131     
132    // update at least once
133    update(event);
134  }
135 
136  // save elements title before the tooltip is displayed
137  function save() {
138    // if this is the current source, or it has no title (occurs with click event), stop
139    if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) )
140      return;
141
142    // save current
143    current = this;
144    title = this.tooltipText;
145   
146    if ( settings(this).bodyHandler ) {
147      helper.title.hide();
148      var bodyContent = settings(this).bodyHandler.call(this);
149      if (bodyContent.nodeType || bodyContent.jquery) {
150        helper.body.empty().append(bodyContent)
151      } else {
152        helper.body.html( bodyContent );
153      }
154      helper.body.show();
155    } else if ( settings(this).showBody ) {
156      var parts = title.split(settings(this).showBody);
157      helper.title.html(parts.shift()).show();
158      helper.body.empty();
159      for(var i = 0, part; (part = parts[i]); i++) {
160        if(i > 0)
161          helper.body.append("<br/>");
162        helper.body.append(part);
163      }
164      helper.body.hideWhenEmpty();
165    } else {
166      helper.title.html(title).show();
167      helper.body.hide();
168    }
169   
170    // if element has href or src, add and show it, otherwise hide it
171    if( settings(this).showURL && $(this).url() )
172      helper.url.html( $(this).url().replace('http://', '') ).show();
173    else
174      helper.url.hide();
175   
176    // add an optional class for this tip
177    helper.parent.addClass(settings(this).extraClass);
178
179    // fix PNG background for IE
180    if (settings(this).fixPNG )
181      helper.parent.fixPNG();
182     
183    handle.apply(this, arguments);
184  }
185 
186  // delete timeout and show helper
187  function show() {
188    tID = null;
189    if ((!IE || !$.fn.bgiframe) && settings(current).fade) {
190      if (helper.parent.is(":animated"))
191        helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity);
192      else
193        helper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade);
194    } else {
195      helper.parent.show();
196    }
197    update();
198  }
199 
200  /**
201   * callback for mousemove
202   * updates the helper position
203   * removes itself when no current element
204   */
205  function update(event)  {
206    if($.tooltip.blocked)
207      return;
208   
209    if (event && event.target.tagName == "OPTION") {
210      return;
211    }
212   
213    // stop updating when tracking is disabled and the tooltip is visible
214    if ( !track && helper.parent.is(":visible")) {
215      $(document.body).unbind('mousemove', update)
216    }
217   
218    // if no current element is available, remove this listener
219    if( current == null ) {
220      $(document.body).unbind('mousemove', update);
221      return;
222    }
223   
224    // remove position helper classes
225    helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");
226   
227    var left = helper.parent[0].offsetLeft;
228    var top = helper.parent[0].offsetTop;
229    if (event) {
230      // position the helper 15 pixel to bottom right, starting from mouse position
231      left = event.pageX + settings(current).left;
232      top = event.pageY + settings(current).top;
233      var right='auto';
234      if (settings(current).positionLeft) {
235        right = $(window).width() - left;
236        left = 'auto';
237      }
238      helper.parent.css({
239        left: left,
240        right: right,
241        top: top
242      });
243    }
244   
245    var v = viewport(),
246      h = helper.parent[0];
247    // check horizontal position
248    if (v.x + v.cx < h.offsetLeft + h.offsetWidth) {
249      left -= h.offsetWidth + 20 + settings(current).left;
250      helper.parent.css({left: left + 'px'}).addClass("viewport-right");
251    }
252    // check vertical position
253    if (v.y + v.cy < h.offsetTop + h.offsetHeight) {
254      top -= h.offsetHeight + 20 + settings(current).top;
255      helper.parent.css({top: top + 'px'}).addClass("viewport-bottom");
256    }
257  }
258 
259  function viewport() {
260    return {
261      x: $(window).scrollLeft(),
262      y: $(window).scrollTop(),
263      cx: $(window).width(),
264      cy: $(window).height()
265    };
266  }
267 
268  // hide helper and restore added classes and the title
269  function hide(event) {
270    if($.tooltip.blocked)
271      return;
272    // clear timeout if possible
273    if(tID)
274      clearTimeout(tID);
275    // no more current element
276    current = null;
277   
278    var tsettings = settings(this);
279    function complete() {
280      helper.parent.removeClass( tsettings.extraClass ).hide().css("opacity", "");
281    }
282    if ((!IE || !$.fn.bgiframe) && tsettings.fade) {
283      if (helper.parent.is(':animated'))
284        helper.parent.stop().fadeTo(tsettings.fade, 0, complete);
285      else
286        helper.parent.stop().fadeOut(tsettings.fade, complete);
287    } else
288      complete();
289   
290    if( settings(this).fixPNG )
291      helper.parent.unfixPNG();
292  }
293 
294})(jQuery);
Note: See TracBrowser for help on using the repository browser.