(function () { if (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) { return; } /** * @param {Element} [container=document] */ self.Prism.fileHighlight = function(container) { container = container || document; var Extensions = { 'js': 'javascript', 'py': 'python', 'rb': 'ruby', 'ps1': 'powershell', 'psm1': 'powershell', 'sh': 'bash', 'bat': 'batch', 'h': 'c', 'tex': 'latex' }; Array.prototype.slice.call(container.querySelectorAll('pre[data-src]')).forEach(function (pre) { // ignore if already loaded if (pre.hasAttribute('data-src-loaded')) { return; } // load current var src = pre.getAttribute('data-src'); var language, parent = pre; var lang = /\blang(?:uage)?-([\w-]+)\b/i; while (parent && !lang.test(parent.className)) { parent = parent.parentNode; } if (parent) { language = (pre.className.match(lang) || [, ''])[1]; } if (!language) { var extension = (src.match(/\.(\w+)$/) || [, ''])[1]; language = Extensions[extension] || extension; } var code = document.createElement('code'); code.className = 'language-' + language; pre.textContent = ''; code.textContent = 'Loading…'; pre.appendChild(code); var xhr = new XMLHttpRequest(); xhr.open('GET', src, true); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status < 400 && xhr.responseText) { code.textContent = xhr.responseText; Prism.highlightElement(code); // mark as loaded pre.setAttribute('data-src-loaded', ''); } else if (xhr.status >= 400) { code.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText; } else { code.textContent = '✖ Error: File does not exist or is empty'; } } }; xhr.send(null); }); if (Prism.plugins.toolbar) { Prism.plugins.toolbar.registerButton('download-file', function (env) { var pre = env.element.parentNode; if (!pre || !/pre/i.test(pre.nodeName) || !pre.hasAttribute('data-src') || !pre.hasAttribute('data-download-link')) { return; } var src = pre.getAttribute('data-src'); var a = document.createElement('a'); a.textContent = pre.getAttribute('data-download-link-label') || 'Download'; a.setAttribute('download', ''); a.href = src; return a; }); } }; document.addEventListener('DOMContentLoaded', function () { // execute inside handler, for dropping Event as argumnet self.Prism.fileHighlight(); }); })();