banyaro/backend/static/js/pages
rene f604ab7c4f Feature: QR-Kontingente für Partner — Bestellung, Übergabe, Rückverfolgung
Partner verteilen gedruckte QR-Codes (Sticker/Flyer); jeder physische Code
ist einzeln rückverfolgbar von Scan bis Registrierung.

Backend:
- partner_qr_batches + partner_qr_codes (Token 8-stellig, ohne 0/O/1/l/I),
  users.referred_qr, partner_codes.owner_user_id (+Backfill über referred_by)
- /q/{token}: Scan zählen (scans, first/last_scan_at) → Redirect
  /?ref=CODE&qr=TOKEN — dockt am bestehenden Referral-Flow an
- Registrierung: qr_token wird nur zugeordnet, wenn er zum eingelösten
  Partner-Code gehört (Manipulationsschutz)
- Admin: Kontingent bestellen (max 500), Liste mit Scans/Registrierungen,
  Löschen (Zweiklick), druckfertiges A4-PDF (segno+fpdf2, 3×4 Grid mit
  Kurz-URL + laufender Nummer), Code-Besitzer zuordnen
- Partner-Self-Service: /partner/my-qr (+PDF) für Code-Besitzer

Frontend:
- Admin-Partner-Tab: Karte 'QR-Kontingente' (Bestellung, Stats, PDF, Besitzer)
- Partner-Profil: 'Meine QR-Codes' mit Scans/Registrierungen + PDF-Download
- boot.js/app.js speichern ?qr=, Registrierung schickt qr_token mit

Neu: segno==1.6.6 (pure-python QR). Tests: 5 neue (PDF, Scan-Zählung,
Attribution, Fremd-Token-Schutz, Self-Service). Suite: 51 passed.
2026-06-07 18:20:23 +02:00
..
admin.js Feature: QR-Kontingente für Partner — Bestellung, Übergabe, Rückverfolgung 2026-06-07 18:20:23 +02:00
adoption.js Fix: restliche CSP-blockierte Inline-Handler — Bild-Fallbacks (globaler data-fb Error-Handler) + Hover-Effekte (CSS-Utilities + data-hover-play) 2026-06-04 16:22:43 +02:00
agb.js Rechtliche Seiten überarbeitet: Impressum, Datenschutz, AGB 2026-05-15 16:41:19 +02:00
breeder-editor.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
breeder.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
chat.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
datenschutz.js Big Sweep: Security + Race-Conditions + Tests + DSGVO + A11y, SW by-v1095 2026-05-26 20:12:01 +02:00
diary.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
dog-profile.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
ernaehrung.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
erste-hilfe.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
events.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
expenses.js Fix: alle funktionalen Inline-Event-Handler → addEventListener/Delegation (von CSP-Härtung 65cfa25 app-weit blockiert) 2026-06-04 13:59:27 +02:00
forum.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
friends.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
gruender.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
health.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
hilfe.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
impressum.js Design-System Sprint A: utilities.css + 948 Inline-Styles → Utility-Klassen, SW by-v1102 2026-05-27 07:11:27 +02:00
jobs.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
knigge.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
laeufi.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
litters.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
lost.js Offline: Giftkoeder + vermisste Hunde offline sichtbar, Korridor auf Detailkarte 2026-06-06 12:15:34 +02:00
map.js Karte: Blickrichtungs-Kegel (Kompass) + ruhigeres Folgen (Rene: 'weiss nicht wo es ist/hinschaut') 2026-06-06 20:30:22 +02:00
moderation.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
movies.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
notes.js Fix: Notes-Karten — Zeilenumbruch, Clamp + Detail-Modal beim Klick, SW by-v1119 2026-05-27 14:42:47 +02:00
notifications.js Feature+Fix: Referral-Admin, Pro-Gates, Karten-Layer, onDogChange, Staging-Media (SW by-v855) 2026-05-11 17:23:29 +02:00
onboarding.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
partner-profil.js Feature: QR-Kontingente für Partner — Bestellung, Übergabe, Rückverfolgung 2026-06-07 18:20:23 +02:00
partner.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
personality.js Fix: alle funktionalen Inline-Event-Handler → addEventListener/Delegation (von CSP-Härtung 65cfa25 app-weit blockiert) 2026-06-04 13:59:27 +02:00
playdate.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
poison.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
recalls.js Fix: Recalls leerer State check-circle via UI.icon(), SW by-v602 2026-05-02 10:33:25 +02:00
reise.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
routes.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
settings.js Feature: QR-Kontingente für Partner — Bestellung, Übergabe, Rückverfolgung 2026-06-07 18:20:23 +02:00
sitting.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
social.js Sweep: r.ok-Check bei allen direkten fetch('/api/...')-Aufrufen (SW-503-JSON-Falle) 2026-06-06 11:42:05 +02:00
trainingsplaene.js DRY: Notiz-Modal zentral in UI.noteModal (11 divergierte Kopien entfernt, ~750 Z. weniger); Fix: Founder-Race in jobs.py atomar + founder_number, SW v1133 2026-05-29 10:51:42 +02:00
uebungen.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
walks.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
welcome.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
wetter.js Wetter: aktuelle Ist-Temperatur als Jetzt-Banner oben (API.weather.get parallel), SW v1121 2026-05-29 08:36:30 +02:00
widget.js Fix: alle funktionalen Inline-Event-Handler → addEventListener/Delegation (von CSP-Härtung 65cfa25 app-weit blockiert) 2026-06-04 13:59:27 +02:00
wiki.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00
wurfboerse.js Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
zucht-profil.js Fix: alle funktionalen Inline-Event-Handler → addEventListener/Delegation (von CSP-Härtung 65cfa25 app-weit blockiert) 2026-06-04 13:59:27 +02:00
zuchthunde.js Fix: Design-System-Regression v1102 — .hidden(!important) vs style.display app-weit 2026-06-07 15:09:43 +02:00