This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / pages / templates / timeline / timeline.html
2.6 kB 75 lines
1{{ define "title" }}timeline{{ end }} 2 3{{ define "extrameta" }} 4 <meta property="og:title" content="timeline · tangled" /> 5 <meta property="og:type" content="object" /> 6 <meta property="og:url" content="https://tangled.org" /> 7 <meta property="og:description" content="tightly-knit social coding" /> 8{{ end }} 9 10{{ define "mainLayout" }} 11<div class="flex-grow"> 12 <div class="max-w-screen-lg mx-auto flex flex-col gap-4"> 13 <main>{{ block "content" . }}{{ end }}</main> 14 </div> 15</div> 16{{ end }} 17 18{{ define "content" }} 19<div id="timeline-grid" class="flex flex-col gap-4 lg:grid lg:grid-cols-3"> 20 21 <div class="order-2 lg:order-none lg:col-span-2 lg:row-start-1"> 22 {{ template "timeline/fragments/timeline" . }} 23 </div> 24 25 <div class="order-1 lg:order-none flex flex-col gap-6 lg:col-start-3 lg:row-start-1"> 26 {{ if .ShowNewsletter }} 27 <div id="newsletter-col" class="order-first lg:order-last"> 28 {{ template "timeline/fragments/newsletterWidget" . }} 29 </div> 30 {{ end }} 31 {{ template "timeline/fragments/trendingSidebar" . }} 32 </div> 33</div> 34 35{{ if .ShowNewsletter }} 36<script> 37 (function() { 38 var DISMISS_KEY = 'newsletter-dismissed'; 39 var newsletterCol = document.getElementById('newsletter-col'); 40 if (!newsletterCol) return; 41 42 // hide removes the widget from the DOM without persisting anything. 43 // Used when this browser's localStorage says we already dismissed in a 44 // past session — the server has already told us .ShowNewsletter is true 45 // (no DB row), so we deliberately do NOT re-POST /newsletter/dismiss 46 // here: that would clobber a 'subscribed' row created from another 47 // device after this localStorage entry was set. 48 function hide() { 49 newsletterCol.remove(); 50 } 51 52 // dismiss is the user-initiated path. Persists both locally and (for 53 // logged-in users) server-side so the widget stays hidden on all their 54 // devices. 55 function dismiss() { 56 hide(); 57 try { localStorage.setItem(DISMISS_KEY, '1'); } catch (e) {} 58 fetch('/newsletter/dismiss', { method: 'POST', credentials: 'same-origin' }) 59 .catch(function () { /* localStorage is the fallback */ }); 60 } 61 62 try { 63 if (localStorage.getItem(DISMISS_KEY) === '1') { 64 hide(); 65 return; 66 } 67 } catch (e) { /* storage disabled; keep widget visible */ } 68 69 newsletterCol.addEventListener('click', function(e) { 70 if (e.target.closest('[data-newsletter-dismiss]')) dismiss(); 71 }); 72 })(); 73</script> 74{{ end }} 75{{ end }}