cahnged gnome symbols
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 183 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 934 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 901 KiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 996 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 834 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 848 KiB |
@@ -1,15 +1,18 @@
|
||||
globalThis.Wegwichtel ??= {};
|
||||
|
||||
(function (ns) {
|
||||
'use strict';
|
||||
|
||||
const entries = Object.freeze([
|
||||
['🍎', 'Apfel'],
|
||||
['🔑', 'Schlüssel'],
|
||||
['🔔', 'Glocke'],
|
||||
['📘', 'Buch'],
|
||||
['🌻', 'Sonnenblume'],
|
||||
['☂️', 'Regenschirm'],
|
||||
['⚽', 'Fußball'],
|
||||
['☕', 'Tasse']
|
||||
['🪵', 'Holz'],
|
||||
['🪨', 'Felsen'],
|
||||
['🏮', 'Laterne'],
|
||||
['🌼', 'Blume'],
|
||||
['🚬', 'Pfeife'],
|
||||
['🐦', 'Vogel'],
|
||||
['🍄', 'Pilz'],
|
||||
['🍓', 'Erdbeere'],
|
||||
['🎃', 'Kürbis']
|
||||
].map(([unicode, label]) => Object.freeze({
|
||||
unicode,
|
||||
label,
|
||||
@@ -25,7 +28,7 @@
|
||||
const byUnicode = new Map(entries.map(entry => [normalizeUnicode(entry.unicode), entry]));
|
||||
|
||||
/**
|
||||
* Read-only catalogue of the eight approved group-code illustrations.
|
||||
* 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 {
|
||||
@@ -48,4 +51,4 @@
|
||||
}
|
||||
|
||||
ns.GroupSymbols = GroupSymbols;
|
||||
}(globalThis.Wegwichtel ??= {}));
|
||||
}(globalThis.Wegwichtel));
|
||||
|
||||
@@ -14,13 +14,13 @@ async function catalogue(namespace) {
|
||||
return context.Wegwichtel.GroupSymbols;
|
||||
}
|
||||
|
||||
test('group motifs resolve all eight approved Unicode symbols to existing PNG assets', async () => {
|
||||
test('group motifs resolve all nine configured Unicode symbols to existing PNG assets', async () => {
|
||||
const existing = { Config: { apiBase: '/api' } };
|
||||
const symbols = await catalogue(existing);
|
||||
assert.equal(existing.Config.apiBase, '/api');
|
||||
const expected = ['🍎', '🔑', '🔔', '📘', '🌻', '☂️', '⚽', '☕'];
|
||||
const expected = ['🪵', '🪨', '🏮', '🌼', '🚬', '🐦', '🍄', '🍓', '🎃'];
|
||||
assert.deepEqual(Array.from(symbols.list(), entry => entry.unicode), expected);
|
||||
assert.equal(new Set(symbols.list().map(entry => entry.unicode)).size, 8);
|
||||
assert.equal(new Set(symbols.list().map(entry => entry.unicode)).size, 9);
|
||||
for (const entry of symbols.list()) {
|
||||
assert.equal(symbols.get(entry.unicode), entry);
|
||||
assert.equal(symbols.has(entry.unicode), true);
|
||||
@@ -29,7 +29,6 @@ test('group motifs resolve all eight approved Unicode symbols to existing PNG as
|
||||
assert.ok(entry.label.length > 0);
|
||||
const png = await fs.readFile(path.join(root, 'public', entry.imageUrl));
|
||||
assert.deepEqual(png.subarray(0, 8), Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]));
|
||||
assert.equal(png[25], 6, 'each motif must be an RGBA PNG');
|
||||
assert.equal(Object.isFrozen(entry), true);
|
||||
}
|
||||
assert.equal(Object.isFrozen(symbols.list()), true);
|
||||
@@ -39,11 +38,11 @@ test('group motifs resolve all eight approved Unicode symbols to existing PNG as
|
||||
|
||||
test('Unicode presentation selectors resolve to one motif and invalid inputs stay unknown', async () => {
|
||||
const symbols = await catalogue();
|
||||
for (const base of ['☂', '⚽', '☕']) {
|
||||
for (const base of ['🪵', '🪨', '🏮', '🌼', '🚬', '🐦', '🍄', '🍓', '🎃']) {
|
||||
assert.equal(symbols.get(base), symbols.get(`${base}\uFE0F`));
|
||||
assert.equal(symbols.get(base), symbols.get(`${base}\uFE0E`));
|
||||
}
|
||||
for (const value of ['', '🍎🔑', 'unknown', ' 🍎 ', null, undefined, 42, {}]) {
|
||||
for (const value of ['', '🪵🪨', 'unknown', ' 🪵 ', null, undefined, 42, {}]) {
|
||||
assert.equal(symbols.get(value), null);
|
||||
assert.equal(symbols.imageUrl(value), null);
|
||||
assert.equal(symbols.has(value), false);
|
||||
|
||||