// For discussion and comments, see: http://remysharp.com/2009/01/07/html5-enabling-script/ /*@cc_on'abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video'.replace(/\w+/g,function(n){document.createElement(n)})@*/ var addEvent = (function () { if (document.addEventListener) { return function (el, type, fn) { if (el && el.nodeName || el === window) { el.addEventListener(type, fn, false); } else if (el && el.length) { for (var i = 0; i < el.length; i++) { addEvent(el[i], type, fn); } } }; } else { return function (el, type, fn) { if (el && el.nodeName || el === window) { el.attachEvent('on' + type, function () { return fn.call(el, window.event); }); } else if (el && el.length) { for (var i = 0; i < el.length; i++) { addEvent(el[i], type, fn); } } }; } })(); (function () { var pre = document.createElement('pre'); pre.id = "view-source" // private scope to avoid conflicts with demos addEvent(window, 'click', function (event) { if (event.target.hash == '#view-source') { // event.preventDefault(); if (!document.getElementById('view-source')) { // pre.innerHTML = ('\n\n' + document.documentElement.innerHTML + '\n').replace(/[<>]/g, function (m) { return {'<':'<','>':'>'}[m]}); var xhr = new XMLHttpRequest(); // original source - rather than rendered source xhr.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { pre.innerHTML = this.responseText.replace(/[<>]/g, function (m) { return {'<':'<','>':'>'}[m]}); prettyPrint(); } }; document.body.appendChild(pre); // really need to be sync? - I like to think so xhr.open("GET", window.location, true); xhr.send(); } document.body.className = 'view-source'; var sourceTimer = setInterval(function () { if (window.location.hash != '#view-source') { clearInterval(sourceTimer); document.body.className = ''; } }, 200); } }); })();