-
Notifications
You must be signed in to change notification settings - Fork 435
Expand file tree
/
Copy pathhtmlpreview.min.js
More file actions
1 lines (1 loc) · 4.09 KB
/
htmlpreview.min.js
File metadata and controls
1 lines (1 loc) · 4.09 KB
1
var HTMLPreview={content:"",previewform:document.getElementById("previewform"),file:function(){var e=location.search.substring(1),r=document.referrer;return(e.startsWith("./")||e.startsWith("../"))&&r?(r.toLowerCase().endsWith(".md")&&(r=r.substring(0,r.lastIndexOf("/")+1)),r.endsWith("/")||(r+="/"),r+e):e},raw:function(){return HTMLPreview.file().replace(/\/\/github\.com/,"//raw.githubusercontent.com").replace(/\/blob\//,"/")},replaceAssets:function(){var e,r,t,s,i,o,n;for(e=document.querySelectorAll("iframe[src],frame[src]"),i=0;i<e.length;++i)n=e[i].src,(n.indexOf("//raw.githubusercontent.com")>0||n.indexOf("//bitbucket.org")>0)&&(e[i].src="//"+location.hostname+location.pathname+"?"+n);for(r=document.querySelectorAll("a[href]"),i=0;i<r.length;++i)o=r[i].href,o.indexOf("#")>0?r[i].href="//"+location.hostname+location.pathname+location.search+"#"+r[i].hash.substring(1):(o.indexOf("//raw.githubusercontent.com")>0||o.indexOf("//bitbucket.org")>0)&&(o.indexOf(".html")>0||o.indexOf(".htm")>0)&&(r[i].href="//"+location.hostname+location.pathname+"?"+o);if(!document.querySelectorAll("frameset").length){for(t=document.querySelectorAll("link[rel=stylesheet]"),i=0;i<t.length;++i)o=t[i].href,(o.indexOf("//raw.githubusercontent.com")>0||o.indexOf("//bitbucket.org")>0)&&HTMLPreview.send(o,"loadCSS");for(s=document.querySelectorAll('script[type="text/htmlpreview"]'),i=0;i<s.length;++i)n=s[i].src,n.indexOf("//raw.githubusercontent.com")>0||n.indexOf("//bitbucket.org")>0?HTMLPreview.send(n,"loadJS"):(s[i].removeAttribute("type"),document.write(s[i].outerHTML))}},loadHTML:function(e){e&&e.query&&e.query.diagnostics&&e.query.diagnostics.redirect?HTMLPreview.send(e.query.diagnostics.redirect.content,"loadHTML"):e&&e.query&&e.query.results&&e.query.results.resources&&e.query.results.resources.content&&200==e.query.results.resources.status?(HTMLPreview.content=e.query.results.resources.content.replace(/<head>/i,'<head><base href="'+HTMLPreview.raw()+'">').replace(/<script( type=["'](text|application)\/javascript["'])?/gi,'<script type="text/htmlpreview"').replace(/<\/body>/i,'<script src="//'+location.hostname+'/htmlpreview.min.js"><\/script><script>HTMLPreview.replaceAssets();<\/script></body>').replace(/<\/head>\s*<frameset/gi,'<script src="//'+location.hostname+'/htmlpreview.min.js"><\/script><script>document.addEventListener("DOMContentLoaded",HTMLPreview.replaceAssets,false);<\/script></head><frameset'),setTimeout(function(){document.open("text/html","replace"),document.write(HTMLPreview.content),document.close()},50)):e&&e.error&&e.error.description?HTMLPreview.previewform.innerHTML=e.error.description:HTMLPreview.previewform.innerHTML="Error: Cannot load file "+HTMLPreview.raw()},loadCSS:function(e){e&&e.query&&e.query.diagnostics&&e.query.diagnostics.redirect?HTMLPreview.send(e.query.diagnostics.redirect.content,"loadCSS"):e&&e.query&&e.query.results&&e.query.results.resources&&e.query.results.resources.content&&200==e.query.results.resources.status&&document.write("<style>"+e.query.results.resources.content.replace(/url\((?:'|")?([^\/][^:'"\)]+)(?:'|")?\)/gi,"url("+e.query.results.resources.url.replace(/[^\/]+\.css.*$/gi,"")+"$1)")+"</style>")},loadJS:function(e){e&&e.query&&e.query.diagnostics&&e.query.diagnostics.redirect?HTMLPreview.send(e.query.diagnostics.redirect.content,"loadJS"):e&&e.query&&e.query.results&&e.query.results.resources&&e.query.results.resources.content&&200==e.query.results.resources.status&&document.write("<script>"+e.query.results.resources.content+"<\/script>")},send:function(e,r){document.write('<script src="//query.yahooapis.com/v1/public/yql?q=use%20%22https%3A%2F%2Fraw.githubusercontent.com%2Fyql%2Fyql-tables%2Fmaster%2Fdata%2Fdata.headers.xml%22%20as%20headers%3B%20select%20*%20from%20headers%20where%20url%3D%22'+encodeURIComponent(e)+"%22&format=json&diagnostics=true&callback=HTMLPreview."+r+'"><\/script>')},submitform:function(){return location.href="/?"+document.getElementById("file").value,!1},init:function(){HTMLPreview.previewform.onsubmit=HTMLPreview.submitform,HTMLPreview.file()&&(HTMLPreview.previewform.innerHTML="<p>Loading...</p>",HTMLPreview.send(HTMLPreview.raw(),"loadHTML"))}};