source: Klonkt/src/views/pages/fedi-notifications.ejs@ 9e5438e

main
Last change on this file since 9e5438e was 9e5438e, checked in by Robin Genis <roboburr@…>, 2 months ago

feat(fedi): unify Timeline/Following/Replies/Notifications/Blocking under one tabbed Fediverse section

Shared responsive fedi-tabs bar (5 tabs + back-to-site) on all fediverse pages, with
htmx nav so switching tabs swaps #pcms-main (feels like one page; URL stays bookmarkable
per tab; tab bar scrolls horizontally on narrow screens). Added a 'Fediverse' entry to
the user dropdown + mobile sheet (-> /tijdlijn), removed the separate Timeline nav icon
(kept the notification bell). Replaced the old 2-tab tl-tabs (removed). i18n nav.fediverse
+ tl.tab_replies (nl/en/de).

Co-Authored-By: Claude <noreply@…>

  • Property mode set to 100644
File size: 2.8 KB
Line 
1<div class="nt-wrap">
2 <%- include('../partials/fedi-tabs', { active: 'meldingen' }) %>
3 <h1 class="nt-title"><%= t('notif.title') %></h1>
4 <% if (!items || !items.length) { %>
5 <p class="nt-empty"><%= t('notif.empty') %></p>
6 <% } else { %>
7 <ul class="nt-list">
8 <% items.forEach(function(n){ %>
9 <li class="nt-item">
10 <span class="nt-icon"><%= n.type === 'follow' ? '👤' : (n.type === 'like' ? '⭐' : (n.type === 'announce' ? '🔁' : '💬')) %></span>
11 <div class="nt-body">
12 <div class="nt-line">
13 <a class="nt-who" href="<%= n.url %>" target="_blank" rel="nofollow noopener"><%= n.name || n.handle %></a>
14 <% if (n.handle && n.name) { %><span class="nt-handle"><%= n.handle %></span><% } %>
15 <span class="nt-what">
16 <% if (n.type === 'follow') { %><%= t('notif.followed') %>
17 <% } else if (n.type === 'like') { %><%= t('notif.liked') %>
18 <% } else if (n.type === 'announce') { %><%= t('notif.boosted') %>
19 <% } else { %><%= t('notif.replied') %><% } %>
20 <% if (n.post_slug) { %><a href="/<%= n.post_slug %>"><%= n.post_title || n.post_slug %></a><% } %>
21 </span>
22 <% if (n.created_at) { %><span class="nt-time"><%= formatDateTime(n.created_at) %></span><% } %>
23 </div>
24 <% if (n.type === 'reply' && n.content) { %><div class="nt-content"><%- n.content %></div><% } %>
25 </div>
26 </li>
27 <% }); %>
28 </ul>
29 <% } %>
30</div>
31
32<style>
33 .nt-wrap { max-width: 620px; margin: 2rem auto; padding: 0 1rem; }
34 .fedi-back { margin: 0 0 1.25rem; }
35 .nt-title { margin: 0 0 1.25rem; }
36 .nt-empty { color: var(--ink-soft, #888); }
37 .nt-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: .5rem; }
38 .nt-item { display: flex; gap: .7rem; padding: .7rem .9rem; border-radius: 12px; background: color-mix(in srgb, var(--ink, #000) 4%, transparent); border: 1px solid color-mix(in srgb, var(--ink, #000) 8%, transparent); }
39 .nt-icon { font-size: 1.1rem; flex: 0 0 1.4rem; text-align: center; }
40 .nt-body { flex: 1; min-width: 0; }
41 .nt-line { display: flex; align-items: baseline; gap: .35rem; flex-wrap: wrap; }
42 .nt-who { font-weight: 600; color: var(--ink, inherit); text-decoration: none; }
43 .nt-who:hover { text-decoration: underline; }
44 .nt-handle { color: var(--ink-soft, #888); font-size: .82rem; }
45 .nt-what { color: var(--ink-soft, #aaa); }
46 .nt-what a { color: var(--accent, #06c); }
47 .nt-time { color: var(--ink-soft, #999); font-size: .78rem; margin-left: auto; }
48 .nt-content { margin: .3rem 0 0; line-height: 1.45; color: var(--ink, inherit); overflow-wrap: anywhere; }
49 .nt-content p { margin: .2rem 0; } .nt-content p:first-child { margin-top: 0; }
50</style>
Note: See TracBrowser for help on using the repository browser.