- Timestamp:
- 09/30/2026 09:08:48 AM (3 hours ago)
- Branches:
- main
- Parents:
- 31680c3
- Location:
- src/views
- Files:
-
- 1 added
- 7 edited
-
pages/account.ejs (modified) (1 diff)
-
pages/admin-site-edit.ejs (modified) (2 diffs)
-
pages/ward-profile.ejs (added)
-
partials/bottom-tab.ejs (modified) (2 diffs)
-
partials/chrome.ejs (modified) (1 diff)
-
partials/profile-header.ejs (modified) (5 diffs)
-
partials/topnav.ejs (modified) (2 diffs)
-
shell.ejs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/views/pages/account.ejs
r31680c3 r746d98a 113 113 </form> 114 114 </section> 115 <% } %> 116 117 <%# ── PROFIELLINKS ─────────────────────────────────────────── 118 Sinds 30-9 hier, bij je profiel, en niet meer op de Appearance-pagina: ze 119 horen bij je naam, bio en foto. In de wardmodus is dat profiel het enige 120 dat een bezoeker van de site ziet. %> 121 <% if (typeof editableSite !== 'undefined' && editableSite && canMutate) { %> 122 <section class="ax-card" id="links"> 123 <div class="ax-card-title"><%= t('asite.links') %></div> 124 <p class="form-hint"><%= t('asite.links_hint') %></p> 125 <form action="/account/links" method="post" class="ax-form"> 126 <div id="profile-links-rows"> 127 <% (profileLinks || []).forEach(function (l) { %> 128 <div class="profile-link-row"> 129 <select name="profile_link_platform[]" aria-label="<%= t('acct.link_platform') %>"> 130 <% platforms.forEach(function (p) { %> 131 <option value="<%= p.key %>" <%= l.platform === p.key ? 'selected' : '' %>><%= p.label %></option> 132 <% }); %> 133 </select> 134 <input type="text" name="profile_link_url[]" value="<%= l.url %>" placeholder="https://…" required aria-label="<%= t('acct.link_url') %>"> 135 <button type="button" class="ax-btn pl-remove" aria-label="<%= t('acct.link_remove') %>">×</button> 136 </div> 137 <% }); %> 138 </div> 139 <template id="profile-link-template"> 140 <div class="profile-link-row"> 141 <select name="profile_link_platform[]" aria-label="<%= t('acct.link_platform') %>"> 142 <% platforms.forEach(function (p) { %> 143 <option value="<%= p.key %>"><%= p.label %></option> 144 <% }); %> 145 </select> 146 <input type="text" name="profile_link_url[]" placeholder="https://…" required aria-label="<%= t('acct.link_url') %>"> 147 <button type="button" class="ax-btn pl-remove" aria-label="<%= t('acct.link_remove') %>">×</button> 148 </div> 149 </template> 150 <div class="ax-form-actions"> 151 <button type="button" id="profile-link-add" class="ax-btn"><%= t('asite.link_add') %></button> 152 <button type="submit" class="ax-btn ax-btn-primary"><%= t('acct.links_save') %></button> 153 </div> 154 </form> 155 </section> 156 <style> 157 .profile-link-row { display: grid; grid-template-columns: 1fr auto; gap: .5rem; margin-bottom: .5rem; } 158 .profile-link-row select { padding: .45rem .6rem; grid-column: 1 / -1; } 159 .profile-link-row input { min-width: 0; } 160 @media (min-width: 520px) { 161 .profile-link-row { grid-template-columns: 160px 1fr auto; } 162 .profile-link-row select { grid-column: auto; } 163 } 164 </style> 115 165 <% } %> 116 166 -
src/views/pages/admin-site-edit.ejs
r31680c3 r746d98a 150 150 </fieldset> 151 151 152 <fieldset class="profile-links-fieldset"> 153 <legend><%= t('asite.links') %></legend> 154 <p class="form-hint"><%= t('asite.links_hint') %></p> 155 156 <div id="profile-links-rows"> 157 <% (parsedLinks || []).forEach(function(l) { %> 158 <div class="profile-link-row"> 159 <select name="profile_link_platform[]"> 160 <% platforms.forEach(function(p) { %> 161 <option value="<%= p.key %>" <%= l.platform === p.key ? 'selected' : '' %>><%= p.label %></option> 162 <% }); %> 163 </select> 164 <input type="text" name="profile_link_url[]" value="<%= l.url %>" placeholder="https://…" required> 165 <button type="button" class="btn btn-danger pl-remove">×</button> 166 </div> 167 <% }); %> 168 </div> 169 170 <template id="profile-link-template"> 171 <div class="profile-link-row"> 172 <select name="profile_link_platform[]"> 173 <% platforms.forEach(function(p) { %> 174 <option value="<%= p.key %>"><%= p.label %></option> 175 <% }); %> 176 </select> 177 <input type="text" name="profile_link_url[]" placeholder="https://…" required> 178 <button type="button" class="btn btn-danger pl-remove">×</button> 179 </div> 180 </template> 181 182 <button type="button" id="profile-link-add" class="btn"><%= t('asite.link_add') %></button> 183 </fieldset> 152 <%# De profiellinks staan sinds 30-9 bij je profiel, naast je naam, bio en foto: 153 dat is waar ze bij horen, en in de wardmodus is dat profiel het enige dat 154 een bezoeker ziet. %> 155 <p class="form-hint profile-links-moved"><%= t('asite.links_moved') %> <a href="/account#links"><%= t('asite.links_moved_link') %></a></p> 184 156 185 157 <%# Aliassen en verhuizen staan sinds 14-8 op /admin/migrate, bij elkaar met … … 477 449 button below. Prevents horizontal overflow on phones (fixed 160px column + 478 450 non-shrinkable input together ~447px > screen width). */ 479 .profile-link-row {480 display: grid; grid-template-columns: 1fr auto; gap: 0.5rem; margin-bottom: 0.5rem;481 }482 .profile-link-row select { padding: 0.45rem 0.6rem; grid-column: 1 / -1; }483 .profile-link-row input { min-width: 0; }484 @media (min-width: 520px) {485 .profile-link-row { grid-template-columns: 160px 1fr auto; }486 .profile-link-row select { grid-column: auto; }487 }488 .profile-links-fieldset details > label { margin-top: 0.4rem; }489 451 </style> -
src/views/partials/bottom-tab.ejs
r31680c3 r746d98a 48 48 </a> 49 49 50 <!-- Zoek --> 50 <!-- Zoek (niet in de wardmodus: daar is zoeken dicht voor een bezoeker) --> 51 <% if (!(typeof wardProfile !== 'undefined' && wardProfile)) { %> 51 52 <button type="button" class="bottom-tab-item<%= _active === 'search' ? ' is-active' : '' %>" 52 53 id="bottom-tab-search-toggle" aria-label="<%= t('nav.search') %>"> … … 57 58 <span class="bottom-tab-label"><%= t('tab.search') %></span> 58 59 </button> 60 <% } %> 59 61 60 62 <!-- Plus (FAB-style, only when user can post) --> -
src/views/partials/chrome.ejs
r31680c3 r746d98a 34 34 <% if (!_headerless) { %> 35 35 <%- include('profile-header') %> 36 <% if (!_isAdmin && (typeof site !== 'undefined' && site)) { %><%- include('view-switcher') %><% } %> 36 <%# Niet in de wardmodus: een bezoeker ziet daar alleen het profiel, en er 37 is geen stroom om tussen Lezen en Grid te wisselen. %> 38 <% if (!_isAdmin && (typeof site !== 'undefined' && site) && !(typeof wardProfile !== 'undefined' && wardProfile)) { %><%- include('view-switcher') %><% } %> 37 39 <% } %> 38 40 <% } %> -
src/views/partials/profile-header.ejs
r31680c3 r746d98a 10 10 // Show profile-header unless we're on an admin page or the site explicitly 11 11 // disabled it via profile_enabled=0. 12 const _showProfile = site 13 && (site.profile_enabled === undefined || site.profile_enabled !== 0) 14 && !(typeof bodyClass !== 'undefined' && bodyClass.indexOf('on-admin') >= 0); 12 // In de wardmodus IS de pagina het profiel (pages/ward-profile.ejs). Dan valt de 13 // kop hier weg, maar de volgdialoog hieronder blijft: de volgknop op die pagina 14 // opent hem. 15 const _wardPage = typeof wardProfile !== 'undefined' && wardProfile; 16 const _showProfile = site && (_wardPage || ( 17 (site.profile_enabled === undefined || site.profile_enabled !== 0) 18 && !(typeof bodyClass !== 'undefined' && bodyClass.indexOf('on-admin') >= 0))); 15 19 16 20 // profile_name and profile_bio used to be optional overrides exposed in the … … 20 24 const _displayName = (site && (site.profile_name || site.title)) || ''; 21 25 const _bioText = (site && (site.profile_bio || site.description || site.tagline)) || ''; 26 // Volgen via de fediverse. Hier boven en niet in de kop: op de wardpagina valt 27 // de kop weg, maar de volgdialoog onderaan hoort er dan nog te staan. 28 const _showFollow = (typeof canManageFedi === 'undefined' || !canManageFedi) && site && site.slug && (typeof apEnabled === 'undefined' || apEnabled); 22 29 23 30 // Parse profile_links JSON column once. … … 38 45 39 46 <% if (_showProfile) { %> 47 <% if (!_wardPage) { %> 40 48 <aside class="profile-header" aria-label="Site profile"> 41 49 <div class="container profile-header-inner"> … … 74 82 <%# Follow-via-fediverse: a compact icon in the links row (keeps the header 75 83 short), and hidden for the owner — you don't follow yourself. %> 76 <% var _showFollow = (typeof canManageFedi === 'undefined' || !canManageFedi) && site && site.slug && (typeof apEnabled === 'undefined' || apEnabled); %>77 84 <% if (_profileLinks.length || _showFollow) { %> 78 85 <% const _platforms = (typeof platforms_catalog !== 'undefined' && platforms_catalog) || {}; %> … … 144 151 </div> 145 152 </div> 153 <% } /* !_wardPage */ %> 146 154 <% if (_showFollow) { %> 147 155 <%# Follow-via-fediverse modal — replaces the native prompt() (which looked ugly). %> -
src/views/partials/topnav.ejs
r31680c3 r746d98a 16 16 // Fediverse pages (on-special) get the same top-nav "back to site" treatment as admin. 17 17 const _isSpecial = typeof bodyClass !== 'undefined' && bodyClass.indexOf('on-special') >= 0; 18 const _hasSearch = !site || site.show_search === undefined || site.show_search; 18 // In de wardmodus is zoeken dicht voor een bezoeker: geen knop naar een deur op slot. 19 const _hasSearch = (!site || site.show_search === undefined || site.show_search) 20 && !(typeof wardProfile !== 'undefined' && wardProfile); 19 21 const _canPost = user && (typeof canMutate === 'undefined' || canMutate) 20 22 && permissions && permissions.canCreatePost && permissions.canCreatePost(user, site); … … 47 49 <nav class="top-nav top-nav-desktop" aria-label="Hoofdnavigatie"> 48 50 49 <% if (!_isAdmin && !_isSpecial) { %> 51 <%# Niet in de wardmodus: daar is het archief dicht voor een bezoeker. %> 52 <% if (!_isAdmin && !_isSpecial && !(typeof wardProfile !== 'undefined' && wardProfile)) { %> 50 53 <a class="nav-link" href="<%= _siteUrlBase %>/archive" 51 54 hx-get="<%= _siteUrlBase %>/archive?partial=1" hx-target="#pcms-main" -
src/views/shell.ejs
r31680c3 r746d98a 130 130 // ontwikkeling een jaar gecachet, dus zonder bump bereikt een reparatie 131 131 // iedereen behalve wie de fout al heeft. 132 const MOD_V = 6 7;132 const MOD_V = 68; 133 133 %><!DOCTYPE html> 134 134 <html lang="<%- _e(lang) %>" data-palette="<%- _e((typeof palette !== 'undefined' && palette) ? palette : (safeSite.palette || 'klonkt')) %>">
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)