Speicherplatz in Dateien, Smilies in Nachrichten

This commit is contained in:
2026-05-28 11:49:53 +02:00
parent d932f1edb5
commit 970872111b
3 changed files with 56 additions and 8 deletions

View File

@@ -25,12 +25,10 @@ const EMOJI_MAP = {
// Ersetze Kürzel am Ende des Textes (nach Leerzeichen oder Satzanfang)
function convertEmojis(text) {
let result = text;
for (const [code, emoji] of Object.entries(EMOJI_MAP)) {
const escaped = code.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
result = result.replace(new RegExp(`(^|\\s)${escaped}(?=\\s|$)`, 'g'), `$1${emoji}`);
}
return result;
// Letztes "Wort" vor dem Leerzeichen/Newline prüfen
return text.replace(/(\S+)(\s)$/, (_, word, space) => {
return (EMOJI_MAP[word] ?? word) + space;
});
}
// ── Emoji-Picker Daten ────────────────────────────────────────────────────────
@@ -86,6 +84,17 @@ export default function Nachrichten({ toast, mobile }) {
const [showPicker, setShowPicker] = useState(false);
const bottomRef = useRef(null);
const pollRef = useRef(null);
const pickerRef = useRef(null);
useEffect(() => {
if (!showPicker) return;
const handler = e => {
if (pickerRef.current && !pickerRef.current.contains(e.target)) setShowPicker(false);
};
document.addEventListener('mousedown', handler);
document.addEventListener('touchstart', handler);
return () => { document.removeEventListener('mousedown', handler); document.removeEventListener('touchstart', handler); };
}, [showPicker]);
// ── Initialisierung ──────────────────────────────────────────────────────────
useEffect(() => {
@@ -430,7 +439,7 @@ export default function Nachrichten({ toast, mobile }) {
Senden nicht möglich
</div>
) : (
<div style={{ display:'flex', gap:8, alignItems:'flex-end', position:'relative' }}>
<div style={{ display:'flex', gap:8, alignItems:'flex-end', position:'relative' }} ref={pickerRef}>
{showPicker && (
<EmojiPicker
onSelect={em => { setText(t => t + em); setShowPicker(false); }}