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);