assets/distribution/mirrors/sites.js (88 lines of code) (raw):

function showMaintainer(status) { for (var i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].title == "style_maintainer") document.styleSheets[i].disabled = status; } document.getElementById('maintainer_c').style.display = (status) ? 'inline' : 'none'; document.getElementById('maintainer_o').style.display = (status) ? 'none' : 'inline'; } var XML = {}; var ml = { sites: null, stylesheet: null, timeout: 10000, interval: 500, timer1: null, timer2: null, start: function() { print_message("Retrieving data ..."); var request1 = XML.newXMLHttpRequest(); var request2 = XML.newXMLHttpRequest(); XML.loadAsync(request1, "sites.xml", ml.callback_sites); XML.loadAsync(request2, "sites2html.xml", ml.callback_stylesheet); ml.timer1 = setTimeout(ml.failure, ml.timeout); ml.timer2 = setInterval(ml.check, ml.interval); }, callback_sites: function(xmldoc) { ml.sites = xmldoc; ml.check(); }, callback_stylesheet: function(xmldoc) { ml.stylesheet = xmldoc; ml.check(); }, show_progress: function() { print_message("Retrieving data: " + "<br/>&nbsp;&nbsp;sites.xml ... " + ((ml.sites != null) ? "done." : "") + "<br/>&nbsp;&nbsp;sites2table.xml ... " + ((ml.stylesheet != null) ? "done." : "")); }, check: function() { ml.show_progress(); if (ml.sites != null && ml.stylesheet != null) { ml.stop(); var element = document.getElementById("mirrorlist"); XML.transform(ml.sites, ml.stylesheet, element); } }, stop: function() { clearTimeout(ml.timer1); clearInterval(ml.timer2); }, failure: function() { clearInterval(ml.timer2); print_message("Data retrieval failed due to timed out or other reasons.<br/>Please try to reload this page."); } }; function print_message(s) { document.getElementById("message").innerHTML = s; }; XML.newXMLHttpRequest = function() { try { return new XMLHttpRequest(); } catch (e) { return new ActiveXObject("MSXML2.XMLHTTP.3.0"); } }; XML.loadAsync = function(request, url, callback) { request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) callback(request.responseXML); }; request.open("GET", url); request.send(null); }; XML.transform = function(xmldoc, stylesheet, element) { if (typeof XSLTProcessor != "undefined") { var processor = new XSLTProcessor(); processor.importStylesheet(stylesheet); var fragment = processor.transformToFragment(xmldoc, document); element.innerHTML = ""; element.appendChild(fragment); } else if ("transformNode" in xmldoc) { element.innerHTML = xmldoc.transformNode(stylesheet); } else { throw "XSLT is not supported in this browser"; } };