globalThis.Wegwichtel ??= {}; (function (ns) { 'use strict'; function messageText(error) { const value = error?.responseJSON?.message || error?.message || error; if (typeof value !== 'string') return ''; try { const parsed = JSON.parse(value); return typeof parsed.message === 'string' ? parsed.message : ''; } catch { return value; } } const explanations = [ [/Freigegebene Strecken dürfen nur/, "errors.delete-published"], [/Freigegebene Strecken können/, "errors.edit-published"], [/GPX|XML|Trackpunkte/, "errors.invalid-track"], [/POI.*nicht gefunden/, "errors.station-missing"], [/POI-Koordinaten/, "errors.station-location"], [/Bildformat|Bilddatei/, "errors.image-format"], [/Audioformat|Audiodatei/, "errors.audio-format"] ]; const statusExplanations = new Map([ [413, "errors.file-size"], [401, "errors.permission"], [403, "errors.permission"] ]); function readableMessage(message, fallback) { if (/\b(?:HTTP|API|HTTPS|JSON|IndexedDB|OPFS|CacheStorage|Base64|Blob|Server|sequence|dataUrl|PUT|POST)\b|https?:\/\/|[{}]/i.test(message)) return fallback; if (/\b(?:Failed|NetworkError|TypeError|AbortError|SecurityError|NotAllowedError|undefined)\b/i.test(message)) return fallback; if (message && readablePatterns.some(pattern => pattern.test(message))) return message; return fallback; } const readablePatterns = [ /[äöüÄÖÜß]/, /\b(?:The|This|Your|Please|Choose|Allow|Give|Save|Remove|Trail|Stop|There)\b/, /\b(?:Die|Der|Das|Dein|Deine|Diese|Dieser|Dieses|Bitte|Wähle|Erlaube)\b/, /\b(?:Ein|Eine|Kein|Keine|Speicher|Strecke|Station|Wegwichtel|Gespeichert|Entferne)\b/ ]; function errorMessage(error, fallback = ns.I18n.t("editor.error.generic")) { const message = messageText(error); if (error?.name === 'QuotaExceededError' || error?.cause?.name === 'QuotaExceededError') return ns.I18n.t("errors.quota"); const explanation = explanations.find(([pattern]) => pattern.test(message)); if (explanation) return ns.I18n.t(explanation[1]); const statusExplanation = statusExplanations.get(error?.status); if (statusExplanation) return ns.I18n.t(statusExplanation); if (error?.status >= 500) return ns.I18n.t("errors.unavailable"); return readableMessage(message, fallback); } ns.UserMessages = Object.freeze({ error: errorMessage }); }(globalThis.Wegwichtel));