User:Yair rand/ReferenceTooltips.js

// See mw:Reference Tooltips

// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js

$( function () {

var settings, settingsString, $footer, enabled, delay, isTouchscreen, settingsMenu;

if ( window.pg ) {

return;

}

function toggleRT( enable ) {

mw.loader.using( 'mediawiki.cookie', function () {

mw.cookie.set( 'RTsettings', ( enable ? '1' : '0' ) + '|' + settings[ 1 ] + '|' + settings[ 2 ], { path: '/', expires: 90 } );

location.reload();

} );

}

// Make sure we are in article, project, or help namespace

if ( [ '', 'Project', 'Help', 'Draft' ].indexOf( mw.config.get( 'wgCanonicalNamespace' ) ) > -1 ) {

mw.messages.set( {

'RT-enable': 'Enable Reference Tooltips',

'RT-disable': 'Disable Reference Tooltips',

'RT-disablenote': 'Once disabled, Reference Tooltips can be re-enabled using a link in the footer of the page.',

'RT-delay': 'Delay before the tooltip appears (in milliseconds): ',

'RT-activationmethod': 'Tooltip is activated by:',

'RT-hovering': 'hovering',

'RT-clicking': 'clicking',

'RT-options': 'Reference Tooltips options',

'RT-options-save': 'Save settings',

'RT-settings': 'Tooltip settings'

} );

settingsString = document.cookie.split( 'RTsettings=' )[ 1 ];

if ( settingsString ) {

settings = settingsString.split( ';' )[ 0 ].split( '%7C' );

enabled = !!+settings[ 0 ];

delay = +settings[ 1 ];

isTouchscreen = !!+settings[ 2 ];

} else {

enabled = true;

delay = 200;

isTouchscreen = 'ontouchstart' in document.documentElement;

settings = [ +enabled, delay, +isTouchscreen ];

}

if ( !enabled ) {

$footer = $( '#footer-places, #f-list' );

if ( !$footer.length ) {

$footer = $( '#footer li' ).parent();

}

$footer.append( $( '

  • ' ).append(

    $( '' )

    .text( mw.msg( 'RT-enable' ) )

    .attr( 'href', '' )

    .on( 'click', function ( e ) {

    e.preventDefault();

    toggleRT( true );

    } )

    ) );

    return;

    }

    $( '.reference' ).each( function () {

    var tooltipNode, hideTimer, showTimer, checkFlip = false;

    function findRef( h ) {

    h = h.firstChild; h = h && h.getAttribute && h.getAttribute( 'href' ); h = h && h.split( '#' ); h = h && h[ 1 ];

    h = h && document.getElementById( h );

    h = h && h.nodeName === 'LI' && h;

    return h;

    }

    function hide( refLink ) {

    if ( tooltipNode && tooltipNode.parentNode === document.body ) {

    hideTimer = setTimeout( function () {

    $( tooltipNode ).animate( { opacity: 0 }, 100, function () { document.body.removeChild( tooltipNode ); } );

    }, isTouchscreen ? 16 : 100 );

    } else {

    $( findRef( refLink ) ).removeClass( 'RTTarget' );

    }

    }

    function show() {

    if ( !tooltipNode.parentNode || tooltipNode.parentNode.nodeType === 11 ) {

    document.body.appendChild( tooltipNode );

    checkFlip = true;

    }

    $( tooltipNode ).stop().animate( { opacity: 1 }, 100 );

    clearTimeout( hideTimer );

    }

    function openSettingsMenu() {

    if ( settingsMenu ) {

    settingsMenu.dialog( 'open' );

    } else {

    settingsMenu = $( '

    ' )

    .append(

    $( '