summaryrefslogtreecommitdiff
path: root/website/static/js/foundation3/jquery.foundation.tooltips.js
diff options
context:
space:
mode:
Diffstat (limited to 'website/static/js/foundation3/jquery.foundation.tooltips.js')
-rw-r--r--website/static/js/foundation3/jquery.foundation.tooltips.js211
1 files changed, 211 insertions, 0 deletions
diff --git a/website/static/js/foundation3/jquery.foundation.tooltips.js b/website/static/js/foundation3/jquery.foundation.tooltips.js
new file mode 100644
index 0000000..f2862de
--- /dev/null
+++ b/website/static/js/foundation3/jquery.foundation.tooltips.js
@@ -0,0 +1,211 @@
+/*
+ * jQuery Foundation Tooltips 2.0.2
+ * http://foundation.zurb.com
+ * Copyright 2012, ZURB
+ * Free to use under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+*/
+
+/*jslint unparam: true, browser: true, indent: 2 */
+
+;(function ($, window, undefined) {
+ 'use strict';
+
+ var settings = {
+ bodyHeight : 0,
+ selector : '.has-tip',
+ additionalInheritableClasses : [],
+ tooltipClass : '.tooltip',
+ tipTemplate : function (selector, content) {
+ return '<span data-selector="' + selector + '" class="' + settings.tooltipClass.substring(1) + '">' + content + '<span class="nub"></span></span>';
+ }
+ },
+ methods = {
+ init : function (options) {
+ settings = $.extend(settings, options);
+
+ // alias the old targetClass option
+ settings.selector = settings.targetClass ? settings.targetClass : settings.selector;
+
+ return this.each(function () {
+ var $body = $('body');
+
+ if (Modernizr.touch) {
+ $body.on('click.tooltip touchstart.tooltip touchend.tooltip', settings.selector, function (e) {
+ e.preventDefault();
+ $(settings.tooltipClass).hide();
+ methods.showOrCreateTip($(this));
+ });
+ $body.on('click.tooltip touchstart.tooltip touchend.tooltip', settings.tooltipClass, function (e) {
+ e.preventDefault();
+ $(this).fadeOut(150);
+ });
+ } else {
+ $body.on('mouseenter.tooltip mouseleave.tooltip', settings.selector, function (e) {
+ var $this = $(this);
+
+ if (e.type === 'mouseenter') {
+ methods.showOrCreateTip($this);
+ } else if (e.type === 'mouseleave') {
+ methods.hide($this);
+ }
+ });
+ }
+
+ $(this).data('tooltips', true);
+
+ });
+ },
+ showOrCreateTip : function ($target, content) {
+ var $tip = methods.getTip($target);
+
+ if ($tip && $tip.length > 0) {
+ methods.show($target);
+ } else {
+ methods.create($target, content);
+ }
+ },
+ getTip : function ($target) {
+ var selector = methods.selector($target),
+ tip = null;
+
+ if (selector) {
+ tip = $('span[data-selector=' + selector + ']' + settings.tooltipClass);
+ }
+ return (tip.length > 0) ? tip : false;
+ },
+ selector : function ($target) {
+ var id = $target.attr('id'),
+ dataSelector = $target.data('selector');
+
+ if (id === undefined && dataSelector === undefined) {
+ dataSelector = 'tooltip' + Math.random().toString(36).substring(7);
+ $target.attr('data-selector', dataSelector);
+ }
+ return (id) ? id : dataSelector;
+ },
+ create : function ($target, content) {
+ var $tip = $(settings.tipTemplate(methods.selector($target),
+ $('<div>').html(content ? content : $target.attr('title')).html())),
+ classes = methods.inheritable_classes($target);
+
+ $tip.addClass(classes).appendTo('body');
+ if (Modernizr.touch) {
+ $tip.append('<span class="tap-to-close">tap to close </span>');
+ }
+ $target.removeAttr('title');
+ methods.show($target);
+ },
+ reposition : function (target, tip, classes) {
+ var width, nub, nubHeight, nubWidth, column, objPos;
+
+ tip.css('visibility', 'hidden').show();
+
+ width = target.data('width');
+ nub = tip.children('.nub');
+ nubHeight = nub.outerHeight();
+ nubWidth = nub.outerWidth();
+
+ objPos = function (obj, top, right, bottom, left, width) {
+ return obj.css({
+ 'top' : top,
+ 'bottom' : bottom,
+ 'left' : left,
+ 'right' : right,
+ 'max-width' : (width) ? width : 'auto'
+ }).end();
+ };
+
+ objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', target.offset().left, width);
+ objPos(nub, -nubHeight, 'auto', 'auto', 10);
+
+ if ($(window).width() < 767) {
+ if (target.data('mobile-width')) {
+ tip.width(target.data('mobile-width')).css('left', 15).addClass('tip-override');
+ } else {
+ column = target.closest('.columns');
+ if (column.length < 0) {
+ // if not using Foundation
+ column = $('body');
+ }
+ if (column.outerWidth()) {
+ tip.width(column.outerWidth() - 25).css('left', 15).addClass('tip-override');
+ } else {
+ var tmp_width = Math.ceil($(window).width() * 0.9);
+ tip.width(tmp_width).css('left', 15).addClass('tip-override');
+ }
+ }
+ objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left);
+ } else {
+ if (classes && classes.indexOf('tip-top') > -1) {
+ objPos(tip, (target.offset().top - tip.outerHeight() - nubHeight), 'auto', 'auto', target.offset().left, width)
+ .removeClass('tip-override');
+ objPos(nub, 'auto', 'auto', -nubHeight, 'auto');
+ } else if (classes && classes.indexOf('tip-left') > -1) {
+ objPos(tip, (target.offset().top + (target.outerHeight() / 2) - nubHeight), 'auto', 'auto', (target.offset().left - tip.outerWidth() - 10), width)
+ .removeClass('tip-override');
+ objPos(nub, (tip.outerHeight() / 2) - (nubHeight / 2), -nubHeight, 'auto', 'auto');
+ } else if (classes && classes.indexOf('tip-right') > -1) {
+ objPos(tip, (target.offset().top + (target.outerHeight() / 2) - nubHeight), 'auto', 'auto', (target.offset().left + target.outerWidth() + 10), width)
+ .removeClass('tip-override');
+ objPos(nub, (tip.outerHeight() / 2) - (nubHeight / 2), 'auto', 'auto', -nubHeight);
+ } else if (classes && classes.indexOf('tip-centered-top') > -1) {
+ objPos(tip, (target.offset().top - tip.outerHeight() - nubHeight), 'auto', 'auto', (target.offset().left + ((target.outerWidth() - tip.outerWidth()) / 2) ), width)
+ .removeClass('tip-override');
+ objPos(nub, 'auto', ((tip.outerWidth() / 2) -(nubHeight / 2)), -nubHeight, 'auto');
+ } else if (classes && classes.indexOf('tip-centered-bottom') > -1) {
+ objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', (target.offset().left + ((target.outerWidth() - tip.outerWidth()) / 2) ), width)
+ .removeClass('tip-override');
+ objPos(nub, -nubHeight, ((tip.outerWidth() / 2) -(nubHeight / 2)), 'auto', 'auto');
+ }
+ }
+ tip.css('visibility', 'visible').hide();
+ },
+ inheritable_classes : function (target) {
+ var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'tip-centered-top', 'tip-centered-bottom', 'noradius'].concat(settings.additionalInheritableClasses),
+ classes = target.attr('class'),
+ filtered = classes ? $.map(classes.split(' '), function (el, i) {
+ if ($.inArray(el, inheritables) !== -1) {
+ return el;
+ }
+ }).join(' ') : '';
+
+ return $.trim(filtered);
+ },
+ show : function ($target) {
+ var $tip = methods.getTip($target);
+
+ methods.reposition($target, $tip, $target.attr('class'));
+ $tip.fadeIn(150);
+ },
+ hide : function ($target) {
+ var $tip = methods.getTip($target);
+
+ $tip.fadeOut(150);
+ },
+ reload : function () {
+ var $self = $(this);
+
+ return ($self.data('tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init');
+ },
+ destroy : function () {
+ return this.each(function () {
+ $(window).off('.tooltip');
+ $(settings.selector).off('.tooltip');
+ $(settings.tooltipClass).each(function (i) {
+ $($(settings.selector).get(i)).attr('title', $(this).text());
+ }).remove();
+ });
+ }
+ };
+
+ $.fn.foundationTooltips = function (method) {
+ if (methods[method]) {
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+ } else if (typeof method === 'object' || !method) {
+ return methods.init.apply(this, arguments);
+ } else {
+ $.error('Method ' + method + ' does not exist on jQuery.foundationTooltips');
+ }
+ };
+}(jQuery, this));