Wikipedista:Mormegil/Ajaxpopup/ajaxpopup.js
Poznámka: Po uložení musíte vyprázdnit mezipaměť vašeho prohlížeče, jinak změny neuvidíte.
if(typeof ajaxNavboxPopup === "undefined" || !ajaxNavboxPopup) {
var ajaxNavboxPopup = {
showMsg: "↧ Zobrazit",
hideMsg: "⤒ Skrýt",
showingMsg: "Načítá se obsah…"
};
}
ajaxNavboxPopup.supported = true;
ajaxNavboxPopup.inprogress = false;
ajaxNavboxPopup.timeoutID = null;
ajaxNavboxPopup.executeAjaxCall = function (uri, target) {
var i, x, n;
var uri;
if (!ajaxNavboxPopup.supported) return false;
if (ajaxNavboxPopup.inprogress) return false;
ajaxNavboxPopup.inprogress = true;
x = sajax_init_object();
if (!x) {
ajaxNavboxPopup.supported = false;
alert("AJAX not supported");
return false;
}
try {
x.open("GET", uri, true);
} catch (e) {
if (window.location.hostname == "localhost") {
alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing.");
}
return false;
}
x.setRequestHeader("Pragma", "cache=yes");
x.setRequestHeader("Cache-Control", "no-transform");
x.onreadystatechange = function() {
if (x.readyState != 4)
return;
sajax_debug("received (" + x.status + " " + x.statusText + ") " + x.responseText);
//if (x.status != 200)
// alert("Error: " + x.status + " " + x.statusText + ": " + x.responseText);
//else
target( x );
return;
}
try {
x.send(null);
} catch(e) {
return false;
}
delete x;
return true;
}
ajaxNavboxPopup.onShowClick = function() {
var uri = this.href;
var showButtonSpan = this.parentNode;
showButtonSpan.innerHTML = '';
showButtonSpan.appendChild(document.createTextNode("[" + ajaxNavboxPopup.showingMsg + "]"));
var contentsWrapper = document.createElement('div');
contentsWrapper.className = 'ajaxnavbox-contents';
var hourglassBox = document.createElement('div');
hourglassBox.className = 'ajaxnavbox-hourglass';
hourglassBox.innerHTML = '<img src="http://upload.wikimedia.org/wikipedia/commons/3/32/Loader3.gif" width="32" height="32" alt="" />';
contentsWrapper.appendChild(hourglassBox);
showButtonSpan.parentNode.parentNode.appendChild(contentsWrapper);
if (!ajaxNavboxPopup.executeAjaxCall(uri + '?action=render', function(request)
{
ajaxNavboxPopup.onContentsReceived(request, uri, showButtonSpan, contentsWrapper);
}
))
{
window.location = uri;
return true;
}
// if the request isn't done in 10 seconds, just switch to the target URL directly
ajaxNavboxPopup.timeoutID = window.setTimeout(
function() {
var hideButton = document.createElement('a');
hideButton.href = uri;
hideButton.appendChild(document.createTextNode(ajaxNavboxPopup.showMsg));
showButtonSpan.appendChild(document.createTextNode("["));
showButtonSpan.appendChild(hideButton);
showButtonSpan.appendChild(document.createTextNode("]"));
contentsWrapper.parentNode.removeChild(contentsWrapper);
window.location = uri;
},
10000
);
return false;
}
ajaxNavboxPopup.onContentsReceived = function(request, uri, showButtonSpan, contentsWrapper)
{
showButtonSpan.innerHTML = '';
var hideButton = document.createElement('a');
hideButton.href = uri;
hideButton.appendChild(document.createTextNode(ajaxNavboxPopup.hideMsg));
hideButton.onclick = ajaxNavboxPopup.onHideClick;
showButtonSpan.appendChild(document.createTextNode("["));
showButtonSpan.appendChild(hideButton);
showButtonSpan.appendChild(document.createTextNode("]"));
contentsWrapper.innerHTML = request.responseText;
ajaxNavboxPopup.inprogress = false;
if(ajaxNavboxPopup.timeoutID) {
window.clearTimeout(ajaxNavboxPopup.timeoutID);
}
}
ajaxNavboxPopup.onHideClick = function() {
var hideButtonSpan = this.parentNode;
hideButtonSpan.innerHTML = '';
var showButton = document.createElement('a');
showButton.href = this.href;
showButton.appendChild(document.createTextNode(ajaxNavboxPopup.showMsg));
showButton.onclick = ajaxNavboxPopup.onUnhideClick;
hideButtonSpan.appendChild(document.createTextNode("["));
hideButtonSpan.appendChild(showButton);
hideButtonSpan.appendChild(document.createTextNode("]"));
hideButtonSpan.parentNode.nextSibling.style.display = 'none';
return false;
}
ajaxNavboxPopup.onUnhideClick = function() {
var showButtonSpan = this.parentNode;
showButtonSpan.innerHTML = '';
var hideButton = document.createElement('a');
hideButton.href = this.href;
hideButton.appendChild(document.createTextNode(ajaxNavboxPopup.hideMsg));
hideButton.onclick = ajaxNavboxPopup.onHideClick;
showButtonSpan.appendChild(document.createTextNode("["));
showButtonSpan.appendChild(hideButton);
showButtonSpan.appendChild(document.createTextNode("]"));
showButtonSpan.parentNode.nextSibling.style.display = 'block';
return false;
}
ajaxNavboxPopup.onLoad = function()
{
var contentBase = document.getElementById('content');
if (!contentBase) return;
var divs = contentBase.getElementsByTagName('div');
for (var i = 0; i < divs.length; i++) {
if (divs[i].className == "ajaxnavbox") {
var navboxDiv = divs[i];
var targetLink = navboxDiv.getElementsByTagName('a');
if (!targetLink || targetLink.length < 1) return;
targetLink = targetLink[0];
var targetUrl = targetLink.href;
var targetTitle = targetLink.innerHTML;
navboxDiv.innerHTML = '';
navboxDiv.className = 'ajaxnavbox-wrapper';
var titleDiv = document.createElement('div');
titleDiv.className = 'ajaxnavbox-title';
var showButtonSpan = document.createElement('span');
showButtonSpan.className = 'ajaxnavbox-button';
var showButton = document.createElement('a');
showButton.href = targetUrl;
showButton.appendChild(document.createTextNode(ajaxNavboxPopup.showMsg));
showButton.onclick = ajaxNavboxPopup.onShowClick;
showButtonSpan.appendChild(document.createTextNode("["));
showButtonSpan.appendChild(showButton);
showButtonSpan.appendChild(document.createTextNode("]"));
navboxDiv.appendChild(titleDiv);
titleDiv.appendChild(showButtonSpan);
var titleCaption = document.createElement('div');
titleCaption.className = 'ajaxnavbox-caption';
titleCaption.appendChild(document.createTextNode(targetTitle));
titleDiv.appendChild(titleCaption);
}
}
};
importStylesheet("Wikipedista:Mormegil/Ajaxpopup/ajaxpopup.css");
hookEvent("load", ajaxNavboxPopup.onLoad);