// Microdown // https://github.com/commit-intl/micro-down const microdown=function(){function l(n,e,r){return"<"+n+(r?" "+Object.keys(r).map(function(n){return r[n]?n+'="'+(a(r[n])||"")+'"':""}).join(" "):"")+">"+e+""}function c(n,e){return e=n.match(/^[+-]/m)?"ul":"ol",n?"<"+e+">"+n.replace(/(?:[+-]|\d+\.) +(.*)\n?(([ \t].*\n?)*)/g,function(n,e,r){return"
  • "+g(e+"\n"+(t=r||"").replace(new RegExp("^"+(t.match(/^\s+/)||"")[0],"gm"),"").replace(o,c))+"
  • ";var t})+"":""}function e(r,t,u,c){return function(n,e){return n=n.replace(t,u),l(r,c?c(n):n)}}function t(n,u){return f(n,[//g,"\x3c!--$1--\x3e",/^("""|```)(.*)\n((.*\n)*?)\1/gm,function(n,e,r,t){return'"""'===e?l("div",p(t,u),{class:r}):u&&u.preCode?l("pre",l("code",a(t),{class:r})):l("pre",a(t),{class:r})},/(^>.*\n?)+/gm,e("blockquote",/^> ?(.*)$/gm,"$1",r),/((^|\n)\|.+)+/g,e("table",/^.*(\n\|---.*?)?$/gm,function(n,t){return e("tr",/\|(-?)([^|]*)\1(\|$)?/gm,function(n,e,r){return l(e||t?"th":"td",g(r))})(n.slice(0,n.length-(t||"").length))}),o,c,/#\[([^\]]+?)]/g,'',/^(#+) +(.*)(?:$)/gm,function(n,e,r){return l("h"+e.length,g(r))},/^(===+|---+)(?=\s*$)/gm,"
    "],p,u)}var i=this,a=function(n){return n?n.replace(/"/g,""").replace(//g,">"):""},o=/(?:(^|\n)([+-]|\d+\.) +(.*(\n[ \t]+.*)*))+/g,g=function c(n,i){var o=[];return n=(n||"").trim().replace(/`([^`]*)`/g,function(n,e){return"\\"+o.push(l("code",a(e)))}).replace(/[!&]?\[([!&]?\[.*?\)|[^\]]*?)]\((.*?)( .*?)?\)|(\w+:\/\/[$\-.+!*'()/,\w]+)/g,function(n,e,r,t,u){return u?i?n:"\\"+o.push(l("a",u,{href:u})):"&"==n[0]?(e=e.match(/^(.+),(.+),([^ \]]+)( ?.+?)?$/),"\\"+o.push(l("iframe","",{width:e[1],height:e[2],frameborder:e[3],class:e[4],src:r,title:t}))):"\\"+o.push("!"==n[0]?l("img","",{src:r,alt:e,title:t}):l("a",c(e,1),{href:r,title:t}))}),n=function r(n){return n.replace(/\\(\d+)/g,function(n,e){return r(o[Number.parseInt(e)-1])})}(i?n:r(n))},r=function t(n){return f(n,[/([*_]{1,3})((.|\n)+?)\1/g,function(n,e,r){return e=e.length,r=t(r),1"],t)},f=function(n,e,r,t){for(var u,c=0;c/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } const url = location.pathname; const PREVIEW_TYPES = /^image\/(png|webp|svg|jpeg|jpg|gif|png)|^application\/pdf|^text\/|^audio\/|^video\//; const upload_form = `
    `; const file_buttons = ` `; const edit_button = ``; const mkdir_dialog = ``; const mkfile_dialog = ``; const rename_dialog = ``; const edit_dialog = ``; const markdown_dialog = `
    `; const delete_dialog = `

    Confirm delete ?

    `; const dialog_tpl = `

    %s
    %b
    `; const req = (method, url, body, headers) => { fetch(url, {method, body, headers}).then((r) => location.reload()); return false; }; var evt, evt2; const dialog = (hash, html, ok_btn = true) => { location.hash = '#' + hash; var tpl = dialog_tpl.replace(/%b/, ok_btn ? '

    ' : ''); $('body').insertAdjacentHTML('beforeend', tpl.replace(/%s/, html)); $('.close input').onclick = close; evt = window.addEventListener('keyup', (e) => { if (e.key != 'Escape') return; e.preventDefault(); close(); return false; }); evt2 = window.addEventListener('hashchange', (e) => { if (location.hash == '') { close(); } }); if (a = $('dialog form input, dialog form textarea')) a.focus(); }; const close = () => { if (!$('dialog')) return; $('dialog').remove(); window.removeEventListener('keyup', evt); evt = null; window.removeEventListener('hashchange', evt2); evt2 = null; location.hash = ''; }; const $ = (a) => document.querySelector(a); $('h1').insertAdjacentHTML('afterend', upload_form); Array.from($('table').rows).forEach((tr) => { var $$ = (a) => tr.querySelector(a); var file_url = $$('a').href; var file_name = $$('a').innerText; var dir = $$('[colspan]'); var type = !dir ? $$('td:nth-child(3)').innerText : null; if (dir && url.match('..')) { dir.setAttribute('colspan', 4); return; } tr.insertAdjacentHTML('beforeend', file_buttons); if (type.match(PREVIEW_TYPES)) { $$('a').onclick = () => { if (file_url.match(/\.md$/)) { dialog(file_name, '
    ', false); fetch(file_url).then((r) => r.text().then((t) => { $('.md_preview').innerHTML = microdown.parse(html(t)); })); } else if (type.match(/^image\//)) { dialog(file_name, ``, false); } else { dialog(file_name, `