Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol
diffdown.com
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}}