/*
-------------------------------------------------------
-- Tagui ToolTip
-------------------------------------------------------
*/
(function($)
{
"use strict";
// ------------------------------------------------
// -- Author: RGB Group
// ------------------------------------------------
// Plugin name
var plugin_name = 'tooltip';
var plugin_version = '1.0.0';
// Invoker object
var obj = null;
var obj_name = null;
// Var for parsed options
var options = null;
// Default paramteres
var defaults =
{
direction: 'up',
delay: 500 // miliseconds
};
// var for canceling timeout
var tooltipTimer;
// --------------------------------------------------------------------
// Class : TOOLS
// --------------------------------------------------------------------
var _tools =
{
} // END tools methods
// --------------------------------------------------------------------
// Class : PRIVATE
// --------------------------------------------------------------------
// private functions
var _private =
{
init : function()
{
// append div gor tool tip on page
$('body').append('
');
_private.AttachHandlers();
}, // END init
AttachHandlers : function()
{
$(obj).on('mouseenter','*[title]',function(e)
{
if ($(this).attr('title') != '')
{
$(this).attr( 'orig-title', $(this).attr('title') );
$(this).attr('title','');
var objj = this;
if (!$(objj).attr('data-tooltip') || ($(objj).attr('data-tooltip') != null && $(objj).attr('data-tooltip') != 'ignore') )
{
tooltipTimer = setTimeout(function()
{
var directt = ( $(objj).attr('data-tooltip') ) ? $(objj).attr('data-tooltip') : options.direction;
_private.PlaceTooltip( directt, objj);
},
options.delay);
}
}
});
$(obj).on('mouseleave','*[orig-title]',function(e)
{
if ($(this).attr('orig-title') != '')
{
$(this).attr( 'title', $(this).attr('orig-title') );
$(this).attr('orig-title','');
clearTimeout(tooltipTimer);
$('#tooltip').hide();
}
});
}, // END AttachHandlers
PlaceTooltip : function(direction, objj)
{
$('#tooltip').removeClass(); // remove all classes
$('#tooltip').addClass(direction);
// Set tooltip content
$('#tooltip').html($(objj).attr('orig-title').replace(/(\r\n|\n|\r)/gm,"
")); // replace all new lines with break lines
// Get element offset
var offset = $(objj).offset();
switch(direction)
{
case 'up':
$('#tooltip').css('top',offset.top - $('#tooltip').outerHeight() + 10 + 'px');//e.pageY + 10 + ((e.pageY + 10 + $(obj).height() > $( window ).height()) ? -1*($(obj).height()) : 0) + 'px');
$('#tooltip').css('left',offset.left + ( ( $(objj).outerWidth() - $('#tooltip').outerWidth() ) / 2) + 'px');//e.pageX +((e.pagex + $(obj).width() > $( window ).width()) ? -1*($(obj).width()) : 0) + 'px');
$('#tooltip').stop().animate(
{
opacity: 'show',
top: "-=20"
},100);
break;
case 'down':
$('#tooltip').css('top',offset.top + $(objj).outerHeight() - 10 + 'px');
$('#tooltip').css('left',offset.left + ( ( $(objj).outerWidth() - $('#tooltip').outerWidth() ) / 2) + 'px');
$('#tooltip').stop().animate(
{
opacity: 'show',
top: "+=20"
},100);
break;
case 'right':
$('#tooltip').css('top',offset.top + ( ( $(objj).outerHeight() - $('#tooltip').outerHeight() ) / 2) + 'px');
$('#tooltip').css('left',offset.left + $(objj).outerWidth() - 10 + 'px');
$('#tooltip').stop().animate(
{
opacity: 'show',
left: "+=20"
},100);
break;
case 'left':
$('#tooltip').css('top',offset.top + ( ( $(objj).outerHeight() - $('#tooltip').outerHeight() ) / 2) + 'px');
$('#tooltip').css('left',offset.left - $('#tooltip').outerWidth() + 10 + 'px');
$('#tooltip').stop().animate(
{
opacity: 'show',
left: "-=20"
},100);
break;
}
} // END
} // END _private
// --------------------------------------------------------------------
// Class : PUBLIC
// --------------------------------------------------------------------
var _public =
{
init : function( user_options )
{
// Settings to the defaults.
options = $.extend({},defaults);
// If options exist, lets merge them with our default settings.
if( user_options ) $.extend( options, user_options );
_private.init();
} // END init
} // END _public
$.fn[plugin_name] = function( method ){
// Method calling logic
if ( _public[method] )
{
return _public[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
}
else if ( typeof method === 'object' || ! method )
{
obj = $(this);
obj_name = $(this).attr('id');
return _public.init.apply( this, arguments );
}
else
{
$.error( 'Method ' + method + ' does not exist on jQuery.' + plugin_name );
}
}
$[plugin_name] = {};
})(jQuery);