Files
Wegwichtel/public/js/group-symbols.js
T
Florian Zumpe 22cb94bd60
Sonarqube Scanner / Prepare environment (push) Successful in 7s
Sonarqube Scanner / Build and test (push) Successful in 23s
Sonarqube Scanner / SonarQube analysis (push) Successful in 55s
Sonarqube Scanner / Deploy to Server (push) Successful in 7s
cahnged gnome symbols
2026-09-30 16:36:57 +02:00

55 lines
1.4 KiB
JavaScript

globalThis.Wegwichtel ??= {};
(function (ns) {
'use strict';
const entries = Object.freeze([
['🪵', 'Holz'],
['🪨', 'Felsen'],
['🏮', 'Laterne'],
['🌼', 'Blume'],
['🚬', 'Pfeife'],
['🐦', 'Vogel'],
['🍄', 'Pilz'],
['🍓', 'Erdbeere'],
['🎃', 'Kürbis']
].map(([unicode, label]) => Object.freeze({
unicode,
label,
imageUrl: `/images/group-symbols/${unicode}.png`
})));
// Presentation selectors must not create different symbols for the same object.
function normalizeUnicode(value) {
if (typeof value !== 'string') return null;
return value.normalize('NFC').replaceAll(/[\uFE0E\uFE0F]/g, '');
}
const byUnicode = new Map(entries.map(entry => [normalizeUnicode(entry.unicode), entry]));
/**
* Read-only catalogue of the nine group-code motifs.
* Loading this file only registers the class; it does not create UI or sessions.
*/
class GroupSymbols {
static list() {
return entries;
}
/** Returns the immutable motif descriptor, or null for an unknown symbol. */
static get(unicode) {
return byUnicode.get(normalizeUnicode(unicode)) ?? null;
}
static has(unicode) {
return this.get(unicode) !== null;
}
static imageUrl(unicode) {
return this.get(unicode)?.imageUrl ?? null;
}
}
ns.GroupSymbols = GroupSymbols;
}(globalThis.Wegwichtel));