https://wiki.cosmos.esa.int/planck-legacy-archive/index.php?title=MediaWiki:Gadget-ReferenceTooltips.js&feed=atom&action=history
MediaWiki:Gadget-ReferenceTooltips.js - Revision history
2024-03-29T13:57:55Z
Revision history for this page on the wiki
MediaWiki 1.31.6
https://wiki.cosmos.esa.int/planck-legacy-archive/index.php?title=MediaWiki:Gadget-ReferenceTooltips.js&diff=9263&oldid=prev
Rbailey: 1 revision: ReferenceToolTip Gadget
2014-07-17T12:59:47Z
<p>1 revision: ReferenceToolTip Gadget</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<tr class="diff-title" lang="en-GB">
<td colspan="1" style="background-color: #fff; color: #222; text-align: center;">← Older revision</td>
<td colspan="1" style="background-color: #fff; color: #222; text-align: center;">Revision as of 12:59, 17 July 2014</td>
</tr><tr><td colspan="2" class="diff-notice" lang="en-GB"><div class="mw-diff-empty">(No difference)</div>
</td></tr></table>
Rbailey
https://wiki.cosmos.esa.int/planck-legacy-archive/index.php?title=MediaWiki:Gadget-ReferenceTooltips.js&diff=9262&oldid=prev
Redrose64: sync per MediaWiki talk:Gadget-ReferenceTooltips.js#Hm
2012-08-22T16:12:35Z
<p>sync per <a href="/planck-legacy-archive/index.php?title=MediaWiki_talk:Gadget-ReferenceTooltips.js&action=edit&redlink=1" class="new" title="MediaWiki talk:Gadget-ReferenceTooltips.js (page does not exist)">MediaWiki talk:Gadget-ReferenceTooltips.js#Hm</a></p>
<p><b>New page</b></p><div>// See [[mw:Reference Tooltips]]<br />
<br />
window.pg || $(document).ready( function($) {<br />
<br />
// Make sure we are in article, project, or help namespace<br />
if ( wgCanonicalNamespace === '' || wgCanonicalNamespace === 'Project' || wgCanonicalNamespace === 'Help' ) {<br />
function toggleRT(o){<br />
mw.loader.using("jquery.cookie",function(){<br />
$.cookie("RTsettings",o+"|"+ settings[1] + "|" + settings[2], {path:"/",expires:90});<br />
location.reload();<br />
})<br />
}<br />
var settings = document.cookie.split("RTsettings=")[1];<br />
settings = settings ? settings.split(";")[0].split("%7C") : [1, 200, +("ontouchstart" in document.documentElement)];<br />
if( settings[0] == 0 ) {<br />
var footer = $("#footer-places, #f-list");<br />
if( footer.length === 0 ) {<br />
footer = $("#footer li").parent();<br />
}<br />
footer.append($("<li>").append($("<a>").text("Enable Reference Tooltips").attr("href","javascript:(function(){})()").click(function(){toggleRT(1)})));<br />
return;<br />
}<br />
var isTouchscreen = +settings[2],<br />
timerLength = isTouchscreen ? 0 : +settings[1],<br />
settingsMenu;<br />
$(".reference").each( function() {<br />
var tooltipNode, hideTimer, showTimer, checkFlip = false;<br />
function findRef( h ){<br />
h = h.firstChild.getAttribute("href"); h = h && h.split("#"); h = h && h[1];<br />
h = h && document.getElementById( h );<br />
h = h && h.nodeName == "LI" && h;<br />
return h;<br />
}<br />
function hide( refLink ){<br />
if( tooltipNode && tooltipNode.parentNode == document.body ) {<br />
hideTimer = setTimeout( function() {<br />
$(tooltipNode).animate({opacity: 0}, 100, function(){ document.body.removeChild( tooltipNode ) })<br />
}, isTouchscreen ? 16 : 100)<br />
} else {<br />
var h = findRef( refLink );<br />
h && (h.style.border = "");<br />
}<br />
}<br />
function show(){<br />
if( !tooltipNode.parentNode || tooltipNode.parentNode.nodeType === 11 ){<br />
document.body.appendChild( tooltipNode );<br />
checkFlip = true;<br />
}<br />
$(tooltipNode).stop().animate({opacity: 1}, 100)<br />
clearTimeout( hideTimer );<br />
}<br />
function openSettingsMenu(){<br />
if( settingsMenu ) {<br />
settingsMenu.dialog( "open" );<br />
} else {<br />
settingsMenu = $("<form>").append(<br />
$("<button>").css("width","100%").text("Disable Reference Tooltips").button().click(function(){toggleRT(0)}),<br />
$("<br>"),<br />
$("<small>").text("Once disabled, Reference Tooltips can be re-enabled using a link in the footer of the page."),<br />
$("<hr>"),<br />
$("<label>").text("Delay before the tooltip appears (in milliseconds): ").append($("<input>").attr({"type":"number","value":settings[1],step:50,min:0,max:5000})),<br />
$("<br>"),<br />
$("<span>").text("Tooltip is activated by:"),<br />
$("<label>").append(<br />
$("<input>").attr({"type":"radio", "name":"RTActivate", "checked":settings[2]==0&&"checked", "disabled":"ontouchstart" in document.documentElement&&"disabled"}),<br />
"hovering"<br />
),<br />
$("<label>").append(<br />
$("<input>").attr({"type":"radio", "name":"RTActivate", "checked":settings[2]==1&&"checked"}),<br />
"clicking"<br />
)<br />
).submit(function(e){e.preventDefault()}).dialog({modal:true,width:500,title:"Reference Tooltips options",buttons:{"Save settings":function(){<br />
var a = this.getElementsByTagName("input"),<br />
b = +a[0].value;<br />
$.cookie("RTsettings","1|"+ (b > -1 && b < 5001 ? b : settings[1]) + (a[1].checked ? "|0" : "|1"), {path:"/",expires:90});<br />
location.reload();<br />
}}});<br />
}<br />
}<br />
$(this)[ isTouchscreen ? 'click' : 'hover' ](function( e ){<br />
var _this = this;<br />
if( isTouchscreen ) {<br />
e.preventDefault();<br />
(tooltipNode && tooltipNode.parentNode == document.body) || setTimeout( function(){<br />
$( document.body ).on("click touchstart", function( e ) {<br />
e = e || event;<br />
e = e.target || e.srcElement;<br />
for( ; e && !$( e ).hasClass( "referencetooltip" ) ; )<br />
e = e.parentNode;<br />
if( !e ){<br />
clearTimeout( showTimer );<br />
hide( _this );<br />
$(document.body).off("click touchstart", arguments.callee)<br />
}<br />
})<br />
}, 0);<br />
}<br />
showTimer && clearTimeout( showTimer );<br />
showTimer = setTimeout( function() {<br />
var h = findRef( _this );<br />
if( !h ){return};<br />
if( !isTouchscreen && ( window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0 ) + $(window).height() > $( h ).offset().top + h.offsetHeight ) {<br />
h.style.border = "#080086 2px solid";<br />
return;<br />
}<br />
if(!tooltipNode){<br />
tooltipNode = document.createElement("ul");<br />
tooltipNode.className = "referencetooltip";<br />
var c = tooltipNode.appendChild( h.cloneNode( true ) );<br />
try {<br />
if( c.firstChild.nodeName != "A" ) {<br />
while( c.childNodes[1].nodeName == "A" && c.childNodes[1].getAttribute( "href" ).indexOf("#cite_ref-") !== -1 ) {<br />
do { c.removeChild( c.childNodes[1] ) } while ( c.childNodes[1].nodeValue == " " );<br />
}<br />
}<br />
} catch (e) { mw.log(e) }<br />
c.removeChild( c.firstChild );<br />
$( tooltipNode.firstChild.insertBefore( document.createElement( "span" ), tooltipNode.firstChild.firstChild ) ).addClass("RTsettings").attr("title", "Tooltip settings").click(function(){<br />
mw.loader.using(["jquery.cookie","jquery.ui.dialog"], openSettingsMenu);<br />
})<br />
tooltipNode.appendChild( document.createElement( "li" ) );<br />
isTouchscreen || $(tooltipNode).hover(show, hide);<br />
}<br />
show();<br />
var o = $(_this).offset(), oH = tooltipNode.offsetHeight;<br />
$(tooltipNode).css({top: o.top - oH, left: o.left - 7 });<br />
if( tooltipNode.offsetHeight > oH ) { // is it squished against the right side of the page?<br />
$(tooltipNode).css({left:'auto',right:0});<br />
tooltipNode.lastChild.style.marginLeft = (o.left - tooltipNode.offsetLeft) + "px";<br />
}<br />
if( checkFlip ) {<br />
if( o.top < tooltipNode.offsetHeight + ( window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0 ) ) { // is part of it above the top of the screen?<br />
$(tooltipNode).addClass("RTflipped").css({top: o.top + 12});<br />
} else if( tooltipNode.className === "referencetooltip RTflipped" ) { // cancel previous<br />
$(tooltipNode).removeClass("RTflipped");<br />
}<br />
checkFlip = false;<br />
}<br />
}, timerLength);<br />
}, isTouchscreen ? undefined : function(){clearTimeout(showTimer); hide(this); } )<br />
<br />
} );<br />
<br />
}<br />
<br />
} );</div>
Redrose64