Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol diffdown.com
at main 79 lines 2.6 kB view raw
1{{template "base" .}} 2{{define "content"}} 3<div class="dashboard"> 4 <div class="dashboard-header"> 5 <h2>Your Documents</h2> 6 <div style="display:flex;align-items:center;gap:1rem"> 7 <div class="view-toggle"> 8 <button id="btn-cards" title="Card view" onclick="setView('cards')"></button> 9 <button id="btn-list" title="List view" onclick="setView('list')"></button> 10 </div> 11 <a href="/docs/new" class="btn">New Document</a> 12 </div> 13 </div> 14 <div class="repo-list" id="doc-list"> 15 {{range .Content.OwnDocs}} 16 <a href="/docs/{{.RKey}}" class="repo-card"> 17 <h3>{{.Title}}</h3> 18 {{if .UpdatedAt}} 19 <time>Updated {{.UpdatedAt | fmtdate}}</time> 20 {{else}} 21 <time>Created {{.CreatedAt | fmtdate}}</time> 22 {{end}} 23 </a> 24 {{else}} 25 <div class="empty-state"> 26 <p>No documents yet.</p> 27 <a href="/docs/new" class="btn">Create your first document</a> 28 </div> 29 {{end}} 30 </div> 31 32 {{if .Content.SharedDocs}} 33 <div class="dashboard-header" style="margin-top:2rem"> 34 <h2>Documents Shared with You</h2> 35 </div> 36 <div class="repo-list" id="shared-list"> 37 {{range .Content.SharedDocs}} 38 <a href="/docs/{{.OwnerDID}}/{{.RKey}}" class="repo-card"> 39 <h3>{{.Title}}</h3> 40 {{if .UpdatedAt}} 41 <time>Updated {{.UpdatedAt | fmtdate}}</time> 42 {{else}} 43 <time>Created {{.CreatedAt | fmtdate}}</time> 44 {{end}} 45 </a> 46 {{end}} 47 </div> 48 {{end}} 49</div> 50{{end}} 51{{define "scripts"}} 52<script> 53(function() { 54 function setView(v) { 55 var lists = [document.getElementById('doc-list'), document.getElementById('shared-list')]; 56 var btnCards = document.getElementById('btn-cards'); 57 var btnList = document.getElementById('btn-list'); 58 lists.forEach(function(list) { 59 if (!list) return; 60 if (v === 'list') { 61 list.classList.add('list-view'); 62 } else { 63 list.classList.remove('list-view'); 64 } 65 }); 66 if (v === 'list') { 67 btnList.classList.add('active'); 68 btnCards.classList.remove('active'); 69 } else { 70 btnCards.classList.add('active'); 71 btnList.classList.remove('active'); 72 } 73 localStorage.setItem('docView', v); 74 } 75 window.setView = setView; 76 setView(localStorage.getItem('docView') || 'cards'); 77})(); 78</script> 79{{end}}