Bug Fixes und Icons Refactioring
This commit is contained in:
@@ -1,32 +1,49 @@
|
||||
/**
|
||||
* Zentrale Icon-Verwaltung – XXX The Game
|
||||
* Alle Emojis und Symbole der App werden hier definiert.
|
||||
* Typen: emoji (Standard-Emoji), symbol (Unicode-Symbol), image (Pfad zu Bilddatei)
|
||||
*
|
||||
* Typen:
|
||||
* emoji – Standard-Emoji oder Unicode-Zeichen (value: string)
|
||||
* symbol – Unicode-Symbol (value: string)
|
||||
* image – Pfad zu einer Bilddatei (value: string)
|
||||
* compound – Doppel-Icon: base-Icon + kleines Overlay-Icon (bottom-right)
|
||||
* Felder: base { type, value }, overlay { type, value }
|
||||
* base kann emoji, symbol oder image sein.
|
||||
*/
|
||||
window.ICONS = {
|
||||
// ── Navigation / Sidebar ──
|
||||
HOME: { type: 'emoji', value: '⊞' },
|
||||
VANILLA: { type: 'symbol', value: '♡' },
|
||||
BDSM: { type: 'symbol', value: '◆' },
|
||||
CHASTITY: { type: 'symbol', value: '⊗' },
|
||||
// ── Navigation / Sidebar ──────────────────────────────────────────────
|
||||
HOME: { type: 'emoji', value: '🏠' },
|
||||
VANILLA: { type: 'emoji', value: '⚪' },
|
||||
BDSM: { type: 'emoji', value: '⛓️' },
|
||||
CHASTITY: { type: 'emoji', value: '🔒' },
|
||||
|
||||
// ── Aktionen ──
|
||||
PLAY_NEW: { type: 'symbol', value: '▷' },
|
||||
PLAY_ACTIVE: { type: 'symbol', value: '▶' },
|
||||
// ── Aktionen ──────────────────────────────────────────────────────────
|
||||
PLAY_NEW: { type: 'emoji', value: '🆕' },
|
||||
PLAY_ACTIVE: { type: 'emoji', value: '▶️' },
|
||||
ACTIVE_LOCK: { type: 'emoji', value: '▶️' },
|
||||
WAITING: { type: 'emoji', value: '⏳' },
|
||||
CHECK: { type: 'symbol', value: '✓' },
|
||||
DISCOVER: { type: 'symbol', value: '⊙' },
|
||||
ARROW: { type: 'symbol', value: '▸' },
|
||||
CHECK: { type: 'emoji', value: '✅' },
|
||||
DISCOVER: { type: 'emoji', value: '🗺️' },
|
||||
ARROW: { type: 'emoji', value: '▶️' },
|
||||
|
||||
// ── Chastity Game ──
|
||||
// ── UI-Symbole ────────────────────────────────────────────────────────
|
||||
CLOSE: { type: 'symbol', value: '✕' }, // Schließen / Ablehnen / Löschen
|
||||
CONFIRM: { type: 'symbol', value: '✓' }, // Bestätigen / Abschließen / Annehmen
|
||||
LIKE: { type: 'symbol', value: '♥' }, // Like-Button
|
||||
AVATAR: { type: 'symbol', value: '◉' }, // Avatar-Platzhalter (kein Bild)
|
||||
ERROR: { type: 'emoji', value: '❌' }, // Fehlerzustand
|
||||
TIMER: { type: 'emoji', value: '⏱️' }, // Zeitanzeige / Stoppuhr
|
||||
LIGHTNING: { type: 'emoji', value: '⚡' }, // Aktion (z. B. Zeit entfernen)
|
||||
EMOJI_PICKER: { type: 'emoji', value: '😊' }, // Emoji-Picker öffnen
|
||||
REMOVE: { type: 'symbol', value: '⊗' }, // Eintrag/Spiel entfernen
|
||||
|
||||
// ── Chastity Game ─────────────────────────────────────────────────────
|
||||
NEW_LOCK: { type: 'emoji', value: '🆕' },
|
||||
LOCK: { type: 'emoji', value: '🔒' },
|
||||
KEY: { type: 'emoji', value: '🔑' },
|
||||
HISTORY: { type: 'emoji', value: '🔙' },
|
||||
VOTES: { type: 'emoji', value: '🗳️' },
|
||||
|
||||
// ── Social ──
|
||||
// ── Social ────────────────────────────────────────────────────────────
|
||||
FEED: { type: 'emoji', value: '📰' },
|
||||
SEARCH: { type: 'emoji', value: '🔍' },
|
||||
FRIENDS: { type: 'emoji', value: '❤️' },
|
||||
@@ -35,14 +52,79 @@ window.ICONS = {
|
||||
GROUPS: { type: 'emoji', value: '👥' },
|
||||
INVITATIONS: { type: 'emoji', value: '✨' },
|
||||
SETTINGS: { type: 'emoji', value: '⚙️' },
|
||||
LOGOUT: { type: 'symbol', value: '⏏' },
|
||||
PROFILE: { type: 'symbol', value: '◉' },
|
||||
LOGOUT: { type: 'emoji', value: '⏏️' },
|
||||
PROFILE: { type: 'emoji', value: '👤' },
|
||||
|
||||
// ── Aufgaben / Items ──
|
||||
TOYS: { type: 'symbol', value: '◈' },
|
||||
// ── Aufgaben / Items ──────────────────────────────────────────────────
|
||||
TOYS: { type: 'emoji', value: '➰' },
|
||||
|
||||
// ── Spielhistorie – Spieltypen ────────────────────────────────────────
|
||||
// Einfache Spieltypen
|
||||
GAME_BDSM: { type: 'emoji', value: '⛓️' },
|
||||
GAME_VANILLA: { type: 'emoji', value: '❤️' },
|
||||
|
||||
// Doppel-Icons: großes Basis-Icon + kleines 🔒-Overlay
|
||||
GAME_CARDLOCK: {
|
||||
type: 'compound',
|
||||
base: { type: 'image', value: '/img/card.png' },
|
||||
overlay: { type: 'emoji', value: '🔒' }
|
||||
},
|
||||
GAME_TIMELOCK: {
|
||||
type: 'compound',
|
||||
base: { type: 'emoji', value: '⏰' },
|
||||
overlay: { type: 'emoji', value: '🔒' }
|
||||
},
|
||||
|
||||
// ── Spielhistorie – Rollen-Badges ─────────────────────────────────────
|
||||
ROLE_KEYHOLDER: { type: 'emoji', value: '🔑' },
|
||||
ROLE_LOCKEE: { type: 'emoji', value: '🔒' },
|
||||
};
|
||||
|
||||
/** Gibt nur den Wert (String) zurück – für einfache Einbindung in Templates */
|
||||
// ── Hilfsfunktionen ───────────────────────────────────────────────────────────
|
||||
|
||||
/** Gibt den rohen Wert-String zurück (nur für einfache Icons; '' für compound). */
|
||||
window.IC = function(key) {
|
||||
return (window.ICONS[key] || {}).value || '';
|
||||
const icon = window.ICONS[key];
|
||||
return (icon && icon.type !== 'compound') ? (icon.value || '') : '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Gibt ein fertiges HTML-Fragment zurück, das das Icon darstellt.
|
||||
*
|
||||
* @param {string} key – Schlüssel aus window.ICONS
|
||||
* @param {number} [size] – Basisgröße in rem (Standard: 2.7)
|
||||
* @returns {string} HTML-String
|
||||
*/
|
||||
window.IChtml = function(key, size) {
|
||||
const icon = window.ICONS[key];
|
||||
if (!icon) return '';
|
||||
return _iconToHtml(icon, size != null ? size : 2.7);
|
||||
};
|
||||
|
||||
function _iconToHtml(icon, size) {
|
||||
switch (icon.type) {
|
||||
case 'emoji':
|
||||
case 'symbol':
|
||||
return `<span style="font-size:${size}rem;line-height:1;">${icon.value}</span>`;
|
||||
case 'image':
|
||||
return `<img src="${icon.value}" style="width:${size}rem;height:${size}rem;object-fit:contain;display:block;" alt="">`;
|
||||
case 'compound': {
|
||||
const baseHtml = _compoundBase(icon.base, size);
|
||||
const overlayHtml = _compoundOverlay(icon.overlay, size * 0.48);
|
||||
return `<span style="position:relative;display:inline-block;line-height:1;">${baseHtml}${overlayHtml}</span>`;
|
||||
}
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function _compoundBase(base, size) {
|
||||
if (base.type === 'image') {
|
||||
return `<img src="${base.value}" style="width:${size}rem;height:${size}rem;object-fit:contain;display:block;" alt="">`;
|
||||
}
|
||||
return `<span style="font-size:${size}rem;line-height:1;">${base.value}</span>`;
|
||||
}
|
||||
|
||||
function _compoundOverlay(overlay, size) {
|
||||
return `<span style="position:absolute;bottom:-2px;right:-4px;font-size:${size.toFixed(2)}rem;line-height:1;">${overlay.value}</span>`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user