Changeset 68b27a4 in Klonkt
- Timestamp:
- 06/20/2026 07:28:43 AM (3 months ago)
- Branches:
- main
- Children:
- 0fcc09c
- Parents:
- d7b5a6c
- Location:
- src
- Files:
-
- 6 edited
-
middleware/render.js (modified) (1 diff)
-
routes/admin-shows.js (modified) (3 diffs)
-
routes/shows.js (modified) (3 diffs)
-
views/pages/admin-shows.ejs (modified) (1 diff)
-
views/partials/shared-styles.ejs (modified) (1 diff)
-
views/partials/view-switcher.ejs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/middleware/render.js
rd7b5a6c r68b27a4 94 94 hubTitle: getSetting('hub_title') || '', 95 95 footerNewsletter: getSetting('footer_newsletter') === '1', // nieuwsbrief-aanmelding in footer (premium) 96 agendaEnabled: getSetting('agenda_enabled') === '1', // Agenda/evenementen tonen in de pill (premium, opt-in) 96 97 platforms_catalog: PLATFORMS_CATALOG, 97 98 permissions: PermissionsService, -
src/routes/admin-shows.js
rd7b5a6c r68b27a4 18 18 import { mailerConfigured, sendMail } from '../config/mailer.js'; 19 19 import { confirmedFor, counts } from '../services/SubscriberService.js'; 20 import { getSetting, setSetting } from '../services/SettingsService.js'; 20 21 21 22 const router = express.Router(); … … 36 37 pageTitle: 'Agenda', bodyClass: 'on-admin', 37 38 shows, smtp: mailerConfigured(), notifyCount: confirmedFor(site.id, 'notify').length, 39 agendaEnabled: getSetting('agenda_enabled') === '1', 38 40 ...extra, 39 41 }); … … 83 85 }); 84 86 87 router.post('/toggle', requireSiteManager, premiumGate, (req, res) => { 88 // Agenda tonen op de site (Agenda-knop in de pill + /shows-pagina). 89 setSetting('agenda_enabled', req.body.enabled ? '1' : '0'); 90 res.redirect((res.locals.siteUrlBase || '') + '/admin/shows'); 91 }); 92 85 93 router.post('/:id/delete', requireSiteManager, premiumGate, (req, res) => { 86 94 const site = res.locals.site; -
src/routes/shows.js
rd7b5a6c r68b27a4 16 16 import { mailerConfigured, sendMail } from '../config/mailer.js'; 17 17 import { addSubscriber } from '../services/SubscriberService.js'; 18 import { getSetting } from '../services/SettingsService.js'; 18 19 19 20 const router = express.Router(); 21 22 // Agenda is opt-in: pas bereikbaar als de beheerder 'm heeft ingeschakeld. 23 function agendaOn() { return getSetting('agenda_enabled') === '1'; } 20 24 21 25 function esc(s) { return String(s || '').replace(/[&<>"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c])); } … … 30 34 31 35 router.get('/shows', (req, res, next) => { 32 if (!premiumUnlocked() ) return next();36 if (!premiumUnlocked() || !agendaOn()) return next(); 33 37 const site = res.locals.site; 34 38 if (!site) return next(); … … 42 46 43 47 router.post('/shows/notify', async (req, res, next) => { 44 if (!premiumUnlocked() ) return next();48 if (!premiumUnlocked() || !agendaOn()) return next(); 45 49 const site = res.locals.site; 46 50 if (!site) return next(); -
src/views/pages/admin-shows.ejs
rd7b5a6c r68b27a4 10 10 11 11 <% if (msg) { %><div class="ash-msg ash-<%= (typeof msgKind!=='undefined')?msgKind:'' %>"><%= msg %></div><% } %> 12 13 <% var agOn = (typeof agendaEnabled !== 'undefined') && agendaEnabled; %> 14 <form method="POST" action="<%= siteUrlBase %>/admin/shows/toggle" style="margin:0 0 14px"> 15 <label style="display:flex;align-items:center;gap:10px;cursor:pointer;font-weight:600"> 16 <input type="checkbox" name="enabled" value="1" <%= agOn ? 'checked' : '' %> onchange="this.form.submit()" style="width:18px;height:18px;accent-color:var(--accent)"> 17 <span>Agenda tonen op de site <small style="font-weight:400;opacity:.7">(Agenda-knop in de balk + de agendapagina)</small></span> 18 </label> 19 <noscript><button type="submit" class="btn">Opslaan</button></noscript> 20 </form> 21 <% if (!agOn) { %><div class="ash-msg">De agenda staat nu <strong>uit</strong> — bezoekers zien geen Agenda-knop en de agendapagina is niet bereikbaar. Zet 'm aan om je evenementen te tonen.</div><% } %> 12 22 13 23 <p class="ash-note"><strong><%= nc %></strong> abonnee(s) voor evenement-aankondigingen. -
src/views/partials/shared-styles.ejs
rd7b5a6c r68b27a4 50 50 } 51 51 .vs-agenda:hover { color: var(--ink); } 52 .vs-agenda.is-active { background: var(--paper); color: var(--ink); box-shadow: 0 1px 2px rgba(0,0,0,.06); } 52 53 53 54 .grid-cols-picker { -
src/views/partials/view-switcher.ejs
rd7b5a6c r68b27a4 17 17 <% } %> 18 18 <div class="view-switcher" role="tablist" aria-label="Weergave"> 19 <% if (typeof premiumUnlocked !== 'undefined' && premiumUnlocked ) {19 <% if (typeof premiumUnlocked !== 'undefined' && premiumUnlocked && typeof agendaEnabled !== 'undefined' && agendaEnabled) { 20 20 var _sbA = (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : ''; 21 var _agActive = (typeof bodyClass === 'string' && bodyClass.indexOf('on-shows') >= 0); 21 22 %> 22 <a class="vs-agenda " href="<%= _sbA %>/shows" aria-label="Agenda — evenementen">23 <a class="vs-agenda<%= _agActive ? ' is-active' : '' %>" href="<%= _sbA %>/shows" aria-label="Agenda — evenementen"> 23 24 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg> 24 25 <span>Agenda</span>
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)