MediaWiki:Common.js: Difference between revisions
(Test -- Wikia wikis should already support jquery) |
(Old tooltip code not loading -- testing Pcj's tooltip code from a Wikia site) |
||
Line 3: | Line 3: | ||
// Duplicate image list | // Duplicate image list | ||
importScript('User:Arkalor/dupimages.js'); | importScript('User:Arkalor/dupimages.js'); | ||
/* --- Standard Functions --- */ | |||
/** name - cookie name, value - 'on' or 'off' or whatever, exdays - expiry of cookie in days */ | |||
function setCookie(name, value, exdays) { // Sets a cookie | |||
value = name + "=" + escape(value); | |||
if (exdays !== null) { var d = new Date(); value += ";expires=" + d.setDate(d.getDate() + exdays).toGMTString(); } | |||
document.cookie = value; | |||
} | |||
/** name - cookie name, @return - cookie or empty string */ | |||
function getCookie(name) { // Gets a cookie | |||
var c = document.cookie; | |||
if (c.length > 0) { | |||
var s = c.indexOf(name + "="); | |||
if (s !== -1) { | |||
var e = c.indexOf(";", s = s + name.length + 1); | |||
return unescape(c.substring(s, (e !== -1) ? e : e = c.length)); | |||
} | |||
} | |||
return ""; | |||
} | |||
/* --- Tooltips --- */ | /* --- Tooltips --- */ | ||
// default setting to turn tooltips on | // default setting to turn tooltips on | ||
var tooltipsOn = true; | var tooltipsOn = true; | ||
var $tfb; | var $tfb; | ||
var | var $ttfb; | ||
var | var $htt; | ||
// hides the tooltip | // hides the tooltip | ||
function hideTip() { | function hideTip() { | ||
$tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility","hidden") | $tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility", "hidden"); | ||
} | } | ||
// displays the tooltip | // displays the tooltip | ||
function displayTip(e) { | function displayTip(e) { | ||
$ | $htt.not(":empty").removeClass("hidden").addClass("tooltip-ready"); | ||
moveTip(e); | moveTip(e); | ||
$htt.not(":empty").css("visibility", "visible"); | |||
} | } | ||
// moves the tooltip | // moves the tooltip | ||
function moveTip(e) { | function moveTip(e) { | ||
var newTop = e.clientY + ((e.clientY > ($(window).height() / 2)) ? -($htt.not(".hidden").innerHeight() + 20) : 20); | |||
var newTop = e.clientY + ((e.clientY > ($(window).height()/2)) ? -($ | var newLeft = e.clientX + ((e.clientX > ($(window).width() / 2)) ? -($htt.not(".hidden").innerWidth() + 20) : 20); | ||
var newLeft = e.clientX + ((e.clientX > ($(window).width()/2)) ? -($ | $htt.not(".hidden").css({ | ||
$ | "position": "fixed", | ||
"top": newTop + "px", | |||
"left": newLeft + "px" | |||
}); | |||
} | } | ||
// AJAX tooltips | // AJAX tooltips | ||
function showTip(e) { | function showTip(e) { | ||
$t = $(this); | |||
$p = $t.parent(); | |||
if ($p.hasClass("selflink") == false) { | |||
$p=$t.parent(); | |||
if ($p.hasClass("selflink")==false) { | |||
$t.removeAttr("title"); | $t.removeAttr("title"); | ||
$p.removeAttr("title"); | $p.removeAttr("title"); | ||
$tfb.load("/" + $t.data("tt").replace(/ /g, "_").replace(/\?/g, "%3F") + "?action=render div.tooltip-content", function () { | |||
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>'); | 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","" | $tfb.find(".tooltip-content").css("display", ""); | ||
displayTip(e); | displayTip(e); | ||
}); | }); | ||
Line 60: | Line 72: | ||
} | } | ||
function | // quick tooltips | ||
$t=$(this); | function hideTemplateTip() { | ||
$p=$t.parent(); | $ttfb.html("").removeClass("tooltip-ready").addClass("hidden"); | ||
} | |||
function showTemplateTip(e) { | |||
$ttfb.html('<div class="tooltip-content">' + $(this).next().html() + '</div>'); | |||
displayTip(e); | |||
} | |||
function ttBind() { | |||
$t = $(this); | |||
$p = $t.parent(); | |||
if ($p.hasClass("selflink") == false) { | if ($p.hasClass("selflink") == false) { | ||
$t.data("tt", $p.attr("title").replace(" (page does not exist)","").replace("?","%3F")). | $t.data("tt", $p.attr("title").replace(" (page does not exist)", "").replace("?", "%3F")).mouseover(showTip).mouseout(hideTip).mousemove(moveTip); | ||
if ($p.hasClass("new")) { | |||
els = '<sup><span class="plainlinks fromWikia">'; | |||
y = ($t.hasClass("itemlink")) ? 0 : 1; | |||
z = ($t.hasClass("achievementlink")) ? 2 : 3; | |||
for (x = y; x < z; x++) els += eLink(x, $t.data("tt").replace("Quest:", "")); | |||
$p.after(els + '</span></sup>'); | |||
} | |||
if (extDB != "http://www.asheron.wikia.com/") { | |||
fullextURL = extDB + $t.data("tt"); | |||
$p.attr("href", fullextURL); | |||
} | |||
} | } | ||
} | } | ||
// check to see if it is active then do it | // check to see if it is active then do it | ||
function ttMouseOver() { | function ttMouseOver(foo) { | ||
if (tooltipsOn) { | if (tooltipsOn && getCookie("wiki-tiploader") != "no") { | ||
$("# | $("#WikiaArticle").mouseover(hideTip); | ||
$("#WikiaArticle").append('<div id="tfb" class="htt"></div><div id="templatetfb" class="htt"><div>'); | |||
$tfb = $("#tfb"); | $tfb = $("#tfb"); | ||
$("# | $ttfb = $("#templatetfb"); | ||
$htt = $("#tfb,#templatetfb"); | |||
if (foo == 1) { | |||
$("#WikiaArticle span.ajaxttlink").each(ttBind); | |||
} | |||
$("#WikiaArticle span.tttemplatelink").mouseover(showTemplateTip).mouseout(hideTemplateTip).mousemove(moveTip); | |||
} | } | ||
} | } | ||
/* --- Calculate PXP --- */ | /* --- Calculate PXP --- */ |
Revision as of 15:50, 26 October 2014
/* Any JavaScript here will be loaded for all users on every page load. */
// Duplicate image list
importScript('User:Arkalor/dupimages.js');
/* --- Standard Functions --- */
/** name - cookie name, value - 'on' or 'off' or whatever, exdays - expiry of cookie in days */
function setCookie(name, value, exdays) { // Sets a cookie
value = name + "=" + escape(value);
if (exdays !== null) { var d = new Date(); value += ";expires=" + d.setDate(d.getDate() + exdays).toGMTString(); }
document.cookie = value;
}
/** name - cookie name, @return - cookie or empty string */
function getCookie(name) { // Gets a cookie
var c = document.cookie;
if (c.length > 0) {
var s = c.indexOf(name + "=");
if (s !== -1) {
var e = c.indexOf(";", s = s + name.length + 1);
return unescape(c.substring(s, (e !== -1) ? e : e = c.length));
}
}
return "";
}
/* --- Tooltips --- */
// default setting to turn tooltips on
var tooltipsOn = true;
var $tfb;
var $ttfb;
var $htt;
// hides the tooltip
function hideTip() {
$tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility", "hidden");
}
// displays the tooltip
function displayTip(e) {
$htt.not(":empty").removeClass("hidden").addClass("tooltip-ready");
moveTip(e);
$htt.not(":empty").css("visibility", "visible");
}
// moves the tooltip
function moveTip(e) {
var newTop = e.clientY + ((e.clientY > ($(window).height() / 2)) ? -($htt.not(".hidden").innerHeight() + 20) : 20);
var newLeft = e.clientX + ((e.clientX > ($(window).width() / 2)) ? -($htt.not(".hidden").innerWidth() + 20) : 20);
$htt.not(".hidden").css({
"position": "fixed",
"top": newTop + "px",
"left": newLeft + "px"
});
}
// AJAX tooltips
function showTip(e) {
$t = $(this);
$p = $t.parent();
if ($p.hasClass("selflink") == false) {
$t.removeAttr("title");
$p.removeAttr("title");
$tfb.load("/" + $t.data("tt").replace(/ /g, "_").replace(/\?/g, "%3F") + "?action=render div.tooltip-content", function () {
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", "");
displayTip(e);
});
}
}
// quick tooltips
function hideTemplateTip() {
$ttfb.html("").removeClass("tooltip-ready").addClass("hidden");
}
function showTemplateTip(e) {
$ttfb.html('<div class="tooltip-content">' + $(this).next().html() + '</div>');
displayTip(e);
}
function ttBind() {
$t = $(this);
$p = $t.parent();
if ($p.hasClass("selflink") == false) {
$t.data("tt", $p.attr("title").replace(" (page does not exist)", "").replace("?", "%3F")).mouseover(showTip).mouseout(hideTip).mousemove(moveTip);
if ($p.hasClass("new")) {
els = '<sup><span class="plainlinks fromWikia">';
y = ($t.hasClass("itemlink")) ? 0 : 1;
z = ($t.hasClass("achievementlink")) ? 2 : 3;
for (x = y; x < z; x++) els += eLink(x, $t.data("tt").replace("Quest:", ""));
$p.after(els + '</span></sup>');
}
if (extDB != "http://www.asheron.wikia.com/") {
fullextURL = extDB + $t.data("tt");
$p.attr("href", fullextURL);
}
}
}
// check to see if it is active then do it
function ttMouseOver(foo) {
if (tooltipsOn && getCookie("wiki-tiploader") != "no") {
$("#WikiaArticle").mouseover(hideTip);
$("#WikiaArticle").append('<div id="tfb" class="htt"></div><div id="templatetfb" class="htt"><div>');
$tfb = $("#tfb");
$ttfb = $("#templatetfb");
$htt = $("#tfb,#templatetfb");
if (foo == 1) {
$("#WikiaArticle span.ajaxttlink").each(ttBind);
}
$("#WikiaArticle span.tttemplatelink").mouseover(showTemplateTip).mouseout(hideTemplateTip).mousemove(moveTip);
}
}
/* --- Calculate PXP --- */
function xp_at_level(level)
{
if (level < 2)
return 0;
if (level == 2)
return 1000;
if (level <= 126)
return Math.ceil((Math.pow((level + 5), 5) - Math.pow(6, 5)) / 9.0);
return Math.round((Math.pow((level + 5), 5) - Math.pow(6, 5)) / 9.0);
}
function xp_to_next_level(level)
{
if (level < 0 || level > 274)
return 0;
return xp_at_level(level + 1) - xp_at_level(level);
}
function percent_xp_to_next_level(level, percent)
{
return Math.floor(xp_to_next_level(level) * percent / 100.0);
}
function format_xp(mystring)
{
var result;
var pos;
mystring += '';
if (mystring.length <= 3) {
result = mystring;
} else {
var count = 0;
result = "";
for (pos = mystring.length - 3; pos >= 0 && count < 20; pos -= 3, count++) {
if (result.length == 0)
result = mystring.substr(pos, 3);
else
result = mystring.substr(pos, 3) + "," + result;
}
if (pos > -3)
result = mystring.substr(0, 3+pos) + "," + result;
}
return result;
}
function calc_and_display_pxp(index)
{
var level = parseInt(document.getElementById("pxp_level_input_" + index).value);
var percent = parseFloat(document.getElementById("pxp_percent_input_" + index).value);
document.getElementById("pxp_result_" + index).innerHTML = " = " + format_xp(percent_xp_to_next_level(level, percent));
return false;
}
function hasClass(element, className)
{
return element.className.indexOf(className) != -1;
}
function createPXPCalculationForms()
{
var paras = document.getElementsByTagName("p");
var offset = 0;
for (var index = 0; index < paras.length; index++) {
if (hasClass(paras[index], "calc-pxp")) {
var form = document.createElement("form");
var input1 = document.createElement("input");
var input2 = document.createElement("input");
var input3 = document.createElement("input");
var span = document.createElement("span");
form.setAttribute("onSubmit", "return calc_and_display_pxp(" + offset + ");");
input1.setAttribute("size", "6");
input1.setAttribute("value", "200");
input1.setAttribute("id", "pxp_level_input_" + offset);
input2.setAttribute("size", "6");
input2.setAttribute("value", "10");
input2.setAttribute("id", "pxp_percent_input_" + offset);
input3.setAttribute("type", "button");
input3.setAttribute("value", "Calculate PXP");
input3.setAttribute("onclick", "javascript:calc_and_display_pxp(" + offset + ");");
span.setAttribute("id", "pxp_result_" + offset);
span.innerHTML = "??? xp";
form.appendChild(document.createTextNode("Level: "));
form.appendChild(input1);
form.appendChild(document.createTextNode(" Percent: "));
form.appendChild(input2);
form.appendChild(input3);
form.appendChild(span);
paras[index].appendChild(form);
offset++;
}
}
}
addOnloadHook(createPXPCalculationForms);
/* --- Collapsible Tables --- */
var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';
function hasClass( element, className ) {
var Classes = element.className.split( " " );
for ( var i = 0; i < Classes.length; i++ ) {
if ( Classes[i] == className ) {
return true;
}
}
return false;
}
function collapseTable( tableIndex ) {
var i;
var Button = document.getElementById( 'collapseButton' + tableIndex );
var Table = document.getElementById( 'collapsibleTable' + tableIndex );
if ( !Table || !Button ) {
return false;
}
var Rows = Table.getElementsByTagName( 'tr' );
if ( Button.firstChild.data == collapseCaption ) {
for ( i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = 'none';
}
Button.firstChild.data = expandCaption;
} else {
for ( i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = Rows[0].style.display;
}
Button.firstChild.data = collapseCaption;
}
}
function createCollapseButtons() {
var i;
var tableIndex = 0;
var NavigationBoxes = {};
var Tables = document.getElementsByTagName( 'table' );
for ( i = 0; i < Tables.length; i++ ) {
if ( hasClass( Tables[i], 'collapsible' ) ) {
NavigationBoxes[ tableIndex ] = Tables[i];
Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
var Button = document.createElement( 'span' );
var ButtonLink = document.createElement( 'a' );
var ButtonText = document.createTextNode( collapseCaption );
Button.style.styleFloat = 'right';
Button.style.cssFloat = 'right';
Button.style.fontWeight = 'normal';
Button.style.textAlign = 'right';
Button.style.width = '6em';
ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
ButtonLink.setAttribute( 'href', 'javascript:collapseTable(' + tableIndex + ');' );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( '[' ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( ']' ) );
var Header = Tables[i].getElementsByTagName( 'tr' )[0].getElementsByTagName( 'th' )[0];
/* only add button and increment count if there is a header row to work with */
if (Header) {
Header.insertBefore( Button, Header.childNodes[0] );
tableIndex++;
}
}
}
for ( i = 0; i < tableIndex; i++ ) {
if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
collapseTable( i );
}
}
}
addOnloadHook( createCollapseButtons );