SHA256
- Пикер: анимированные webp грузились с raw.githubusercontent.com (в репо их нет) — у пользователей с VPN/операторскими блокировками тап по эмодзи давал сетевую ошибку и «моргание»/подмену картинки. Теперь всегда локальные статичные превью, без внешних запросов и pointer capture; мёртвая константа GitHub-URL удалена. Возврат анимаций — только локальным паком. - Чат (тач): открытие эмодзи-пикера прячет клавиатуру (blur), вставка эмодзи не фокусирует textarea на сенсорных устройствах — поле больше не перекрывается клавиатурой (на десктопе фокус как раньше). - Глобальный обработчик ошибок: кросс-ориджин «Script error.» без файла/стека больше не показывается алертом (лог и captureClientError остаются) — устраняет пугающую плашку на Xiaomi/Safari. - VERSION: client 1.2.327. Проверено в превью: тап по эмодзи — 0 запросов к githubusercontent, 😈 вставляется ровно как 😈, картинка кнопки стабильна; фильтр алерта: Script error. — тихо, реальная ошибка — алерт показывается. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
2.4 KiB
JavaScript
52 lines
2.4 KiB
JavaScript
import { TELEGRAM_EMOJI_GROUP_ACTIVITY } from './telegram-emoji-activity.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_ANIMALS_NATURE } from './telegram-emoji-animals_nature.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_FLAGS } from './telegram-emoji-flags.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_FOOD_DRINK } from './telegram-emoji-food_drink.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_OBJECTS } from './telegram-emoji-objects.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_PEOPLE } from './telegram-emoji-people.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_SMILEYS } from './telegram-emoji-smileys.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_SYMBOLS } from './telegram-emoji-symbols.js?v=202607151545';
|
||
import { TELEGRAM_EMOJI_GROUP_TRAVEL_PLACES } from './telegram-emoji-travel_places.js?v=202607151545';
|
||
|
||
const TELEGRAM_EMOJI_PREVIEW_BASE_URL = '/assets/emoji/telegram-previews/';
|
||
|
||
function getTelegramEmojiName(file) {
|
||
return String(file || '').split('/').pop()?.replace(/\.webp$/i, '') || '';
|
||
}
|
||
|
||
function withPreviewUrls(group) {
|
||
return {
|
||
...group,
|
||
items: group.items.map((item) => ({
|
||
...item,
|
||
name: item.name || getTelegramEmojiName(item.file),
|
||
previewUrl: getTelegramEmojiPreviewUrl(item.file),
|
||
animatedUrl: getTelegramEmojiAssetUrl(item.file),
|
||
})),
|
||
};
|
||
}
|
||
|
||
export const TELEGRAM_EMOJI_GROUPS = [
|
||
TELEGRAM_EMOJI_GROUP_SMILEYS,
|
||
TELEGRAM_EMOJI_GROUP_PEOPLE,
|
||
TELEGRAM_EMOJI_GROUP_ANIMALS_NATURE,
|
||
TELEGRAM_EMOJI_GROUP_FOOD_DRINK,
|
||
TELEGRAM_EMOJI_GROUP_TRAVEL_PLACES,
|
||
TELEGRAM_EMOJI_GROUP_ACTIVITY,
|
||
TELEGRAM_EMOJI_GROUP_OBJECTS,
|
||
TELEGRAM_EMOJI_GROUP_SYMBOLS,
|
||
TELEGRAM_EMOJI_GROUP_FLAGS,
|
||
].map(withPreviewUrls);
|
||
|
||
export function getTelegramEmojiAssetUrl(file) {
|
||
// Анимированные webp с raw.githubusercontent.com отключены: внешний хост
|
||
// блокируется у части пользователей (VPN/операторы) — тап по эмодзи вызывал
|
||
// сетевую ошибку и «моргание» картинки. Пока отдаём локальное статичное превью;
|
||
// возврат анимаций — только локальным паком в assets.
|
||
return getTelegramEmojiPreviewUrl(file);
|
||
}
|
||
|
||
export function getTelegramEmojiPreviewUrl(file) {
|
||
return `${TELEGRAM_EMOJI_PREVIEW_BASE_URL}${String(file || '').replace(/\.webp$/i, '.png').split('/').map((part) => encodeURIComponent(part)).join('/')}`;
|
||
}
|