/**
* Zentrale Icon-Verwaltung – XXX The Game
*
* 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: 'emoji', value: '⚪' },
BDSM: { type: 'emoji', value: '⛓️' },
CHASTITY: { type: 'emoji', value: '🔒' },
// ── Aktionen ──────────────────────────────────────────────────────────
PLAY_NEW: { type: 'emoji', value: '🆕' },
PLAY_ACTIVE: { type: 'emoji', value: '▶️' },
ACTIVE_LOCK: { type: 'emoji', value: '▶️' },
WAITING: { type: 'emoji', value: '⏳' },
CHECK: { type: 'emoji', value: '✅' },
DISCOVER: { type: 'emoji', value: '🗺️' },
ARROW: { type: 'emoji', value: '▶️' },
REFRESH: { type: 'emoji', value: '🔄' }, // Erneuern / Neu laden
START: { type: 'emoji', value: '🚀' }, // Starten / Los
CELEBRATE: { type: 'emoji', value: '🎉' }, // Erfolg / Abschluss
// ── 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
EDIT: { type: 'symbol', value: '✎' }, // Bearbeiten-Button
TRASH: { type: 'emoji', value: '🗑' }, // Löschen-Button
WARNING: { type: 'emoji', value: '⚠️' }, // Warnung / Hinweis
REPORT: { type: 'symbol', value: '⚑' }, // Melden-Button (Flag)
VISIBILITY: { type: 'emoji', value: '👁' }, // Sichtbar / Details sichtbar
THUMBS_UP: { type: 'emoji', value: '👍' }, // Upvote / Zustimmung
THUMBS_DOWN: { type: 'emoji', value: '👎' }, // Downvote / Ablehnung
ARROW_UP: { type: 'symbol', value: '⬆' }, // Sortierung aufsteigend
ARROW_DOWN: { type: 'symbol', value: '⬇' }, // Sortierung absteigend
NAV_PREV: { type: 'symbol', value: '←' }, // Zurück / Vorheriges Bild
NAV_NEXT: { type: 'symbol', value: '→' }, // Weiter / Nächstes Bild
CAROUSEL_PREV: { type: 'symbol', value: '‹' }, // Karussell zurück
CAROUSEL_NEXT: { type: 'symbol', value: '›' }, // Karussell weiter
TIP: { type: 'emoji', value: '💡' }, // Hinweis / Tipp
DOT_RED: { type: 'emoji', value: '🔴' }, // Status-Indikator rot
COMING_SOON: { type: 'emoji', value: '🚧' }, // In Entwicklung / Demnächst
// ── Chastity Game ─────────────────────────────────────────────────────
NEW_LOCK: { type: 'emoji', value: '🆕' },
LOCK: { type: 'emoji', value: '🔒' },
UNLOCK: { type: 'emoji', value: '🔓' }, // Entsperren
LOCKED_SECURE: { type: 'emoji', value: '🔐' }, // Sicher gesperrt (mit Schlüssel)
KEY: { type: 'emoji', value: '🔑' },
HISTORY: { type: 'emoji', value: '🔙' },
VOTES: { type: 'emoji', value: '🗳️' },
TRUST: { type: 'emoji', value: '🤝' }, // Trust-Lock
EMERGENCY: { type: 'emoji', value: '🆘' }, // Notfall-Entsperrung
HYGIENE: { type: 'emoji', value: '🚿' }, // Hygiene-Öffnung
FROZEN: { type: 'emoji', value: '❄️' }, // Eingefroren (zeitlich)
FROZEN_HARD: { type: 'emoji', value: '🧊' }, // Eingefroren (unlimitiert)
UNFREEZE: { type: 'emoji', value: '🌊' }, // Aufgetaut / Unfreeze
CODE_DIGITS: { type: 'emoji', value: '🔢' }, // Zahlenkombination / PIN-Länge
// ── CardLock ──────────────────────────────────────────────────────────
CARD: { type: 'emoji', value: '🃏' }, // Karte (standalone)
DICE: { type: 'emoji', value: '🎲' }, // Zufällig / Würfeln
// ── TimeLock / Spinning Wheel ──────────────────────────────────────────
SPINNING_WHEEL: { type: 'emoji', value: '🎡' }, // Glücksrad drehen
TASK_ACTIVE: { type: 'emoji', value: '🎯' }, // Aktuelle Aufgabe
CLOCK: { type: 'emoji', value: '🕐' }, // Uhr / Zeitpunkt
// ── Social ────────────────────────────────────────────────────────────
FEED: { type: 'emoji', value: '📰' },
SEARCH: { type: 'emoji', value: '🔍' },
FRIENDS: { type: 'emoji', value: '❤️' },
MESSAGES: { type: 'emoji', value: '💬' },
NOTIFICATIONS: { type: 'emoji', value: '🔔' },
GROUPS: { type: 'emoji', value: '👥' },
INVITATIONS: { type: 'emoji', value: '✨' },
SETTINGS: { type: 'emoji', value: '⚙️' },
LOGOUT: { type: 'emoji', value: '⏏️' },
PROFILE: { type: 'emoji', value: '👤' },
HELP: { type: 'emoji', value: '❓' },
CONTACT: { type: 'emoji', value: '✉️' }, // Kontakt / E-Mail
// ── Medien / Dateien ──────────────────────────────────────────────────
PHOTO: { type: 'emoji', value: '📷' }, // Foto / Kamera
FILE_UPLOAD: { type: 'emoji', value: '📁' }, // Datei auswählen / Upload
TEMPLATE: { type: 'emoji', value: '📋' }, // Vorlage / Template
DOCUMENT: { type: 'emoji', value: '📄' }, // Dokument / Impressum
GUIDE: { type: 'emoji', value: '📖' }, // Anleitung / Hilfeseite
STATS: { type: 'emoji', value: '📊' }, // Statistik / Umfrage-Ergebnis
PACKAGE: { type: 'emoji', value: '📦' }, // Paket / Einladung
MAILBOX: { type: 'emoji', value: '📬' }, // Posteingang (Admin)
// ── Abo / Premium ─────────────────────────────────────────────────────
PREMIUM: { type: 'emoji', value: '⭐' }, // Abonnement / Premium
TROPHY: { type: 'emoji', value: '🏆' }, // Auszeichnung / Erfolg
PAYMENT: { type: 'emoji', value: '💳' }, // Zahlung / Abonnement
// ── TTLock / Technik ──────────────────────────────────────────────────
MOBILE: { type: 'emoji', value: '📱' }, // TTLock-App / Mobilgerät
CONNECTION: { type: 'emoji', value: '🔌' }, // Verbindung / Integration
GAMEPAD: { type: 'emoji', value: '🕹️' }, // Spielsteuerung
SHIELD: { type: 'emoji', value: '🛡️' }, // Sicherheit / Datenschutz
ADMIN_TOOLS: { type: 'emoji', value: '🔧' }, // Admin / Werkzeuge
// ── Aufgaben / Items ──────────────────────────────────────────────────
TOYS: { type: 'emoji', value: '➰' },
// ── Spielhistorie – 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: '🔒' },
};
// ── Hilfsfunktionen ───────────────────────────────────────────────────────────
/** Gibt den rohen Wert-String zurück (nur für einfache Icons; '' für compound). */
window.IC = function(key) {
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 `${icon.value}`;
case 'image':
return `
`;
case 'compound': {
const baseHtml = _compoundBase(icon.base, size);
const overlayHtml = _compoundOverlay(icon.overlay, size * 0.48);
return `${baseHtml}${overlayHtml}`;
}
default:
return '';
}
}
function _compoundBase(base, size) {
if (base.type === 'image') {
return `
`;
}
return `${base.value}`;
}
function _compoundOverlay(overlay, size) {
return `${overlay.value}`;
}