source: Klonkt/src/views/pages/admin-seo.ejs@ c3e736c

main
Last change on this file since c3e736c was c3e736c, checked in by Robin <roboburr@…>, 4 weeks ago

Het scherm leverde zijn vertalingen niet aan (Robins melding)

admin-seo.ejs had geen page-data-blok. pageData() geeft dan een leeg object, en
alles viel terug op de ingebakken Nederlandse tekst -- ook voor een Engelse of
Duitse lezer. Precies wat Robin vermoedde met "de vertalingen zitten misschien
nog op de verkeerde keys": ze zaten nergens.

En de sleutels waren inderdaad fout. De conventie hier is KORT: admin-audio
levert change_failed en niet aaud_change_failed, en de module leest T.mb_busy.
Ik las T.aseo_mb_busy, wat zelfs met een blok niets had opgeleverd.

Acht sleutels, en de controle van gisteren op gelijke sleutels in drie talen
zou dit NIET hebben gevangen -- die keek of de talen onderling gelijk waren, niet
of het scherm ze doorgeeft. Twee verschillende gaten.

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

  • Property mode set to 100644
File size: 11.2 KB
RevLine 
[6623453]1<div class="container admin-site-edit-page">
[bbf9d1a]2 <p><a href="/admin" class="btn">&larr; <%= t('aseo.back') %></a></p>
3 <h1><%= t('aseo.title') %></h1>
4 <p class="admin-tagline"><%= t('aseo.tagline_pre') %> <strong><%= site.title %></strong> <%= t('aseo.tagline_post') %></p>
[6623453]5
6 <% if (typeof success !== 'undefined' && success) { %><div class="audio-flash audio-flash--ok"><%= success %></div><% } %>
7 <% if (typeof error !== 'undefined' && error) { %><div class="audio-flash audio-flash--err"><%= error %></div><% } %>
8
9 <form method="post" action="/admin/seo" class="site-form">
10
11 <fieldset>
[bbf9d1a]12 <legend><%= t('aseo.index_legend') %></legend>
[03af7f8]13 <label class="cb">
[6623453]14 <input type="checkbox" name="robots_index" value="1" <%= site.robots_index ? 'checked' : '' %>>
[bbf9d1a]15 <span><%= t('aseo.index_label') %> <small class="form-hint-inline">— <%= t('aseo.index_hint_pre') %> <code>noindex</code> <%= t('aseo.index_hint_post') %></small></span>
[6623453]16 </label>
17 </fieldset>
18
19 <fieldset>
[bbf9d1a]20 <legend><%= t('aseo.title_legend') %></legend>
[6623453]21 <label>
[bbf9d1a]22 <span><%= t('aseo.title_template') %> <small class="form-hint-inline">— <%= t('aseo.title_template_hint_pre') %> <code>{title}</code> <%= t('aseo.title_template_hint_and') %> <code>{site}</code></small></span>
[6623453]23 <input type="text" name="title_template" value="<%= site.title_template || '{title} — {site}' %>" maxlength="200" placeholder="{title} — {site}">
24 </label>
25 <label>
[bbf9d1a]26 <span><%= t('aseo.default_desc') %> <small class="form-hint-inline">— <%= t('aseo.default_desc_hint') %></small></span>
27 <textarea name="default_description" rows="2" maxlength="500" placeholder="<%= t('aseo.default_desc_ph') %>"><%= site.default_description || '' %></textarea>
[6623453]28 </label>
29 <label>
[bbf9d1a]30 <span><%= t('aseo.canonical') %> <small class="form-hint-inline">— <%= t('aseo.canonical_hint') %></small></span>
[1ff0043]31 <input type="text" name="canonical" value="<%= site.canonical || '' %>" placeholder="https://yourdomain.com" maxlength="200">
[6623453]32 </label>
33 <label>
[bbf9d1a]34 <span><%= t('aseo.author') %> <small class="form-hint-inline">— <%= t('aseo.author_hint') %></small></span>
35 <input type="text" name="author" value="<%= site.author || '' %>" maxlength="120" placeholder="<%= t('aseo.author_ph') %>">
[6623453]36 </label>
37 </fieldset>
38
39 <fieldset>
[bbf9d1a]40 <legend><%= t('aseo.social_legend') %></legend>
[6623453]41 <label>
[bbf9d1a]42 <span><%= t('aseo.og_image') %> <small class="form-hint-inline">— <%= t('aseo.og_image_hint') %></small></span>
[1ff0043]43 <input type="text" name="og_image_default" value="<%= site.og_image_default || '' %>" placeholder="https://yourdomain.com/share.jpg" maxlength="500">
[6623453]44 </label>
[3b4095f]45 <label>
46 <span><%= t('aseo.og_theme') %> <small class="form-hint-inline">— <%= t('aseo.og_theme_hint') %></small></span>
47 <select name="og_theme">
48 <option value="" <%= !site.og_theme ? 'selected' : '' %>><%= t('aseo.og_theme_auto') %></option>
49 <option value="light" <%= site.og_theme === 'light' ? 'selected' : '' %>><%= t('aseo.og_theme_light') %></option>
50 <option value="dark" <%= site.og_theme === 'dark' ? 'selected' : '' %>><%= t('aseo.og_theme_dark') %></option>
51 </select>
52 </label>
[6623453]53 <label>
[bbf9d1a]54 <span><%= t('aseo.og_locale') %> <small class="form-hint-inline">— <%= t('aseo.og_locale_hint_pre') %> <code>nl_NL</code> <%= t('aseo.og_locale_hint_or') %> <code>en_US</code></small></span>
[6623453]55 <input type="text" name="og_locale" value="<%= site.og_locale || '' %>" placeholder="nl_NL" maxlength="32">
56 </label>
57 <label>
[bbf9d1a]58 <span><%= t('aseo.twitter') %> <small class="form-hint-inline">— <%= t('aseo.twitter_hint') %></small></span>
[6623453]59 <input type="text" name="twitter" value="<%= site.twitter || '' %>" placeholder="@jouwnaam" maxlength="64">
60 </label>
61 <label>
[bbf9d1a]62 <span><%= t('aseo.fb_app') %> <small class="form-hint-inline">— <%= t('aseo.fb_app_hint') %></small></span>
[6623453]63 <input type="text" name="facebook_app_id" value="<%= site.facebook_app_id || '' %>" maxlength="64">
64 </label>
65 </fieldset>
66
67 <fieldset>
[bbf9d1a]68 <legend><%= t('aseo.publisher_legend') %></legend>
[6623453]69 <label>
[bbf9d1a]70 <span><%= t('aseo.type') %></span>
[6623453]71 <select name="schema_type">
[bbf9d1a]72 <option value="Person" <%= site.schema_type === 'Organization' ? '' : 'selected' %>><%= t('aseo.type_person') %></option>
73 <option value="Organization" <%= site.schema_type === 'Organization' ? 'selected' : '' %>><%= t('aseo.type_org') %></option>
[6623453]74 </select>
75 </label>
76 <label>
[bbf9d1a]77 <span><%= t('aseo.publisher_name') %> <small class="form-hint-inline">— <%= t('aseo.publisher_name_hint') %></small></span>
[6623453]78 <input type="text" name="publisher_name" value="<%= site.publisher_name || '' %>" maxlength="200">
79 </label>
80 <label>
[bbf9d1a]81 <span><%= t('aseo.publisher_url') %></span>
[1ff0043]82 <input type="text" name="publisher_url" value="<%= site.publisher_url || '' %>" placeholder="https://yourdomain.com" maxlength="200">
[6623453]83 </label>
84 <label>
[bbf9d1a]85 <span><%= t('aseo.publisher_logo') %></span>
[1ff0043]86 <input type="text" name="publisher_logo" value="<%= site.publisher_logo || '' %>" placeholder="https://yourdomain.com/logo.png" maxlength="500">
[6623453]87 </label>
88 </fieldset>
89
[013e16c]90 <%# ── MUSICBRAINZ ─────────────────────────────────────────────
91 Direct onder Uitgever, en dat is geen willekeur: sameAs IS een
92 schema.org-eigenschap, en dat blok hierboven is waar ons schema.org
93 vandaan komt. Een koppeling hier voedt twee uitgangen tegelijk -- de
94 JSON-LD van de pagina en het fediverse-profiel (shaer-mbz). %>
95 <fieldset id="mb-veld">
96 <legend><%= t('aseo.mb_legend') %></legend>
97 <p class="form-hint"><%= t('aseo.mb_hint') %></p>
98
99 <input type="hidden" name="mb_artist_id" id="mb-id" value="<%= site.mb_artist_id || '' %>">
100 <input type="hidden" name="mb_artist_name" id="mb-naam" value="<%= site.mb_artist_name || '' %>">
101
102 <p class="mb-huidig" id="mb-huidig" <%= site.mb_artist_id ? '' : 'hidden' %>>
103 <%= t('aseo.mb_linked') %>
104 <strong id="mb-huidig-naam"><%= site.mb_artist_name || site.mb_artist_id || '' %></strong>
105 <a id="mb-huidig-link" target="_blank" rel="noopener"
106 href="https://musicbrainz.org/artist/<%= site.mb_artist_id || '' %>"><%= t('aseo.mb_open') %></a>
107 <button type="button" class="btn" id="mb-wis"><%= t('aseo.mb_unlink') %></button>
108 </p>
[f50a84b]109 <%# De terug-weg. Een koppeling van onze kant is een BEWERING -- iedereen
110 kan een id typen. Pas als de MusicBrainz-pagina terugwijst is het een
111 paar, en dat staat hier met zoveel woorden zodat "eenzijdig" niet als
112 "klaar" leest. %>
113 <p class="mb-terugweg" id="mb-terugweg" hidden></p>
[013e16c]114
115 <label>
116 <span><%= t('aseo.mb_search_label') %> <small class="form-hint-inline">— <%= t('aseo.mb_search_hint') %></small></span>
117 <div class="mb-zoek">
118 <input type="text" id="mb-q" value="<%= site.publisher_name || site.title || '' %>"
119 autocomplete="off" placeholder="<%= t('aseo.mb_placeholder') %>">
120 <button type="button" class="btn" id="mb-zoek-btn"><%= t('aseo.mb_search') %></button>
121 </div>
122 </label>
123 <div id="mb-uit" class="mb-uit" hidden></div>
124 </fieldset>
125
[6623453]126 <fieldset>
[bbf9d1a]127 <legend><%= t('aseo.verify_legend') %></legend>
[6623453]128 <label>
[bbf9d1a]129 <span><%= t('aseo.verify_google') %></span>
[6623453]130 <input type="text" name="google_verification" value="<%= site.google_verification || '' %>" maxlength="200">
131 </label>
132 <label>
[bbf9d1a]133 <span><%= t('aseo.verify_bing') %> <small class="form-hint-inline">— <%= t('aseo.verify_bing_hint') %></small></span>
[6623453]134 <input type="text" name="bing_verification" value="<%= site.bing_verification || '' %>" maxlength="200">
135 </label>
136 <label>
[bbf9d1a]137 <span><%= t('aseo.verify_pinterest') %> <small class="form-hint-inline">— <%= t('aseo.verify_pinterest_hint') %></small></span>
[6623453]138 <input type="text" name="pinterest_verification" value="<%= site.pinterest_verification || '' %>" maxlength="200">
139 </label>
140 <label>
[bbf9d1a]141 <span><%= t('aseo.verify_yandex') %></span>
[6623453]142 <input type="text" name="yandex_verification" value="<%= site.yandex_verification || '' %>" maxlength="200">
143 </label>
144 </fieldset>
145
[bbf9d1a]146 <button type="submit" class="btn btn-primary"><%= t('aseo.save') %></button>
[6623453]147 </form>
148</div>
[03af7f8]149
150<style>
151.admin-site-edit-page { max-width: 760px; margin: 3rem auto; padding: 0 1rem; }
152.admin-site-edit-page h1 { font-family: var(--font-display, serif); font-size: 1.8rem; margin: 0 0 0.4rem; }
153.admin-site-edit-page .admin-tagline { color: var(--ink-muted); margin: 0 0 1.75rem; }
154
[75c6919]155.site-form { display: flex; flex-direction: column; gap: 1.5rem; min-width: 0; }
[834bcc3]156/* <fieldset> does not shrink because the UA sets min-inline-size:min-content → mobile overflow.
157 min-width:0 forces it to shrink. */
[75c6919]158.site-form fieldset { min-width: 0; }
159.site-form input, .site-form textarea, .site-form select { min-width: 0; }
[03af7f8]160.site-form fieldset {
161 border: 1px solid var(--rule);
162 border-radius: 8px;
163 padding: 1rem 1.25rem;
164 background: var(--paper-2);
165 display: flex;
166 flex-direction: column;
167 gap: 0.85rem;
168}
169.site-form fieldset legend { font-family: var(--font-display, serif); font-size: 1rem; padding: 0 0.4rem; }
170.site-form label { display: flex; flex-direction: column; gap: 0.3rem; font-size: 0.85rem; color: var(--ink-muted, var(--ink-soft)); }
171.site-form label.cb { flex-direction: row; align-items: flex-start; gap: 0.55rem; font-size: 0.9rem; color: var(--ink); }
172.site-form label.cb input { margin-top: 0.15rem; }
173.site-form label > span { line-height: 1.35; }
174.form-hint-inline { font-weight: 400; color: var(--ink-muted); font-size: 0.82em; }
175.site-form code { background: var(--paper); padding: 0.05rem 0.35rem; border-radius: 3px; font-size: 0.85em; }
176.site-form input[type="text"], .site-form textarea, .site-form select {
177 padding: 0.55rem 0.85rem;
178 border: 1px solid var(--rule);
179 border-radius: 5px;
180 background: var(--paper);
181 color: var(--ink);
182 font-family: inherit;
183 font-size: 0.95rem;
184 width: 100%;
185 box-sizing: border-box;
186}
187.site-form textarea { resize: vertical; min-height: 2.6rem; }
188.site-form select { max-width: 320px; }
189.site-form input:focus, .site-form textarea:focus, .site-form select:focus {
190 outline: none; border-color: var(--accent);
191}
192.seo-pointer p { margin: 0; font-size: 0.9rem; color: var(--ink-muted); }
193.seo-pointer a { color: var(--accent); font-weight: 600; }
194.site-form > button[type="submit"] { align-self: flex-start; }
195</style>
[c3e736c]196
197<%# Servertekst naar mod/admin-seo.js. KORTE sleutels, zoals overal in dit
198 project -- de module leest T.mb_busy en niet T.aseo_mb_busy. Zonder dit
199 blok geeft pageData() een leeg object en valt alles terug op de
200 ingebakken Nederlandse tekst, ook voor een Engelse of Duitse lezer. %>
201<%- include('../partials/page-data', { pageData: { mb_busy: t('aseo.mb_busy'), mb_fail: t('aseo.mb_fail'), mb_none: t('aseo.mb_none'), mb_open: t('aseo.mb_open'), mb_pick: t('aseo.mb_pick'), mb_verified: t('aseo.mb_verified'), mb_unverified: t('aseo.mb_unverified'), mb_checking: t('aseo.mb_checking') } }) %>
Note: See TracBrowser for help on using the repository browser.