User:Jdlrobson/tipsyDeprecated.js
Appearance
From Meta, a Wikimedia project coordination wiki
This is an archived version of this page, as edited by Jdlrobson (talk | contribs) at 14:36, 17 May 2023. It may differ significantly from the current version .
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
$(function(){ functionmaybeCall(thing,ctx){ returntypeofthing=="function"?thing.call(ctx):thing; } functionTipsy(element,options){ this.$element=$(element); this.options=options; this.enabled=true; this.keyHandler=$.proxy(this.closeOnEsc,this); this.fixTitle(); } Tipsy.prototype={ show:function(){ vartitle=this.getTitle(); if(title&&this.enabled){ var$tip=this.tip(); $tip.find(".tipsy-inner")[this.options.html?"html":"text"](title); $tip[0].className="tipsy"; if(this.options.className){ $tip.addClass(maybeCall(this.options.className,this.$element[0])); } $tip.remove().css({top:0,left:0,visibility:"hidden",display:"block"}).attr("aria-hidden","true").appendTo(document.body); varpos=$.extend({},this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight}); vargravity=typeofthis.options.gravity=="function"?this.options.gravity.call(this.$element[0]):this.options.gravity; $tip.addClass("tipsy-"+gravity); if(this.options.className){ $tip.addClass(maybeCall(this.options.className,this.$element[0])); } varactualWidth=$tip[0].offsetWidth, actualHeight=$tip[0].offsetHeight; vartp; switch(gravity.charAt(0)){ case"n": tp={top:pos.top+pos.height+this.options.offset,left:pos.left+pos.width/2-actualWidth/2}; break; case"s": tp={top:pos.top-actualHeight-this.options.offset,left:pos.left+pos.width/2-actualWidth/2}; break; case"e": tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth-this.options.offset}; break; case"w": tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width+this.options.offset}; break; } if(gravity.length==2){ if(gravity.charAt(1)=="w"){ if(this.options.center){ tp.left=pos.left+pos.width/2-15; }else{ tp.left=pos.left; } }else{ if(this.options.center){ tp.left=pos.left+pos.width/2-actualWidth+15; }else{ tp.left=pos.left+pos.width; } } } $tip.css(tp); $(document).on("keydown",this.keyHandler); if(this.options.fade){ $tip.stop().css({opacity:0,display:"block",visibility:"visible"}).attr("aria-hidden","false").animate({opacity:this.options.opacity},100); }else{ $tip.css({visibility:"visible",opacity:this.options.opacity}).attr("aria-hidden","false"); } } }, hide:function(){ $(document).off("keydown",this.keyHandler); if(this.options.fade){ this.tip() .stop() .fadeOut(100,function(){ $(this).remove(); }); }else{ this.tip().remove(); } }, fixTitle:function(){ var$e=this.$element; if($e.attr("title")||typeof$e.attr("original-title")!="string"){ $e.attr("original-title",$e.attr("title")||"").removeAttr("title"); } }, getTitle:function(){ vartitle, $e=this.$element, o=this.options; this.fixTitle(); if(typeofo.title=="string"){ title=$e.attr(o.title=="title"?"original-title":o.title); }elseif(typeofo.title=="function"){ title=o.title.call($e[0]); } title=(""+title).replace(/(^\s*|\s*$)/,""); returntitle||o.fallback; }, tip:function(){ if(!this.$tip){ this.$tip=$('<div class="tipsy" role="tooltip"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'); } returnthis.$tip; }, validate:function(){ if(!this.$element[0].parentNode){ this.hide(); this.$element=null; this.options=null; } }, closeOnEsc:function(e){ if(e.keyCode===27){ this.hide(); } }, enable:function(){ this.enabled=true; }, disable:function(){ this.enabled=false; }, toggleEnabled:function(){ this.enabled=!this.enabled; }, }; $.fn.tipsy=function(options){ if(options===true){ returnthis.data("tipsy"); }elseif(typeofoptions=="string"){ vartipsy=this.data("tipsy"); if(tipsy)tipsy[options](); returnthis; } options=$.extend({},$.fn.tipsy.defaults,options); functionget(ele){ vartipsy=$.data(ele,"tipsy"); if(!tipsy){ tipsy=newTipsy(ele,$.fn.tipsy.elementOptions(ele,options)); $.data(ele,"tipsy",tipsy); } returntipsy; } functionenter(){ vartipsy=get(this); tipsy.hoverState="in"; if(options.delayIn==0){ tipsy.show(); }else{ tipsy.fixTitle(); setTimeout(function(){ if(tipsy.hoverState=="in")tipsy.show(); },options.delayIn); } } functionleave(){ vartipsy=get(this); tipsy.hoverState="out"; if(options.delayOut==0){ tipsy.hide(); }else{ setTimeout(function(){ if(tipsy.hoverState=="out")tipsy.hide(); },options.delayOut); } } this.each(function(){ get(this); }); if(options.trigger!="manual"){ vareventIn=options.trigger=="hover"?"mouseenter focus":"focus", eventOut=options.trigger=="hover"?"mouseleave blur":"blur"; if(options.live){ mw.track("mw.deprecate","tipsy-live"); mw.log.warn('Use of the "live" option of jquery.tipsy is no longer supported.'); } this.on(eventIn,enter).on(eventOut,leave); } returnthis; }; $.fn.tipsy.defaults={className:null,delayIn:0,delayOut:0,fade:true,fallback:"",gravity:"n",center:true,html:false,live:false,offset:0,opacity:1.0,title:"title",trigger:"hover"}; $.fn.tipsy.elementOptions=function(ele,options){ return$.metadata?$.extend({},options,$(ele).metadata()):options; }; $.fn.tipsy.autoNS=function(){ return$(this).offset().top>$(document).scrollTop()+$(window).height()/2?"s":"n"; }; $.fn.tipsy.autoWE=function(){ return$(this).offset().left>$(document).scrollLeft()+$(window).width()/2?"e":"w"; }; $.fn.tipsy.autoBounds=function(margin,prefer){ returnfunction(){ vardir={ns:prefer[0],ew:prefer.length>1?prefer[1]:false}, boundTop=$(document).scrollTop()+margin, boundLeft=$(document).scrollLeft()+margin, $this=$(this); if($this.offset().top<boundTop)dir.ns="n"; if($this.offset().left<boundLeft)dir.ew="w"; if($(window).width()+$(document).scrollLeft()-$this.offset().left<margin)dir.ew="e"; if($(window).height()+$(document).scrollTop()-$this.offset().top<margin)dir.ns="s"; returndir.ns+(dir.ew?dir.ew:""); }; }; }); mw.util.addCSS(".tipsy{padding:5px;position:absolute;z-index:100000;cursor:default}.tipsy-inner{background-color:#fff;color:#000;max-width:15em;padding:5px 8px 4px 8px;border:1px solid #a2a9b1;border-radius:2px}.tipsy-arrow{position:absolute;background:url(/w/resources/src/jquery.tipsy/images/tipsy.png?93eac) no-repeat top left;width:11px;height:6px} .tipsy-n .tipsy-arrow{top:0;left:50%;margin-left:-5px} .tipsy-nw .tipsy-arrow{top:0;left:10px} .tipsy-ne .tipsy-arrow{top:0;right:10px} .tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-5px;background-position:bottom left} .tipsy-sw .tipsy-arrow{bottom:0;left:10px;background-position:bottom left} .tipsy-se .tipsy-arrow{bottom:0;right:10px;background-position:bottom left} .tipsy-e .tipsy-arrow{top:50%;margin-top:-5px;right:0;width:6px;height:11px;background-position:top right} .tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;left:0;width:6px;height:11px}");