MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(Collapsible prototype tree with indentation guides) |
||
(429 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
//Spoiler template | var apiUrl = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/api.php" | ||
/* Script in here will be executed when the page is "ready" */ | |||
$(document).ready(getNumberOfActiveUsers); | |||
/* show correct number of active users on the main page */ | |||
function getNumberOfActiveUsers() { | |||
if (document.getElementById("active-users")) { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'query', | |||
list: 'allusers', | |||
aulimit: 500, | |||
auactiveusers: true | |||
}, | |||
dataType: 'json', | |||
type: 'GET', | |||
success: function(data) { | |||
document.getElementById("active-users").innerHTML = data.query.allusers.length.toString(); | |||
}, | |||
error: function(xhr) { | |||
console.log( 'Error: Request failed.' ); | |||
} | |||
}); | |||
} | |||
}; | |||
/* Collapsible list on [[Prototype definitions]] */ | |||
$(".prototype-tree li").each(function (index, element) { | |||
if ( $( element ).children("ul").length > 0 ) { | |||
$( element ).addClass("prototype-tree-parent"); | |||
}; | |||
}); | |||
$(".prototype-tree li.prototype-tree-parent").on("click", function(event) { | |||
// only collapse if I clicked a li or the direct child of a li that is not another list or a link | |||
if ( $( event.currentTarget ).children("ul").length > 0 && $( event.target ).get(0).tagName != "UL" && $( event.target ).get(0).tagName != "A" && ($( event.target ).hasClass("prototype-tree-parent") || $( event.target ).parent().hasClass("prototype-tree-parent")) ) { | |||
$( event.currentTarget ).children("ul")[0].classList.toggle("hidden"); | |||
$( event.currentTarget ).toggleClass("prototype-tree-parent-collapsed"); | |||
return false; // prevents further event bubbling | |||
} | |||
}); | |||
/* Evolution calc */ | |||
//values are in the form [evolution, weight] | |||
const biterSpawner = [ | |||
["Small Biter", [[0.0, 0.3], [0.6, 0.0]]], | |||
["Medium Biter", [[0.2, 0.0], [0.6, 0.3], [0.7, 0.1]]], | |||
["Big Biter", [[0.5, 0.0], [1.0, 0.4]]], | |||
["Behemoth Biter", [[0.9, 0.0], [1.0, 0.3]]] | |||
]; | |||
const spitterSpawner = [ | |||
["Small Biter", [[0.0, 0.3], [0.35, 0.0]]], | |||
["Small Spitter", [[0.25, 0.0], [0.5, 0.3], [0.7, 0.0]]], | |||
["Medium Spitter", [[0.4, 0.0], [0.7, 0.3], [0.9, 0.1]]], | |||
["Big Spitter", [[0.5, 0.0], [1.0, 0.4]]], | |||
["Behemoth Spitter", [[0.9, 0.0], [1.0, 0.3]]] | |||
]; | |||
//calculates the interpolated value | |||
function lerp(low, high, pos) { | |||
const s = high[0] - low[0]; | |||
const l = (pos - low[0]) / s; | |||
return (low[1] * (1-l)) + (high[1] * l); | |||
}; | |||
//gets the weight list | |||
function getValues(map, evo) { | |||
var result = {}; | |||
var sum = 0; | |||
map.forEach(function(data) { | |||
const list = data[1]; | |||
var low = list[0]; | |||
var high = list[list.length-1]; | |||
list.forEach(function(val) { | |||
if(val[0] <= evo && val[0] > low[0]) low = val; | |||
if(val[0] >= evo && val[0] < high[0]) high = val; | |||
}); | |||
var val = null; | |||
if(evo <= low[0]) val = low[1]; | |||
else if(evo >= high[0]) val = high[1]; | |||
else val = lerp(low, high, evo); | |||
sum += val; | |||
result[data[0]] = val; | |||
}); | |||
Object.keys(result).forEach(function(data, index) { | |||
result[data] = result[data] / sum; | |||
}); | |||
return result; | |||
}; | |||
function calcEvo() { | |||
const evo = document.getElementById("evoInput").value; | |||
genTable(getValues(biterSpawner, evo), document.getElementById("evoOutputBiter"), "Biter's Nest"); | |||
genTable(getValues(spitterSpawner, evo), document.getElementById("evoOutputSpitter"), "Spitter's Nest"); | |||
}; | |||
function percentile(value) { | |||
return (value*100).toFixed(2) + "%"; | |||
}; | |||
function genTable(data, tableElem, title) { | |||
var html = '<tr><th>'+title+'</th><th>Chance</th>'; | |||
Object.keys(data).forEach(function(value) { | |||
html += '<tr><td>'+value+'</td><td>'+percentile(data[value])+'</td>'; | |||
}); | |||
tableElem.innerHTML = html; | |||
}; | |||
window.onload = function() { | |||
var elem = document.getElementById("evoChecker"); | |||
if(elem != null) { | |||
elem.innerHTML = | |||
'Alternatively, enter an evolution factor below to see the chances.<br>' + | |||
'<input style="margin-bottom:10px" type="number" id="evoInput" min=0 max=1 step=0.01 placeholder="Evolution" onchange="calcEvo()"></input><br>' + | |||
'<table style="float:left;margin-right:10px" class="wikitable" id="evoOutputBiter"></table>' + | |||
'<table class="wikitable" id="evoOutputSpitter"></table>'; | |||
calcEvo(); | |||
} | |||
}; | |||
/* Template:Inventory tooltips */ | |||
var lastTouchTime = 0; | |||
document.addEventListener('touchstart', updateLastTouchTime, true); | |||
function updateLastTouchTime() { | |||
lastTouchTime = new Date(); | |||
} | |||
$(".tab-head").mousemove(function(e) { | |||
if (e.buttons > 0) return; | |||
if (new Date() - lastTouchTime < 500) return; | |||
var countCssRules = document.styleSheets[0].cssRules.length; | |||
var newRule = '.tab-head:hover:after{display: block; left: ' + (e.offsetX + 20) + 'px; top: ' + (e.offsetY + 20) + 'px;}'; | |||
document.styleSheets[0].insertRule(newRule, countCssRules); | |||
}); | |||
$(".tab .factorio-icon").mousemove(function(e) { | |||
if (e.buttons > 0) return; | |||
if (new Date() - lastTouchTime < 500) return; | |||
var countCssRules = document.styleSheets[0].cssRules.length; | |||
$(e.currentTarget).children("a").attr("title", ""); | |||
var text = $(e.currentTarget).children("a").children("img").attr("alt"); | |||
var newRule = '.tab .factorio-icon:hover:after{display: block; ' + "content: '" + text + "'}"; | |||
document.styleSheets[0].insertRule(newRule, countCssRules); | |||
}); | |||
/* Template:BlueprintString */ | |||
$(".bps-box").click(function(event) { | |||
var copyTarget = document.createElement("input"); | |||
copyTarget.setAttribute("value", $( event.target ).children("p").html()); | |||
document.body.appendChild(copyTarget); | |||
copyTarget.select(); | |||
document.execCommand("copy"); | |||
document.body.removeChild(copyTarget); | |||
}); | |||
/* Template:Inventory */ | |||
$(".tab-head-1").click(function() { | |||
$(".tab-head").removeClass("tab-head-active"); | |||
$(this).addClass("tab-head-active"); | |||
$(".tab").hide(); | |||
$(".tab-1").show(); | |||
}); | |||
$(".tab-head-2").click(function() { | |||
$(".tab-head").removeClass("tab-head-active"); | |||
$(this).addClass("tab-head-active"); | |||
$(".tab").hide(); | |||
$(".tab-2").show(); | |||
}); | |||
$(".tab-head-3").click(function() { | |||
$(".tab-head").removeClass("tab-head-active"); | |||
$(this).addClass("tab-head-active"); | |||
$(".tab").hide(); | |||
$(".tab-3").show(); | |||
}); | |||
$(".tab-head-4").click(function() { | |||
$(".tab-head").removeClass("tab-head-active"); | |||
$(this).addClass("tab-head-active"); | |||
$(".tab").hide(); | |||
$(".tab-4").show(); | |||
}); | |||
//*** Language template ***// | |||
if($(".languages-flags .flag").length == 0) { | |||
console.log("Not showing languages bar because there's no other language's version of this page."); | |||
$(".languages-container").hide(); | |||
} | |||
//Spoiler template | |||
$(".spoiler-container .button").click(function() { | $(".spoiler-container .button").click(function() { | ||
$(this).siblings(".text").toggle("slow"); | |||
}); | }); | ||
//* General/generic functions *// | |||
/* User is bot if userGroup.some(isBot) == true */ | |||
var userGroup = ""; | |||
function getUserGroup() { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'query', | |||
meta: 'userinfo', | |||
uiprop: 'groups', | |||
}, | |||
async: false, | |||
dataType: 'json', | |||
type: 'GET', | |||
success: function(data) { | |||
userGroup = data.query.userinfo.groups | |||
}, | |||
}); | |||
}; | |||
function isBot(group) { | |||
return group == "bot"; | |||
} | |||
/* Get token of this session */ | |||
var globalToken; | |||
function getToken() { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'query', | |||
meta: 'tokens', | |||
bot: true | |||
}, | |||
async: false, | |||
dataType: 'json', | |||
type: 'POST', | |||
success: function( data ) { | |||
globalToken = data.query.tokens.csrftoken; | |||
}, | |||
error: function( xhr ) { | |||
console.log("Failed to get token."); | |||
} | |||
}); | |||
} | |||
function genericEditPage(title, content, summary) { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'edit', | |||
title: title, | |||
text: content, | |||
token: globalToken, | |||
summary: summary, | |||
bot: true, | |||
nocreate: true | |||
}, | |||
dataType: 'json', | |||
type: 'POST', | |||
success: function( data ) { | |||
console.log("Edited " + title); | |||
}, | |||
error: function( xhr ) { | |||
alert("Failed to edit " + title); | |||
} | |||
}); | |||
}; | |||
function createPage(pageTitle, content, summary) { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'edit', | |||
title: pageTitle, | |||
text: content, | |||
token: globalToken, | |||
summary: summary, | |||
bot: true | |||
}, | |||
async: false, | |||
dataType: 'json', | |||
type: 'POST', | |||
success: function( data ) { | |||
console.log("Created page: " + pageTitle); | |||
}, | |||
error: function( xhr ) { | |||
console.log("Failed to create page"); | |||
} | |||
}); | |||
} | |||
function getBacklinks(page) { | |||
var backlinks = []; | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'query', | |||
list: 'backlinks', | |||
bltitle: page, | |||
bllimit: 1000, | |||
}, | |||
async: false, | |||
type: 'GET', | |||
success: function( data ) { | |||
backlinks = data.query.backlinks; | |||
}, | |||
error: function( xhr ) { | |||
alert( 'Error: Backlinks request failed.' ); | |||
} | |||
}); | |||
return backlinks; | |||
}; | |||
function getFileUsage(file) { | |||
var imageusage = []; | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'query', | |||
list: 'imageusage', | |||
iutitle: file, | |||
iulimit: 1000 | |||
}, | |||
async: false, | |||
type: 'GET', | |||
success: function( data ) { | |||
imageusage = data.query.imageusage; | |||
}, | |||
error: function( xhr ) { | |||
alert( 'Error: Imageusage request failed.' ); | |||
} | |||
}); | |||
return imageusage; | |||
}; | |||
function performNullEdit(pageTitle, summary) { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: 'json', | |||
action: 'edit', | |||
title: pageTitle, | |||
section: 0, | |||
text: "", | |||
token: globalToken, | |||
summary: summary, | |||
bot: true | |||
}, | |||
async: false, | |||
dataType: 'json', | |||
type: 'POST', | |||
success: function( data ) { | |||
console.log("Performed null edit"); | |||
}, | |||
error: function( xhr ) { | |||
console.log("Failed to perform null edit"); | |||
} | |||
}); | |||
} | |||
function purgeWhatLinksHere(pageTitle) { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
format: "json", | |||
action: 'query', | |||
list: "backlinks", | |||
bltitle: pageTitle, | |||
bllimit: 500 | |||
}, | |||
async: true, | |||
type: 'GET', | |||
success: function( data ) { | |||
console.log(data); | |||
for (var i = 0; i < data.query.backlinks.length; i++) { | |||
purgePage(data.query.backlinks[i].title); | |||
} | |||
}, | |||
error: function( xhr ) { | |||
//alert( 'Error: Request failed.' ); | |||
console.log("Failed purging"); | |||
} | |||
}); | |||
} | |||
function purgePage(pageTitle) { | |||
$.ajax({ | |||
url: apiUrl, | |||
data: { | |||
action: 'purge', | |||
forcelinkupdate: true, | |||
titles: pageTitle, | |||
prop: "info" | |||
}, | |||
async: true, | |||
type: 'GET', | |||
success: function( data ) { | |||
console.log("purging " + pageTitle); | |||
}, | |||
error: function( xhr ) { | |||
//alert( 'Error: Request failed.' ); | |||
console.log("Failed purging"); | |||
} | |||
}); | |||
} |
Latest revision as of 12:24, 20 February 2020
/* Any JavaScript here will be loaded for all users on every page load. */
var apiUrl = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/api.php"
/* Script in here will be executed when the page is "ready" */
$(document).ready(getNumberOfActiveUsers);
/* show correct number of active users on the main page */
function getNumberOfActiveUsers() {
if (document.getElementById("active-users")) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
list: 'allusers',
aulimit: 500,
auactiveusers: true
},
dataType: 'json',
type: 'GET',
success: function(data) {
document.getElementById("active-users").innerHTML = data.query.allusers.length.toString();
},
error: function(xhr) {
console.log( 'Error: Request failed.' );
}
});
}
};
/* Collapsible list on [[Prototype definitions]] */
$(".prototype-tree li").each(function (index, element) {
if ( $( element ).children("ul").length > 0 ) {
$( element ).addClass("prototype-tree-parent");
};
});
$(".prototype-tree li.prototype-tree-parent").on("click", function(event) {
// only collapse if I clicked a li or the direct child of a li that is not another list or a link
if ( $( event.currentTarget ).children("ul").length > 0 && $( event.target ).get(0).tagName != "UL" && $( event.target ).get(0).tagName != "A" && ($( event.target ).hasClass("prototype-tree-parent") || $( event.target ).parent().hasClass("prototype-tree-parent")) ) {
$( event.currentTarget ).children("ul")[0].classList.toggle("hidden");
$( event.currentTarget ).toggleClass("prototype-tree-parent-collapsed");
return false; // prevents further event bubbling
}
});
/* Evolution calc */
//values are in the form [evolution, weight]
const biterSpawner = [
["Small Biter", [[0.0, 0.3], [0.6, 0.0]]],
["Medium Biter", [[0.2, 0.0], [0.6, 0.3], [0.7, 0.1]]],
["Big Biter", [[0.5, 0.0], [1.0, 0.4]]],
["Behemoth Biter", [[0.9, 0.0], [1.0, 0.3]]]
];
const spitterSpawner = [
["Small Biter", [[0.0, 0.3], [0.35, 0.0]]],
["Small Spitter", [[0.25, 0.0], [0.5, 0.3], [0.7, 0.0]]],
["Medium Spitter", [[0.4, 0.0], [0.7, 0.3], [0.9, 0.1]]],
["Big Spitter", [[0.5, 0.0], [1.0, 0.4]]],
["Behemoth Spitter", [[0.9, 0.0], [1.0, 0.3]]]
];
//calculates the interpolated value
function lerp(low, high, pos) {
const s = high[0] - low[0];
const l = (pos - low[0]) / s;
return (low[1] * (1-l)) + (high[1] * l);
};
//gets the weight list
function getValues(map, evo) {
var result = {};
var sum = 0;
map.forEach(function(data) {
const list = data[1];
var low = list[0];
var high = list[list.length-1];
list.forEach(function(val) {
if(val[0] <= evo && val[0] > low[0]) low = val;
if(val[0] >= evo && val[0] < high[0]) high = val;
});
var val = null;
if(evo <= low[0]) val = low[1];
else if(evo >= high[0]) val = high[1];
else val = lerp(low, high, evo);
sum += val;
result[data[0]] = val;
});
Object.keys(result).forEach(function(data, index) {
result[data] = result[data] / sum;
});
return result;
};
function calcEvo() {
const evo = document.getElementById("evoInput").value;
genTable(getValues(biterSpawner, evo), document.getElementById("evoOutputBiter"), "Biter's Nest");
genTable(getValues(spitterSpawner, evo), document.getElementById("evoOutputSpitter"), "Spitter's Nest");
};
function percentile(value) {
return (value*100).toFixed(2) + "%";
};
function genTable(data, tableElem, title) {
var html = '<tr><th>'+title+'</th><th>Chance</th>';
Object.keys(data).forEach(function(value) {
html += '<tr><td>'+value+'</td><td>'+percentile(data[value])+'</td>';
});
tableElem.innerHTML = html;
};
window.onload = function() {
var elem = document.getElementById("evoChecker");
if(elem != null) {
elem.innerHTML =
'Alternatively, enter an evolution factor below to see the chances.<br>' +
'<input style="margin-bottom:10px" type="number" id="evoInput" min=0 max=1 step=0.01 placeholder="Evolution" onchange="calcEvo()"></input><br>' +
'<table style="float:left;margin-right:10px" class="wikitable" id="evoOutputBiter"></table>' +
'<table class="wikitable" id="evoOutputSpitter"></table>';
calcEvo();
}
};
/* Template:Inventory tooltips */
var lastTouchTime = 0;
document.addEventListener('touchstart', updateLastTouchTime, true);
function updateLastTouchTime() {
lastTouchTime = new Date();
}
$(".tab-head").mousemove(function(e) {
if (e.buttons > 0) return;
if (new Date() - lastTouchTime < 500) return;
var countCssRules = document.styleSheets[0].cssRules.length;
var newRule = '.tab-head:hover:after{display: block; left: ' + (e.offsetX + 20) + 'px; top: ' + (e.offsetY + 20) + 'px;}';
document.styleSheets[0].insertRule(newRule, countCssRules);
});
$(".tab .factorio-icon").mousemove(function(e) {
if (e.buttons > 0) return;
if (new Date() - lastTouchTime < 500) return;
var countCssRules = document.styleSheets[0].cssRules.length;
$(e.currentTarget).children("a").attr("title", "");
var text = $(e.currentTarget).children("a").children("img").attr("alt");
var newRule = '.tab .factorio-icon:hover:after{display: block; ' + "content: '" + text + "'}";
document.styleSheets[0].insertRule(newRule, countCssRules);
});
/* Template:BlueprintString */
$(".bps-box").click(function(event) {
var copyTarget = document.createElement("input");
copyTarget.setAttribute("value", $( event.target ).children("p").html());
document.body.appendChild(copyTarget);
copyTarget.select();
document.execCommand("copy");
document.body.removeChild(copyTarget);
});
/* Template:Inventory */
$(".tab-head-1").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-1").show();
});
$(".tab-head-2").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-2").show();
});
$(".tab-head-3").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-3").show();
});
$(".tab-head-4").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-4").show();
});
//*** Language template ***//
if($(".languages-flags .flag").length == 0) {
console.log("Not showing languages bar because there's no other language's version of this page.");
$(".languages-container").hide();
}
//Spoiler template
$(".spoiler-container .button").click(function() {
$(this).siblings(".text").toggle("slow");
});
//* General/generic functions *//
/* User is bot if userGroup.some(isBot) == true */
var userGroup = "";
function getUserGroup() {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
meta: 'userinfo',
uiprop: 'groups',
},
async: false,
dataType: 'json',
type: 'GET',
success: function(data) {
userGroup = data.query.userinfo.groups
},
});
};
function isBot(group) {
return group == "bot";
}
/* Get token of this session */
var globalToken;
function getToken() {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
meta: 'tokens',
bot: true
},
async: false,
dataType: 'json',
type: 'POST',
success: function( data ) {
globalToken = data.query.tokens.csrftoken;
},
error: function( xhr ) {
console.log("Failed to get token.");
}
});
}
function genericEditPage(title, content, summary) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'edit',
title: title,
text: content,
token: globalToken,
summary: summary,
bot: true,
nocreate: true
},
dataType: 'json',
type: 'POST',
success: function( data ) {
console.log("Edited " + title);
},
error: function( xhr ) {
alert("Failed to edit " + title);
}
});
};
function createPage(pageTitle, content, summary) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'edit',
title: pageTitle,
text: content,
token: globalToken,
summary: summary,
bot: true
},
async: false,
dataType: 'json',
type: 'POST',
success: function( data ) {
console.log("Created page: " + pageTitle);
},
error: function( xhr ) {
console.log("Failed to create page");
}
});
}
function getBacklinks(page) {
var backlinks = [];
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
list: 'backlinks',
bltitle: page,
bllimit: 1000,
},
async: false,
type: 'GET',
success: function( data ) {
backlinks = data.query.backlinks;
},
error: function( xhr ) {
alert( 'Error: Backlinks request failed.' );
}
});
return backlinks;
};
function getFileUsage(file) {
var imageusage = [];
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
list: 'imageusage',
iutitle: file,
iulimit: 1000
},
async: false,
type: 'GET',
success: function( data ) {
imageusage = data.query.imageusage;
},
error: function( xhr ) {
alert( 'Error: Imageusage request failed.' );
}
});
return imageusage;
};
function performNullEdit(pageTitle, summary) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'edit',
title: pageTitle,
section: 0,
text: "",
token: globalToken,
summary: summary,
bot: true
},
async: false,
dataType: 'json',
type: 'POST',
success: function( data ) {
console.log("Performed null edit");
},
error: function( xhr ) {
console.log("Failed to perform null edit");
}
});
}
function purgeWhatLinksHere(pageTitle) {
$.ajax({
url: apiUrl,
data: {
format: "json",
action: 'query',
list: "backlinks",
bltitle: pageTitle,
bllimit: 500
},
async: true,
type: 'GET',
success: function( data ) {
console.log(data);
for (var i = 0; i < data.query.backlinks.length; i++) {
purgePage(data.query.backlinks[i].title);
}
},
error: function( xhr ) {
//alert( 'Error: Request failed.' );
console.log("Failed purging");
}
});
}
function purgePage(pageTitle) {
$.ajax({
url: apiUrl,
data: {
action: 'purge',
forcelinkupdate: true,
titles: pageTitle,
prop: "info"
},
async: true,
type: 'GET',
success: function( data ) {
console.log("purging " + pageTitle);
},
error: function( xhr ) {
//alert( 'Error: Request failed.' );
console.log("Failed purging");
}
});
}