source: Klonkt/src/assets/js/mod/paid-passkey.js@ a8364ee

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

Alle element-bedrade modules herstarten per paginawissel (shaer-5s1, vervolg)

Het recept van 4b5db37, toegepast op de rest van de familie. Twaalf modules
exporteren nu init(): download (de auto-start liep alleen bij import, dus na
een htmx-bezoek startte er niets), auth-register, admin-settings, admin-epk,
admin-paid, admin-help, admin-push, admin-site-edit, authorize-interaction,
paid-gate, paid-passkey en news.

Twee verdienen een woord:

authorize-interaction blok 1 bedraadde een element achter een WINDOW-vlag:

na een swap is de knop een nieuw element en
blokkeerde de vlag het herbedraden voorgoed. De vlag
zit nu op het element zelf.

news de gif- en lees-meer-scanners claimden in hun

commentaar per render te draaien, maar deden dat als
module niet meer. Ze zijn nu benoemde functies:
init() draait ze per navigatie, en een gedelegeerde
htmx:afterSettle draait ze ook na feed-paginering --
binnengehaalde items kregen anders geen lees-meer en
geen gif-gedrag.

Bewust ONaangeraakt, met reden: chrome (gedelegeerd, en de profile-sheet
staat BUITEN de geswapte #pcms-chrome dus zijn element-referenties blijven
geldig), post en messages (gedelegeerd; messages herstart zichzelf al via
pcmsNav), track-editor en playlist-editor (gedelegeerd / globale functie).

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

  • Property mode set to 100644
File size: 1.8 KB
Line 
1// De passkey-ontgrendeling -- verplaatst uit inline script, shaer-bqr.
2//
3// Inline script wordt door de CSP geweigerd zodra deze pagina via een link
4// BINNEN de site binnenkomt (shaer-0i6). Servergegevens komen uit pageData();
5// interpolatie kan niet in een statisch bestand.
6
7import { pageData } from './lib.js';
8
9// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
10// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
11export function init() { run(); }
12
13function run() {
14(function () {
15 var _d = pageData();
16 var options = _d.options || {};
17 var blob = _d.blob || "";
18 var I = _d.i18n || {};
19 var postUrl = _d.postUrl || "";
20 var btn = document.getElementById('pk-go');
21 var status = document.getElementById('pk-status');
22 function say(msg, err) { status.hidden = false; status.textContent = msg; status.classList.toggle('is-err', !!err); }
23
24 if (!window.SimpleWebAuthnBrowser || !window.PublicKeyCredential) {
25 btn.disabled = true;
26 say(I.unsupported, true);
27 return;
28 }
29 btn.addEventListener('click', function () {
30 btn.disabled = true;
31 say(I.follow);
32 window.SimpleWebAuthnBrowser.startRegistration({ optionsJSON: options })
33 .then(function (response) {
34 return fetch('/paid/register', {
35 method: 'POST', headers: { 'Content-Type': 'application/json' },
36 body: JSON.stringify({ response: response, blob: blob }),
37 });
38 })
39 .then(function (r) { return r.json(); })
40 .then(function (j) {
41 if (j && j.ok) { say(I.done); setTimeout(function () { location.href = postUrl; }, 900); }
42 else { btn.disabled = false; say(I.failed.replace('{err}', (j && j.error) || '?'), true); }
43 })
44 .catch(function (e) { btn.disabled = false; say(e && e.name === 'NotAllowedError' ? I.cancelled : I.error, true); });
45 });
46})();
47}
Note: See TracBrowser for help on using the repository browser.