/** * Enlaces, iconos y tooltips de wowhead (rama WotLK Classic) con el locale de la * web. Sustituye a la antigua base de datos de ítems (AoWoW en wotlk.ultimowow / * wotlk.novawow) y a los iconos de otros mirrors: todo pasa por wowhead / zamimg. * * El tooltip lo pinta el script global (ver el layout raíz); el idioma del * tooltip lo determina el SUBDOMINIO del enlace, por eso construimos las URLs * con el subdominio del locale actual. * * Es un módulo puro (sin acceso a BD), así que lo pueden importar tanto los * Server Components como los Client Components. */ export type WowheadType = 'item' | 'spell' | 'quest' | 'npc' | 'achievement' | 'object' | 'faction' export type IconSize = 'tiny' | 'small' | 'medium' | 'large' // Subdominio de wowhead por locale de la web (www = inglés, por defecto). // Añadir aquí si se soportan más idiomas (de, fr, ru, pt, it, ko...). const LOCALE_SUBDOMAIN: Record = { es: 'es', en: 'www' } function subdomain(locale: string): string { return LOCALE_SUBDOMAIN[locale] ?? 'www' } /** URL de wowhead (rama WotLK) para una entidad, en el locale de la web. */ export function wowheadUrl(type: WowheadType, id: number | string, locale: string): string { return `https://${subdomain(locale)}.wowhead.com/wotlk/${type}=${id}` } /** Enlace a un ítem en wowhead (WotLK) en el locale de la web. */ export function wowheadItemUrl(id: number | string, locale: string): string { return wowheadUrl('item', id, locale) } /** Home de la base de datos WotLK en wowhead (enlace "WOTLK DB"). */ export function wowheadWotlkHome(locale: string): string { return `https://${subdomain(locale)}.wowhead.com/wotlk` } /** Icono (de ítem/hechizo/misión) servido por el CDN de wowhead (zamimg). */ export function wowheadIcon(name: string, size: IconSize = 'large'): string { const ext = size === 'tiny' ? 'gif' : 'jpg' return `https://wow.zamimg.com/images/wow/icons/${size}/${name}.${ext}` } /** * Valor del atributo `data-wowhead`, para que el script de tooltips lo reconozca * con la rama WotLK aunque el href no baste (iconos, celdas sin enlace, etc.). */ export function wowheadData(type: WowheadType, id: number | string): string { return `${type}=${id}&domain=wotlk` }