PageSourceSearch

https://www.octopus-office.de/templates/NIUplus/js/niu-app/niu.settings.js?v=7.15.0

js octopus-office.de collected 2026-09-24 23:45:17 UTC 2,689 bytes, 66 lines download raw bytes

1/**
2 * Dev-Wächter für den Frontend-Export der Companion-Optionen.
3 *
4 * head.tpl (Block 'layout-head-niu-settings') exportiert nach window.niu.settings nur noch eine
5 * Whitelist der Optionen, die das Frontend-JS wirklich liest. Wer eine Option liest, die dort
6 * nicht steht, bekommt still `undefined` – der Fehler fällt dann erst im Verhalten auf, oft weit
7 * entfernt von der Ursache.
8 *
9 * Dieser Wächter legt einen Proxy über das Objekt und meldet jeden Zugriff auf einen nicht
10 * exportierten Schlüssel einmalig per console.warn. Er ändert kein Verhalten: der Proxy liefert
11 * exakt das, was das Objekt selbst geliefert hätte.
12 *
13 * Feuert er im Normalbetrieb, ist NICHT der Wächter falsch, sondern die Whitelist unvollständig.
14 *
15 * Der Wächter muss vor allen Lesern laufen. Deshalb wird er als Seiteneffekt-Import eingebunden:
16 *   - Bundle-Modus: erster Import in niu.app.js
17 *   - Einzelmodul-Modus: erster Import in niu.controller.js, dem ersten Modul beider Footer
18 * niu.slider.js ist davon unberührt (klassisches Skript im Head), liest seine Werte aber erst
19 * nach DOMContentLoaded – also nach diesem Modul.
20 *
21 * Importiert wird über den Bare-Specifier 'niu-settings' (Importmap in head.tpl, Alias in
22 * webpack.config.js). Ein relativer Import bekäme keinen Cache-Buster: ES-Module-Imports erben
23 * das ?v= der importierenden URL nicht.
24 */
25
26/* Schlüssel, die JS-Laufzeit und Werkzeuge probieren, ohne dass jemand eine Option meint. */
27const IGNORED_KEYS = new Set(['then', 'toJSON', 'nodeType', 'inspect', 'splice']);
28
29const warned = new Set();
30
31function warnMissing(key) {
32    if (warned.has(key)) {
33        return;
34    }
35    warned.add(key);
36    console.warn(
37        `[NIU] Setting '${key}' fehlt im Frontend-Export – Whitelist in head.tpl ` +
38        `(Block 'layout-head-niu-settings') ergänzen.`
39    );
40}
41
42export default function installSettingsGuard() {
43    const niu = window.niu;
44
45    /* Kein Export vorhanden (z. B. Bot-Auslieferung: der ganze Block steht unter {if !$isBot}).
46       Dann gibt es nichts zu bewachen – und es wird auch nichts angelegt, damit sich das
47       Verhalten gegenüber vorher nicht ändert. */
48    if (!niu || niu.settingsGuardInstalled) {
49        return;
50    }
51    if (!niu.settings || typeof niu.settings !== 'object') {
52        return;
53    }
54
55    niu.settings = new Proxy(niu.settings, {
56        get(target, prop, receiver) {
57            if (typeof prop === 'string' && !(prop in target) && !IGNORED_KEYS.has(prop)) {
58                warnMissing(prop);
59            }
60            return Reflect.get(target, prop, receiver);
61        }
62    });
63    niu.settingsGuardInstalled = true;
64}
65
66installSettingsGuard();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.