Verschiebung nach anderem RePo - nun pro Projekt getrennt
This commit is contained in:
190
bin/main/static/js/icons.js
Normal file
190
bin/main/static/js/icons.js
Normal file
@@ -0,0 +1,190 @@
|
||||
/**
|
||||
* 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 `<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