/* ------------------------------------------------------- -- 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);