/*
* jQuery Foundation Tooltip Plugin 1.0
* http://foundation.zurb.com
* Copyright 2012, ZURB
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*/
;(function($) {
var methods = {
init : function( options ) {
return this.each(function() {
var targets = $('.has-tip'),
tips = $('.tooltip'),
tipTemplate = function(target, content) {
return '' + content + '';
};
if (tips.length < 1) {
targets.each(function(i){
var target = $(this),
id = 'foundationTooltip' + i,
content = target.attr('title'),
classes = target.attr('class');
target.data('id', id);
var tip = $(tipTemplate(id, content));
tip.addClass(classes).removeClass('has-tip').appendTo('body');
if (Modernizr.touch) {
tip.append('tap to close ');
}
methods.reposition(target, tip, classes);
tip.fadeOut(150);
});
}
$(window).resize(function() {
var tips = $('.tooltip');
tips.each(function() {
var data = $(this).data();
target = targets = $('.has-tip'),
tip = $(this),
classes = tip.attr('class');
targets.each(function() {
($(this).data().id == data.id) ? target = $(this) : target = target;
});
methods.reposition(target, tip, classes);
});
});
if (Modernizr.touch) {
$('.tooltip').live('click touchstart touchend', function(e) {
e.preventDefault();
$(this).fadeOut(150);
});
targets.live('click touchstart touchend', function(e){
e.preventDefault();
$('.tooltip').hide();
$('span[data-id=' + $(this).data('id') + '].tooltip').fadeIn(150);
targets.attr('title', "");
});
} else {
targets.hover(function() {
$('span[data-id=' + $(this).data('id') + '].tooltip').fadeIn(150);
targets.attr('title', "");
}, function() {
$('span[data-id=' + $(this).data('id') + '].tooltip').fadeOut(150);
});
}
});
},
reposition : function(target, tip, classes) {
var width = target.data('width'),
nub = tip.children('.nub'),
nubHeight = nub.outerHeight(),
nubWidth = nub.outerWidth();
function nubPos(nub, top, right, bottom, left) {
nub.css({
'top' : top,
'bottom' : bottom,
'left' : left,
'right' : right
});
}
tip.css({
'top' : (target.offset().top + target.outerHeight() + 10),
'left' : target.offset().left,
'width' : width
});
nubPos(nub, -nubHeight, 'auto', 'auto', 10);
if ($(window).width() < 767) {
var row = target.parents('.row');
tip.width(row.outerWidth() - 20).css('left', row.offset().left);
nubPos(nub, -nubHeight, 'auto', 'auto', target.offset().left);
} else {
if (classes.indexOf('top') > -1) {
var top = target.offset().top - tip.outerHeight() - nubHeight;
tip.css({
'top' : top,
'left' : target.offset().left,
'width' : width
});
nubPos(nub, 'auto', 'auto', -nubHeight, 'auto');
} else if (classes.indexOf('left') > -1) {
tip.css({
'top' : target.offset().top - (target.outerHeight() / 2) - (nubHeight / 2),
'left' : target.offset().left - tip.outerWidth() - 10,
'width' : width
});
nubPos(nub, (tip.outerHeight() / 2) - (nubHeight / 2), -nubHeight, 'auto', 'auto');
} else if (classes.indexOf('right') > -1){
tip.css({
'top' : target.offset().top - (target.outerHeight() / 2) - (nubHeight / 2),
'left' : target.offset().left + target.outerWidth() + 10,
'width' : width
});
nubPos(nub, (tip.outerHeight() / 2) - (nubHeight / 2), 'auto', 'auto', -nubHeight);
}
}
}
};
$.fn.tooltips = 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.zSlide' );
}
};
})(jQuery);;