7d1abab9f1
Sustituye la base de datos de ítems del sistema antiguo (AoWoW en wotlk.novawow/wotlk.ultimowow) y los iconos de mirrors por wowhead / zamimg, con el idioma del tooltip según el locale de la web (es. / www.). Sistema reutilizable para rutas actuales y futuras: - lib/wowhead.ts: wowheadUrl/wowheadItemUrl/wowheadWotlkHome (subdominio por locale), wowheadIcon (zamimg) y wowheadData (atributo data-wowhead, rama WotLK). - components/WowheadLink.tsx: enlace con tooltip en el locale actual. - layout raíz: config whTooltips (solo tooltips) + script tooltips.js global; funciona con contenido añadido por React (carrito, búsquedas). Aplicado en: send-gift (catálogo + carrito), restore-items, recruit (RecruitPanel, enlace por item_id + icono zamimg), quest-character (misión/npc/ facción + iconos), y el enlace "WOTLK DB" de la cabecera. Verificado en prod (:3001): /es -> es.wowhead.com, /en -> www.wowhead.com, data-wowhead presente, iconos por zamimg. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
53 lines
2.2 KiB
TypeScript
53 lines
2.2 KiB
TypeScript
/**
|
|
* 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<string, string> = { 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`
|
|
}
|