User:Pmartin/cache.js

function addcache { if (typeof no_external_cache !== "undefined" && no_external_cache) { return; }   var links  = document.getElementsByClassName('external');

for (var i = 0, l = links.length; i < l; i++) { var current_link = links[i]; var path = current_link.href; if (path.indexOf("http://wikiwix.com/cache/") > -1 || path.indexOf("http://web.archive.org/web/") > -1 || path.indexOf("wikipedia.org") > -1 || path.indexOf("wikimedia.org") > -1 || path.indexOf("stable.toolserver.org") > -1) { continue; }       var element_parent = current_link.parentNode; if (hasClass(element_parent, "noarchive")) { continue; }       var page_title = getTextContent(current_link); var last = document.createElement("small"); last.className = "cachelinks"; last.appendChild(document.createTextNode("\u00a0[")); var link = document.createElement("a"); link.setAttribute("href", "http://wikiwix.com/cache/?url=" + path.replace(/%/g, "%25").replace(/&/g, "%26") + "&title=" + encodeURIComponent(page_title)); link.setAttribute("title", "archive of " + page_title); link.appendChild(document.createTextNode("archive")); last.appendChild(link); last.appendChild(document.createTextNode("]")); element_parent.insertBefore(last, current_link.nextSibling); } }

// If we're on an article page, run addcache if (wgNamespaceNumber === 0) { $( addcache ); }

// Retrieves the actual text content of a node and its descendant nodes // Copyright Harmen Christophe, http://openweb.eu.org/articles/validation_avancee, CC function getTextContent(oNode) { if(!oNode) return null; if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;} switch (oNode.nodeType) { case 3: // TEXT_NODE case 4: // CDATA_SECTION_NODE return oNode.nodeValue; break; case 7: // PROCESSING_INSTRUCTION_NODE case 8: // COMMENT_NODE if (getTextContent.caller!=getTextContent) { return oNode.nodeValue; }     break; case 9: // DOCUMENT_NODE case 10: // DOCUMENT_TYPE_NODE case 12: // NOTATION_NODE return null; break; } var _textContent = ""; oNode = oNode.firstChild; while (oNode) { _textContent += getTextContent(oNode); oNode = oNode.nextSibling; } return _textContent; }