diff options
author | jzaefferer <joern.zaefferer@gmail.com> | 2010-04-01 09:25:21 +0200 |
---|---|---|
committer | jzaefferer <joern.zaefferer@gmail.com> | 2010-04-01 09:25:21 +0200 |
commit | df31e22b9572ef105fc83e130041b1165023a4ac (patch) | |
tree | e1653b93d1dac73e1aeb570a3d1547928289c26e /ui | |
parent | ab8d15521785e764a6bf47beee0cfd18929607d3 (diff) | |
parent | 9ec4c4e682946b4480b5366aabf3bcf353ef49f9 (diff) | |
download | jquery-ui-df31e22b9572ef105fc83e130041b1165023a4ac.tar.gz jquery-ui-df31e22b9572ef105fc83e130041b1165023a4ac.zip |
Merge branch 'tooltip' of github.com:jquery/jquery-ui
Diffstat (limited to 'ui')
-rw-r--r-- | ui/jquery.ui.tooltip.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js new file mode 100644 index 000000000..166bff407 --- /dev/null +++ b/ui/jquery.ui.tooltip.js @@ -0,0 +1,145 @@ +/* + * jQuery UI Tooltip @VERSION + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tooltip + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function($) { + +// role=application on body required for screenreaders to correctly interpret aria attributes +if( !$(document.body).is('[role]') ){ + $(document.body).attr('role','application'); +} + +var increments = 0; + +$.widget("ui.tooltip", { + options: { + tooltipClass: "ui-widget-content", + content: function() { + return $(this).attr("title"); + }, + position: { + my: "left center", + at: "right center", + offset: "15 0" + } + }, + _init: function() { + var self = this; + this.tooltip = $("<div></div>") + .attr("id", "ui-tooltip-" + increments++) + .attr("role", "tooltip") + .attr("aria-hidden", "true") + .addClass("ui-tooltip ui-widget ui-corner-all") + .addClass(this.options.tooltipClass) + .appendTo(document.body) + .hide(); + this.tooltipContent = $("<div></div>") + .addClass("ui-tooltip-content") + .appendTo(this.tooltip); + this.opacity = this.tooltip.css("opacity"); + this.element + .bind("focus.tooltip mouseenter.tooltip", function(event) { + self.open(); + }) + .bind("blur.tooltip mouseleave.tooltip", function(event) { + self.close(); + }); + }, + + enable: function() { + this.options.disabled = false; + }, + + disable: function() { + this.options.disabled = true; + }, + + destroy: function() { + this.tooltip.remove(); + $.Widget.prototype.destroy.apply(this, arguments); + }, + + widget: function() { + return this.tooltip; + }, + + open: function() { + var target = this.element; + // already visible? possible when both focus and mouseover events occur + if (this.current && this.current[0] == target[0]) + return; + var self = this; + this.current = target; + this.currentTitle = target.attr("title"); + var content = this.options.content.call(target[0], function(response) { + // ignore async responses that come in after the tooltip is already hidden + if (self.current == target) + self._show(target, response); + }); + if (content) { + self._show(target, content); + } + }, + + _show: function(target, content) { + if (!content) + return; + + target.attr("title", ""); + + if (this.options.disabled) + return; + + this.tooltipContent.html(content); + this.tooltip.css({ + top: 0, + left: 0 + }).position($.extend(this.options.position, { + of: target + })); + + this.tooltip.attr("aria-hidden", "false"); + target.attr("aria-describedby", this.tooltip.attr("id")); + + if (this.tooltip.is(":animated")) + this.tooltip.stop().show().fadeTo("normal", this.opacity); + else + this.tooltip.is(':visible') ? this.tooltip.fadeTo("normal", this.opacity) : this.tooltip.fadeIn(); + + this._trigger( "open" ); + }, + + close: function() { + if (!this.current) + return; + + var current = this.current.attr("title", this.currentTitle); + this.current = null; + + if (this.options.disabled) + return; + + current.removeAttr("aria-describedby"); + this.tooltip.attr("aria-hidden", "true"); + + if (this.tooltip.is(':animated')) + this.tooltip.stop().fadeTo("normal", 0); + else + this.tooltip.stop().fadeOut(); + + this._trigger( "close" ); + } + +}); + +})(jQuery);
\ No newline at end of file |