From a58285fd06c8113c45377c655dd43cef6337e815 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 11 Jan 2007 19:06:07 +0000 Subject: Aktualisierung auf MediaWiki 1.9.0 --- skins/common/ajaxwatch.js | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 skins/common/ajaxwatch.js (limited to 'skins/common/ajaxwatch.js') diff --git a/skins/common/ajaxwatch.js b/skins/common/ajaxwatch.js new file mode 100644 index 00000000..16e4fdc4 --- /dev/null +++ b/skins/common/ajaxwatch.js @@ -0,0 +1,127 @@ +// dependencies: +// * ajax.js: + /*extern sajax_init_object, sajax_do_call */ +// * wikibits.js: + /*extern changeText, akeytt, hookEvent */ + +// These should have been initialized in the generated js +/*extern wgAjaxWatch, wgArticleId */ + +if(typeof wgAjaxWatch === "undefined" || !wgAjaxWatch) { + var wgAjaxWatch = { + watchMsg: "Watch", + unwatchMsg: "Unwatch", + watchingMsg: "Watching...", + unwatchingMsg: "Unwatching..." + }; +} + +wgAjaxWatch.supported = true; // supported on current page and by browser +wgAjaxWatch.watching = false; // currently watching page +wgAjaxWatch.inprogress = false; // ajax request in progress +wgAjaxWatch.timeoutID = null; // see wgAjaxWatch.ajaxCall +wgAjaxWatch.watchLink1 = null; // "watch"/"unwatch" link +wgAjaxWatch.watchLink2 = null; // second one, for (some?) non-Monobook-based +wgAjaxWatch.oldHref = null; // url for action=watch/action=unwatch + +wgAjaxWatch.setLinkText = function(newText) { + changeText(wgAjaxWatch.watchLink1, newText); + if (wgAjaxWatch.watchLink2) { + changeText(wgAjaxWatch.watchLink2, newText); + } +}; + +wgAjaxWatch.setLinkID = function(newId) { + wgAjaxWatch.watchLink1.id = newId; + akeytt(newId); // update tooltips for Monobook +}; + +wgAjaxWatch.ajaxCall = function() { + if(!wgAjaxWatch.supported || wgAjaxWatch.inprogress) { + return; + } + wgAjaxWatch.inprogress = true; + wgAjaxWatch.setLinkText(wgAjaxWatch.watching ? wgAjaxWatch.unwatchingMsg : wgAjaxWatch.watchingMsg); + sajax_do_call("wfAjaxWatch", [wgArticleId, (wgAjaxWatch.watching ? "u" : "w")], wgAjaxWatch.processResult); + // if the request isn't done in 10 seconds, allow user to try again + wgAjaxWatch.timeoutID = window.setTimeout(function() { wgAjaxWatch.inprogress = false; }, 10000); + return; +}; + +wgAjaxWatch.processResult = function(request) { + if(!wgAjaxWatch.supported) { + return; + } + var response = request.responseText; + if(response == "") { + window.location.href = wgAjaxWatch.oldHref; + return; + } else if(response == "") { + wgAjaxWatch.watching = true; + wgAjaxWatch.setLinkText(wgAjaxWatch.unwatchMsg); + wgAjaxWatch.setLinkID("ca-unwatch"); + wgAjaxWatch.oldHref = wgAjaxWatch.oldHref.replace(/action=watch/, "action=unwatch"); + } else if(response == "") { + wgAjaxWatch.watching = false; + wgAjaxWatch.setLinkText(wgAjaxWatch.watchMsg); + wgAjaxWatch.setLinkID("ca-watch"); + wgAjaxWatch.oldHref = wgAjaxWatch.oldHref.replace(/action=unwatch/, "action=watch"); + } + wgAjaxWatch.inprogress = false; + if(wgAjaxWatch.timeoutID) { + window.clearTimeout(wgAjaxWatch.timeoutID); + } + return; +}; + +wgAjaxWatch.onLoad = function() { + var el1 = document.getElementById("ca-unwatch"); + var el2 = null; + if (!el1) { + el1 = document.getElementById("mw-unwatch-link1"); + el2 = document.getElementById("mw-unwatch-link2"); + } + if(el1) { + wgAjaxWatch.watching = true; + } else { + wgAjaxWatch.watching = false; + el1 = document.getElementById("ca-watch"); + if (!el1) { + el1 = document.getElementById("mw-watch-link1"); + el2 = document.getElementById("mw-watch-link2"); + } + if(!el1) { + wgAjaxWatch.supported = false; + return; + } + } + + if(!wfSupportsAjax()) { + wgAjaxWatch.supported = false; + return; + } + + // The id can be either for the parent (Monobook-based) or the element + // itself (non-Monobook) + wgAjaxWatch.watchLink1 = el1.tagName.toLowerCase() == "a" ? el1 : el1.firstChild; + wgAjaxWatch.watchLink2 = el2 ? el2 : null; + + wgAjaxWatch.oldHref = wgAjaxWatch.watchLink1.getAttribute("href"); + wgAjaxWatch.watchLink1.setAttribute("href", "javascript:wgAjaxWatch.ajaxCall()"); + if (wgAjaxWatch.watchLink2) { + wgAjaxWatch.watchLink2.setAttribute("href", "javascript:wgAjaxWatch.ajaxCall()"); + } + return; +}; + +hookEvent("load", wgAjaxWatch.onLoad); + +/** + * @return boolean whether the browser supports XMLHttpRequest + */ +function wfSupportsAjax() { + var request = sajax_init_object(); + var supportsAjax = request ? true : false; + delete request; + return supportsAjax; +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf