1!function($){"use strict";var Tooltip=function(element,options){this.init('tooltip',element,options)} 2Tooltip.prototype={constructor:Tooltip,init:function(type,element,options){var eventIn,eventOut 3this.type=type 4this.$element=$(element) 5this.options=this.getOptions(options) 6this.enabled=true 7if(this.options.trigger=='click'){this.$element.on('click.'+this.type,this.options.selector,$.proxy(this.toggle,this))}else if(this.options.trigger!='manual'){eventIn=this.options.trigger=='hover'?'mouseenter':'focus' 8eventOut=this.options.trigger=='hover'?'mouseleave':'blur' 9this.$element.on(eventIn+'.'+this.type,this.options.selector,$.proxy(this.enter,this)) 10this.$element.on(eventOut+'.'+this.type,this.options.selector,$.proxy(this.leave,this))} 11this.options.selector?(this._options=$.extend({},this.options,{trigger:'manual',selector:''})):this.fixTitle()},getOptions:function(options){options=$.extend({},$.fn[this.type].defaults,options,this.$element.data()) 12if(options.delay&&typeof options.delay=='number'){options.delay={show:options.delay,hide:options.delay}} 13return options},enter:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type) 14if(!self.options.delay||!self.options.delay.show)return self.show() 15clearTimeout(this.timeout) 16self.hoverState='in' 17this.timeout=setTimeout(function(){if(self.hoverState=='in')self.show()},self.options.delay.show)},leave:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type) 18if(this.timeout)clearTimeout(this.timeout) 19if(!self.options.delay||!self.options.delay.hide)return self.hide() 20self.hoverState='out' 21this.timeout=setTimeout(function(){if(self.hoverState=='out')self.hide()},self.options.delay.hide)},show:function(){var $tip,inside,pos,actualWidth,actualHeight,placement,tp 22if(this.hasContent()&&this.enabled){$tip=this.tip() 23this.setContent() 24if(this.options.animation){$tip.addClass('fade')} 25placement=typeof this.options.placement=='function'?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement 26inside=/in/.test(placement) 27$tip.detach().css({top:0,left:0,display:'block'}).insertAfter(this.$element) 28pos=this.getPosition(inside) 29actualWidth=$tip[0].offsetWidth 30actualHeight=$tip[0].offsetHeight 31switch(inside?placement.split(' ')[1]:placement){case'bottom':tp={top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2} 32break 33case'top':tp={top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2} 34break 35case'left':tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth} 36break 37case'right':tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width} 38break} 39$tip.offset(tp).addClass(placement).addClass('in')}},setContent:function(){var $tip=this.tip(),title=this.getTitle() 40$tip.find('.tooltip-inner')[this.options.html?'html':'text'](title) 41$tip.removeClass('fade in top bottom left right')},hide:function(){var that=this,$tip=this.tip() 42$tip.removeClass('in') 43function removeWithAnimation(){var timeout=setTimeout(function(){$tip.off($.support.transition.end).detach()},500) 44$tip.one($.support.transition.end,function(){clearTimeout(timeout) 45$tip.detach()})} 46$.support.transition&&this.$tip.hasClass('fade')?removeWithAnimation():$tip.detach() 47return this},fixTitle:function(){var $e=this.$element 48if($e.attr('title')||typeof($e.attr('data-original-title'))!='string'){$e.attr('data-original-title',$e.attr('title')||'').attr('title','')}},hasContent:function(){return this.getTitle()},getPosition:function(inside){return $.extend({},(inside?{top:0,left:0}:this.$element.offset()),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var title,$e=this.$element,o=this.options 49title=$e.attr('data-original-title')||(typeof o.title=='function'?o.title.call($e[0]):o.title) 50return title},tip:function(){return this.$tip=this.$tip||$(this.options.template)},validate:function(){if(!this.$element[0].parentNode){this.hide() 51this.$element=null 52this.options=null}},enable:function(){this.enabled=true},disable:function(){this.enabled=false},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type) 53self[self.tip().hasClass('in')?'hide':'show']()},destroy:function(){this.hide().$element.off('.'+this.type).removeData(this.type)}} 54var old=$.fn.tooltip 55$.fn.tooltip=function(option){return this.each(function(){var $this=$(this),data=$this.data('tooltip'),options=typeof option=='object'&&option 56if(!data)$this.data('tooltip',(data=new Tooltip(this,options))) 57if(typeof option=='string')data[option]()})} 58$.fn.tooltip.Constructor=Tooltip 59$.fn.tooltip.defaults={animation:true,placement:'top',selector:false,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:'hover',title:'',delay:0,html:false} 60$.fn.tooltip.noConflict=function(){$.fn.tooltip=old 61return this}}(window.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.