1jQuery.gtooltip = { 2 'tipclass' : 'gtooltip', 3 'awaytime': 800, 4 'ontime': 0, 5 'ajax': 0, 6 'ajax_cache': {}, 7 'ajaxloading': 'Loading....', 8 'append': 'after', 9 'position':'top', 10 'closable':0, 11 'on_close':'hide', 12 'tid':'', 13 'content':'', 14 'trigger':'hover', 15 'resetOnShow':false, 16 'createOnShow':false, 17 'spacing':3, 18 'arrow_size':7, 19 'css':{ 20 'background-color':'#000', 21 'border-color':'#000', 22 'border-radius':'4px', 23 'border-width':'1px', 24 'padding':'8px', 25 'color':'#fff', 26 'font-size':'12px', 27 'max-width':'200px', 28 'text-align':'center', 29 }, 30}; 31 32(function($){ 33 $.fn.gtooltip = function(options, params){ 34 if(this.length > 0){ 35 if($.type(params) === 'undefined' && $.type(options) === 'object'){ 36 params = options; 37 } 38 39 if($.type(options) === 'undefined' || $.type(options) === 'object'){ 40 params = $.extend(true, {}, $.gtooltip, params); 41 42 var prefix = ''; 43 if(params.tid){ 44 prefix = '-'+params.tid; 45 } 46 47 return this.each(function(){ 48 if(!$(this).data('gtooltip'+prefix)){ 49 $(this).data('gtooltip'+prefix, new GTooltip(this, params)); 50 } 51 }); 52 } 53 54 if($.type(options) === 'string'){ 55 params = $.extend(true, {}, $.gtooltip, params); 56 57 var prefix = ''; 58 if(params.tid){ 59 prefix = '-'+params.tid; 60 } 61 62 var tip = $(this).data('gtooltip'+prefix); 63 if(typeof tip == 'undefined'){ 64 return null; 65 } 66 67 switch (options){ 68 case 'show': 69 return tip.show(); 70 case 'hide': 71 return tip.hide(); 72 case 'destroy': 73 return tip.destroy(); 74 case 'reset': 75 return tip.reset(); 76 case 'get': 77 return tip.get(); 78 } 79 } 80 } 81 } 82 83 var GTooltip = function(elem, params){ 84 this.element = elem; 85 this.settings = params; 86 87 this.shown = false; 88 this.hidden = false; 89 90 this.content = null; 91 this.location = null; 92 93 this.init(); 94 }; 95 96 GTooltip.prototype = { 97 init: function(){ 98 var ttObj = this; 99 ttObj.create(); 100 101 if(ttObj.settings.trigger == 'hover'){ 102 ttObj.initHover(); 103 }else if(ttObj.settings.trigger == 'click'){ 104 ttObj.initClick(); 105 } 106 107 //show events 108 $(ttObj.element).on('show.gtooltip', function(){ 109 if(ttObj.settings.resetOnShow || ttObj.settings.createOnShow){ 110 ttObj.reset(); 111 } 112 //check ajax data 113 if(ttObj.settings.ajax){ 114 if($.type($(ttObj.element).data('ajax')) !== 'undefined'){ 115 if($.type(ttObj.ajax_result) === 'undefined'){ 116 ttObj.setContent(ttObj.settings.ajaxloading); 117 ttObj.reset(); 118 $.ajax({ 119 "type" : "GET", 120 "url" : $(ttObj.element).data('ajax'), 121 "cache" : true, 122 "beforeSend" : function(res){ 123 //ttObj.setContent(ttObj.settings.ajaxloading); 124 }, 125 "success" : function(res){ 126 ttObj.setContent(res); 127 ttObj.ajax_result = res; 128 }, 129 }); 130 } 131 } 132 } 133 }); 134 }, 135 136 get: function(){ 137 var ttObj = this; 138 return ttObj; 139 }, 140 141 destroy: function(){ 142 var ttObj = this; 143 ttObj.tip.remove(); 144 145 var prefix = ''; 146 if(ttObj.settings.tid){ 147 prefix = '-'+ttObj.settings.tid; 148 } 149 $(ttObj.element).removeData('gtooltip'+prefix); 150 return true; 151 }, 152 153 initClick: function(){ 154 var ttObj = this; 155 $(ttObj.element).on('click', function(){ 156 if(ttObj.shown){ 157 ttObj.hide(); 158 }else{ 159 ttObj.show(); 160 } 161 }); 162 }, 163 164 initHover: function(){ 165 var ttObj = this; 166 $(ttObj.element).on('mouseover', function(){ 167 clearTimeout(ttObj.awaytime); 168 //$this.gtooltip('show'); 169 var ontime_timeout = setTimeout(function(){ 170 ttObj.show(); 171 ttObj.tip.on('mouseover', function(){ 172 clearTimeout(ttObj.awaytime); 173 }); 174 ttObj.tip.on('mouseleave', function(){ 175 var awaytime_timeout = setTimeout(function(){ 176 ttObj.hide(); 177 }, ttObj.settings.awaytime); 178 ttObj.awaytime = awaytime_timeout; 179 }); 180 }, ttObj.settings.ontime); 181 ttObj.ontime = ontime_timeout; 182 }); 183 $(ttObj.element).on('mouseleave', function(){ 184 clearTimeout(ttObj.ontime); 185 var awaytime_timeout = setTimeout(function(){ 186 ttObj.hide(); 187 }, ttObj.settings.awaytime); 188 ttObj.awaytime = awaytime_timeout; 189 }); 190 }, 191 192 initClose: function(){ 193 var ttObj = this; 194 195 ttObj.tip.find('.gtooltip-close').on('click', function(){ 196 /*if($.isFunction(ttObj.settings.onClose)){ 197 ttObj.settings.onClose.call(this); 198 }*/ 199 $(ttObj.element).trigger('close.gtooltip'); 200 201 if(ttObj.settings.on_close == 'hide'){ 202 ttObj.hide(); 203 }else if(ttObj.settings.on_close == 'destroy'){ 204 ttObj.destroy(); 205 } 206 }); 207 }, 208 209 initContent: function(){ 210 var ttObj = this; 211 212 if($(ttObj.element).prop('title')){ 213 ttObj.content = $(ttObj.element).prop('title'); 214 $(ttObj.element).prop('title', ''); 215 } 216 217 if(ttObj.settings.content){ 218 ttObj.content = ttObj.settings.content; 219 }else{ 220 if($(ttObj.element).data('content')){ 221 ttObj.content = $(ttObj.element).data('content'); 222 }else{ 223 //$(ttObj.element).data('content', $(ttObj.element).prop('title')); 224 } 225 } 226 }, 227 228 229 setContent: function(content){ 230 var ttObj = this; 231 232 ttObj.content = content; 233 ttObj.tip.find('.gtooltip-content').html(content); 234 }, 235 236 show: function(){ 237 var ttObj = this; 238 239 $(ttObj.element).triggerHandler('show.gtooltip'); 240 241 ttObj.tip.show(); 242 ttObj.shown = true; 243 ttObj.hidden = false;
244 return true; 245 }, 246 247 hide: function(){ 248 var ttObj = this; 249 250 $(ttObj.element).triggerHandler('hide.gtooltip'); 251 252 ttObj.tip.hide(); 253 ttObj.hidden = true; 254 ttObj.shown = false; 255 return true; 256 }, 257 258 reset: function(){ 259 var ttObj = this; 260 //ttObj.destroy(); 261 if($.type(ttObj.tip) !== 'undefined' && $.contains(document, ttObj.tip[0])){ 262 ttObj.tip.remove(); 263 } 264 ttObj.create(); 265 return true; 266 }, 267 268 create: function(){ 269 var ttObj = this; 270 271 if($.type(ttObj.tip) !== 'undefined' && $.contains(document, ttObj.tip[0])){ 272 //tip already exists and we don't need to create a new one 273 return; 274 } 275 276 ttObj.createTip(); 277 ttObj.positionTip(); 278 ttObj.styleTip(); 279 ttObj.initClose(); 280 }, 281 282 createTip: function(){ 283 var ttObj = this; 284 285 if(ttObj.settings.closable){ 286 var $close_button = '<div class="gtooltip-close">×</div>'; 287 }else{ 288 var $close_button = ''; 289 } 290 291 ttObj.tip = $('<div class="'+ttObj.settings.tipclass+'" tid="'+ttObj.settings.tid+'">'+$close_button+'<div class="gtooltip-content">'+'</div><div class="gtooltip-arrow-border gtooltip-arrow-border-'+ttObj.settings.position+'"></div><div class="gtooltip-arrow gtooltip-arrow-'+ttObj.settings.position+'"></div></div>'); 292 ttObj.initContent(); 293 ttObj.setContent(ttObj.content); 294 }, 295 296 positionTip: function(){ 297 var ttObj = this; 298 299 //calculate position 300 var $offset = $(ttObj.element).offset(); 301 var $position = $(ttObj.element).position(); 302 if($(ttObj.element).data('target')){ 303 var $offset = $(ttObj.element).data('target').offset(); 304 var $position = $(ttObj.element).data('target').position(); 305 } 306 307 if(ttObj.settings.append == 'after'){ 308 $(ttObj.element).after(ttObj.tip); 309 ttObj.location = $position; 310 }else if(ttObj.settings.append == 'body'){ 311 $('body').append(ttObj.tip); 312 ttObj.location = $offset; 313 } 314 }, 315 316 styleTip: function(){ 317 var ttObj = this; 318 319 //apply css 320 ttObj.tip.css(ttObj.settings.css); 321 var arrow_css = {}; 322 arrow_css['border-'+ttObj.settings.position+'-color'] = ttObj.settings.css['background-color']; 323 ttObj.tip.find('.gtooltip-arrow').css(arrow_css); 324 var arrow_border_css = {}; 325 arrow_border_css['border-'+ttObj.settings.position+'-color'] = ttObj.settings.css['border-color']; 326 ttObj.tip.find('.gtooltip-arrow-border').css(arrow_border_css); 327 328 ttObj.tip.find('.gtooltip-arrow, .gtooltip-arrow-border').css('border-width', ttObj.settings.arrow_size + 'px'); 329 330 var border_width = parseInt(ttObj.settings.css['border-width']); 331 332 if(ttObj.settings.position == 'top'){ 333 var $top = ttObj.location.top - ttObj.tip.outerHeight() - ttObj.tip.find('.gtooltip-arrow').outerHeight() - ttObj.settings.spacing; 334 var $left = ttObj.location.left + $(ttObj.element).outerWidth()/2 - ttObj.tip.outerWidth()/2; 335 //var $bottom = $(window).height() - ttObj.location.top + ttObj.tip.find('.gtooltip-arrow').outerHeight() + tip.settings.spacing; 336 var $bottom = $(window).height() - $top - ttObj.tip.outerHeight(true); 337 338 ttObj.tip.find('.gtooltip-arrow-border').css('left', ttObj.tip.outerWidth()/2 - ttObj.tip.find('.gtooltip-arrow-border').outerWidth()/2); 339 ttObj.tip.find('.gtooltip-arrow').css('left', ttObj.tip.outerWidth()/2 - ttObj.tip.find('.gtooltip-arrow').outerWidth()/2); 340 341 ttObj.tip.find('.gtooltip-arrow, .gtooltip-arrow-border').css('border-bottom-width', '0px'); 342 ttObj.tip.find('.gtooltip-arrow').css('bottom', -1 * (ttObj.settings.arrow_size) + 'px'); 343 ttObj.tip.find('.gtooltip-arrow-border').css('bottom', -1 * (ttObj.settings.arrow_size + border_width + 1) + 'px'); 344 ttObj.tip.find('.gtooltip-arrow-border').css('border-top-width', (ttObj.settings.arrow_size + 1) + 'px'); 345 }else if(ttObj.settings.position == 'bottom'){ 346 var $top = ttObj.location.top + $(ttObj.element).outerHeight() + ttObj.tip.find('.gtooltip-arrow').outerHeight() + ttObj.settings.spacing; 347 var $left = ttObj.location.left + $(ttObj.element).outerWidth()/2 - ttObj.tip.outerWidth()/2; 348 349 ttObj.tip.find('.gtooltip-arrow-border').css('left', ttObj.tip.outerWidth()/2 - ttObj.tip.find('.gtooltip-arrow-border').outerWidth()/2); 350 ttObj.tip.find('.gtooltip-arrow').css('left', ttObj.tip.outerWidth()/2 - ttObj.tip.find('.gtooltip-arrow').outerWidth()/2); 351 352 ttObj.tip.find('.gtooltip-arrow, .gtooltip-arrow-border').css('border-top-width', '0px'); 353 ttObj.tip.find('.gtooltip-arrow').css('top', -1 * (ttObj.settings.arrow_size) + 'px'); 354 ttObj.tip.find('.gtooltip-arrow-border').css('top', -1 * (ttObj.settings.arrow_size + border_width + 1) + 'px'); 355 ttObj.tip.find('.gtooltip-arrow-border').css('border-bottom-width', (ttObj.settings.arrow_size + 1) + 'px'); 356 }else if(ttObj.settings.position == 'right'){ 357 var $top = ttObj.location.top + $(ttObj.element).outerHeight()/2 - ttObj.tip.outerHeight()/2; 358 var $left = ttObj.location.left + $(ttObj.element).outerWidth() + ttObj.tip.find('.gtooltip-arrow').outerWidth() + ttObj.settings.spacing; 359 360 ttObj.tip.find('.gtooltip-arrow-border').css('top', ttObj.tip.outerHeight()/2 - ttObj.tip.find('.gtooltip-arrow-border').outerHeight()/2); 361 ttObj.tip.find('.gtooltip-arrow').css('top', ttObj.tip.outerHeight()/2 - ttObj.tip.find('.gtooltip-arrow').outerHeight()/2); 362 363 ttObj.tip.find('.gtooltip-arrow, .gtooltip-arrow-border').css('border-left-width', '0px'); 364 ttObj.tip.find('.gtooltip-arrow').css('left', -1 * (ttObj.settings.arrow_size) + 'px'); 365 ttObj.tip.find('.gtooltip-arrow-border').css('left', -1 * (ttObj.settings.arrow_size + border_width + 1) + 'px'); 366 ttObj.tip.find('.gtooltip-arrow-border').css('border-right-width', (ttObj.settings.arrow_size + 1) + 'px'); 367 }else if(ttObj.settings.position == 'left'){ 368 var $top = ttObj.location.top + $(ttObj.element).outerHeight()/2 - ttObj.tip.outerHeight()/2; 369 var $left = ttObj.location.left - ttObj.tip.outerWidth() - ttObj.tip.find('.gtooltip-arrow').outerWidth() - ttObj.settings.spacing; 370 371 ttObj.tip.find('.gtooltip-arrow-border').css('top', ttObj.tip.outerHeight()/2 - ttObj.tip.find('.gtooltip-arrow-border').outerHeight()/2); 372 ttObj.tip.find('.gtooltip-arrow').css('top', ttObj.tip.outerHeight()/2 - ttObj.tip.find('.gtooltip-arrow').outerHeight()/2); 373 374 ttObj.tip.find('.gtooltip-arrow, .gtooltip-arrow-border').css('border-right-width', '0px'); 375 ttObj.tip.find('.gtooltip-arrow').css('right', -1 * (ttObj.settings.arrow_size) + 'px'); 376 ttObj.tip.find('.gtooltip-arrow-border').css('right', -1 * (ttObj.settings.arrow_size + border_width + 1) + 'px'); 377 ttObj.tip.find('.gtooltip-arrow-border').css('border-left-width', (ttObj.settings.arrow_size + 1) + 'px'); 378 } 379 ttObj.tip.css('top', $top); 380 //set bottom css and unset top to account for any dynamic content changes 381 if(ttObj.settings.position == 'top' && ttObj.settings.append == 'body'){ 382 ttObj.tip.css('bottom', $bottom); 383 ttObj.tip.css('top', ''); 384 } 385 //ttObj.tip.css('left', $(ttObj.element).outerWidth()/2 - 30 - 10); //element width - ttObj arrow left shift - arrow's border width 386 ttObj.tip.css('left', $left); 387 ttObj.tip.hide(); 388 389 return true; 390 }, 391 }; 392}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.