(Created page with "→Any JavaScript here will be loaded for all users on every page load.: // default setting to turn tooltips on var tooltipsOn = true; var $tfb; var activeHoverLink = null...") |
No edit summary |
||
Line 104: | Line 104: | ||
}); |
}); |
||
}); |
}); |
||
+ | |||
+ | $( function() { |
||
+ | 'use strict'; |
||
+ | |||
+ | |||
+ | /** |
||
+ | * Tab loader |
||
+ | * |
||
+ | * Loads content when a header tab is clicked |
||
+ | */ |
||
+ | $( window ).on( 'hashchange.tabs', function() { |
||
+ | var tab = location.hash.match( /^#tab=(.+)/ ); |
||
+ | if ( !tab || !$( '#' + tab[1] ).find( '.load-tab' ).length ) { |
||
+ | return; |
||
+ | } |
||
+ | tab = tab[1]; |
||
+ | var $content = $( '#' + tab ); |
||
+ | |||
+ | $.ajax( { |
||
+ | url: '/api.php', |
||
+ | data: { |
||
+ | format: 'json', |
||
+ | action: 'parse', |
||
+ | prop: 'text', |
||
+ | title: mw.config.get( 'wgPageName' ), |
||
+ | text: '{' + '{:' + $content.find( '.load-tab' ).data( 'page' ) + '}}' |
||
+ | }, |
||
+ | dataType: 'json', |
||
+ | timeout: 20000 |
||
+ | } ).done( function( data ) { |
||
+ | if ( data.error ) { |
||
+ | mw.log( data.error ); |
||
+ | return; |
||
+ | } |
||
+ | |||
+ | $content.html( '<p/>' + data.parse.text['*'] ); |
||
+ | |||
+ | // Apply some JS to the new content |
||
+ | // Tooltips |
||
+ | $content.find( 'span.ajaxttlink' ).each( bindTT ); |
||
+ | // Tablesorter |
||
+ | if ( $content.find( 'table.sortable' ).length ) { |
||
+ | mw.loader.using( 'jquery.tablesorter', function() { |
||
+ | $content.find( 'table.sortable' ).tablesorter(); |
||
+ | } ); |
||
+ | } |
||
+ | } ).fail( function( error ) { |
||
+ | mw.log( error ); |
||
+ | } ); |
||
+ | } ); |
||
+ | |||
+ | // Trigger the event on page load if the currently focused tab isn't loaded |
||
+ | if ( location.hash.match( /^#tab=.+/ ) ) { |
||
+ | mw.loader.using( 'jquery.ui.tabs', function() { |
||
+ | // Wait a bit for the tabification to happen |
||
+ | setTimeout( function() { |
||
+ | if ( $( '.ui-tabs > div:not(.ui-tabs-hide) .load-tab' ).length ) { |
||
+ | $( window ).trigger( 'hashchange.tabs' ); |
||
+ | } |
||
+ | }, 500 ); |
||
+ | } ); |
||
+ | } |
||
+ | |||
+ | |||
+ | } ); |
Revision as of 22:02, 16 December 2013
/* Any JavaScript here will be loaded for all users on every page load. */
// default setting to turn tooltips on
var tooltipsOn = true;
var $tfb;
var activeHoverLink = null;
var tipCache = new Object();
// hides the tooltip
function hideTip() {
$tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility","hidden");
activeHoverLink = null;
}
// displays the tooltip
function displayTip(e) {
$tfb.not(":empty").removeClass("hidden").addClass("tooltip-ready");
moveTip(e);
$tfb.not(":empty").css("visibility","visible");
moveTip(e);
}
// moves the tooltip
function moveTip(e) {
$ct = $tfb.not(":empty");
var newTop = e.clientY + ((e.clientY > ($(window).height()/2)) ? -($ct.innerHeight()+20):20);
var newLeft = e.clientX + ((e.clientX > ($(window).width()/2)) ? -($ct.innerWidth()+20):20);
$ct.css({"position":"fixed","top":newTop + "px","left":newLeft + "px"});
}
// AJAX tooltips
function showTip(e) {
var $t=$(this);
activeHoverLink = $t;
$p=$t.parent();
if ($p.hasClass("selflink")==false) {
$t.removeAttr("title");
$p.removeAttr("title");
var url = "/index.php?title="+$t.data("tt").replace(/ /g,"_").replace(/\?/g,"%3F")+"&action=render .tooltip-content";
if (tipCache[url] != null) {
$tfb.html(tipCache[url]);
displayTip(e);
return;
}
$tfb.load(url,function () {
if ($t != activeHoverLink) return;
if ($tfb.html() == "") $tfb.html('<div class="tooltip-content"><b>Error</b><br />This target either has no tooltip<br />or was not intended to have one.</div>');
$tfb.find(".tooltip-content").css("display","");
tipCache[url] = $tfb.html();
displayTip(e);
});
}
}
function bindTT() {
$t=$(this);
$p=$t.parent();
if ($p.hasClass("selflink") == false) {
$t.data("tt", $p.attr("title").replace(" (page does not exist)","").replace("?","%3F")).hover(showTip,hideTip).mousemove(moveTip);
}
}
// check to see if it is active then do it
function ttMouseOver() {
if (tooltipsOn) {
$("#bodyContent").append('<div id="tfb" class="htt"></div>');
$tfb = $("#tfb");
$("#bodyContent span.ajaxttlink").each(bindTT);
}
}
$(ttMouseOver);
addOnloadHook(function() {
$('.rolloverToggle').hover(
function() {
$('.rolloverItem', this).hide();
$('.rolloverB', this).show();
},
function() {
$('.rolloverItem', this).hide();
$('.rolloverA', this).show();
});
});
addOnloadHook(function() {
$('.tabdiv > div').hide();
$('.tabdiv').each(function() {
$(this).find('> ul li:first').addClass('active');
$(this).find('> div:first').show();
});
$('.tabdiv > ul li a').each(function() {
var target = $(this).attr('href');
$(this).attr('href', ''); // Opera hates real hrefs
$(this).parent().click(function() {
$(this).parent().find('> li').removeClass('active');
$(this).parent().parent().find('> div').hide();
$(this).addClass('active');
$(target).show();
return false;
});
});
});
$( function() {
'use strict';
/**
* Tab loader
*
* Loads content when a header tab is clicked
*/
$( window ).on( 'hashchange.tabs', function() {
var tab = location.hash.match( /^#tab=(.+)/ );
if ( !tab || !$( '#' + tab[1] ).find( '.load-tab' ).length ) {
return;
}
tab = tab[1];
var $content = $( '#' + tab );
$.ajax( {
url: '/api.php',
data: {
format: 'json',
action: 'parse',
prop: 'text',
title: mw.config.get( 'wgPageName' ),
text: '{' + '{:' + $content.find( '.load-tab' ).data( 'page' ) + '}}'
},
dataType: 'json',
timeout: 20000
} ).done( function( data ) {
if ( data.error ) {
mw.log( data.error );
return;
}
$content.html( '<p/>' + data.parse.text['*'] );
// Apply some JS to the new content
// Tooltips
$content.find( 'span.ajaxttlink' ).each( bindTT );
// Tablesorter
if ( $content.find( 'table.sortable' ).length ) {
mw.loader.using( 'jquery.tablesorter', function() {
$content.find( 'table.sortable' ).tablesorter();
} );
}
} ).fail( function( error ) {
mw.log( error );
} );
} );
// Trigger the event on page load if the currently focused tab isn't loaded
if ( location.hash.match( /^#tab=.+/ ) ) {
mw.loader.using( 'jquery.ui.tabs', function() {
// Wait a bit for the tabification to happen
setTimeout( function() {
if ( $( '.ui-tabs > div:not(.ui-tabs-hide) .load-tab' ).length ) {
$( window ).trigger( 'hashchange.tabs' );
}
}, 500 );
} );
}
} );