Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol diffdown.com
at main 47 lines 1.4 kB view raw
1{{template "base" .}} 2{{define "head"}} 3<link rel="stylesheet" href="/static/css/markdown.css"> 4{{end}} 5 6{{define "content"}} 7{{with .Content}} 8<div class="file-view"> 9 <div class="file-header"> 10 <h2>{{.Doc.Title}}</h2> 11 <div class="file-meta"> 12 {{if .Doc.UpdatedAt}}<time>Updated {{.Doc.UpdatedAt | fmtdate}}</time> 13 {{else if .Doc.CreatedAt}}<time>Created {{.Doc.CreatedAt | fmtdate}}</time>{{end}} 14 </div> 15 <div class="file-actions"> 16 {{if .OwnerDID}} 17 <a href="/docs/{{.OwnerDID}}/{{.Doc.RKey}}/edit" class="btn btn-sm">Edit</a> 18 {{else}} 19 <a href="/docs/{{.Doc.RKey}}/edit" class="btn btn-sm">Edit</a> 20 <button class="btn btn-sm btn-outline btn-danger" onclick="deleteDocument('{{.Doc.RKey}}')">Delete</button> 21 {{end}} 22 </div> 23 </div> 24 <div class="markdown-body"> 25 {{.Rendered}} 26 </div> 27</div> 28{{end}} 29{{end}} 30 31{{define "scripts"}} 32<script> 33async function deleteDocument(rkey) { 34 if (!confirm('Delete this document? This cannot be undone.')) return; 35 try { 36 const resp = await fetch('/api/docs/' + rkey, {method: 'DELETE'}); 37 if (resp.ok) { 38 window.location.href = '/'; 39 } else { 40 alert('Delete failed'); 41 } 42 } catch (e) { 43 alert('Delete failed: ' + e.message); 44 } 45} 46</script> 47{{end}}