diff --git a/copyparty/web/md.js b/copyparty/web/md.js index 86d43b82..5e06f413 100644 --- a/copyparty/web/md.js +++ b/copyparty/web/md.js @@ -231,11 +231,11 @@ function convert_markdown(md_text, dest_dom) { var nodes = md_dom.getElementsByTagName('a'); for (var a = nodes.length - 1; a >= 0; a--) { var href = nodes[a].getAttribute('href'); - var txt = nodes[a].textContent; + var txt = nodes[a].innerHTML; if (!txt) nodes[a].textContent = href; - else if (href !== txt) + else if (href !== txt && !nodes[a].className) nodes[a].className = 'vis'; } diff --git a/copyparty/web/ui.css b/copyparty/web/ui.css index 39375248..f2fcf5ec 100644 --- a/copyparty/web/ui.css +++ b/copyparty/web/ui.css @@ -451,6 +451,20 @@ html.y textarea:focus { padding: .2em .5em; border: .12em solid #aaa; } +.mdo .mdth, +.mdo .mdthl, +.mdo .mdthr { + margin: .5em .5em .5em 0; +} +.mdthl { + float: left; +} +.mdthr { + float: right; +} +hr { + clear: both; +} @media screen { .mdo { diff --git a/copyparty/web/util.js b/copyparty/web/util.js index 68a72d8a..09497aec 100644 --- a/copyparty/web/util.js +++ b/copyparty/web/util.js @@ -1602,6 +1602,14 @@ function load_md_plug(md_text, plug_type, defer) { if (defer) md_plug[plug_type] = null; + if (plug_type == 'pre') + try { + md_text = md_thumbs(md_text); + } + catch (ex) { + toast.warn(30, '' + ex); + } + if (!have_emp) return md_text; @@ -1642,6 +1650,33 @@ function load_md_plug(md_text, plug_type, defer) { return md; } +function md_thumbs(md) { + if (!/(^|\n)/.exec(md)) + return md; + + // `!th[flags](some.jpg)` + // flags: nothing or "l" or "r" + + md = md.split(/!th\[/g); + for (var a = 1; a < md.length; a++) { + if (!/^[^\]!()]*\]\([^\][!()]+\)/.exec(md[a])) { + md[a] = '!th[' + md[a]; + continue; + } + + var t = md[a].split(/\]\(/, 2), + t2 = t[1].split(/\)/, 2), + url = t2[0], + flags = t[0].split(/,/g), + float = has(flags, 'l') ? 'left' : has(flags, 'r') ? 'right' : ''; + + if (!/[?&]cache/.exec(url)) + url += (url.indexOf('?') < 0 ? '?' : '&') + 'cache=i'; + + md[a] = '' + t[0] + '' + t2[1]; + } + return md.join(''); +} var svg_decl = '\n';