Prefijos del tema nw- y uw- -> ns- (carpetas, ficheros, clases y rutas)
Renombrado completo de los prefijos heredados: 19 carpetas, 11 ficheros y 318 referencias en 35 ficheros de código, más las clases y las rutas url() de dentro del CSS del tema. Se usa git mv para conservar el historial. También fuera del código, que un sed no ve: - BD: votesite.image_url (4 filas) apuntaba a /nw-themes/... - Ficheros con la marca vieja en el NOMBRE: novawow-maintenance.webp -> nightspire-maintenance.webp (lo usa la página de mantenimiento) y store_novawow_response.js. ⚠ Alias en Caddy /nw-themes/* -> /ns-themes/*: los correos ENVIADOS antes del rebranding llevan esas rutas escritas y están en las bandejas de los usuarios. Sin el alias, sus imágenes se romperían. Verificado que las rutas viejas siguen sirviendo 200. Nota: ns-js/ y ns-js-handlers/ son CÓDIGO MUERTO (manejadores jQuery del portal Django, que ya se borró). Se midió en el navegador: la web no pide ni un solo JS del tema. Se renombran igualmente por consistencia, pero son candidatos a borrarse. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -82,11 +82,11 @@ export function AdminForumManager({ initial }: { initial: Group[] }) {
|
||||
call(`/api/admin/forum/category/${category.id}`, 'PUT', { name: editCat.name, nameEn: editCat.nameEn, order: Number(editCat.order) }).then((ok) => ok && setEditCat(null))
|
||||
}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn"
|
||||
className="ns-tool-btn"
|
||||
>
|
||||
{t('save')}
|
||||
</button>{' '}
|
||||
<button onClick={() => setEditCat(null)} className="nw-tool-btn">{t('cancel')}</button>
|
||||
<button onClick={() => setEditCat(null)} className="ns-tool-btn">{t('cancel')}</button>
|
||||
</div>
|
||||
) : (
|
||||
<div className="title-content-h3">
|
||||
@@ -97,14 +97,14 @@ export function AdminForumManager({ initial }: { initial: Group[] }) {
|
||||
<button
|
||||
onClick={() => setEditCat({ id: category.id, name: category.name, nameEn: category.name_en, order: String(category.order) })}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn"
|
||||
className="ns-tool-btn"
|
||||
>
|
||||
{t('edit')}
|
||||
</button>{' '}
|
||||
<button
|
||||
onClick={() => confirm(t('confirmDelete')) && call(`/api/admin/forum/category/${category.id}`, 'DELETE')}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn red-info2"
|
||||
className="ns-tool-btn red-info2"
|
||||
>
|
||||
{t('delete')}
|
||||
</button>
|
||||
@@ -141,11 +141,11 @@ export function AdminForumManager({ initial }: { initial: Group[] }) {
|
||||
}).then((ok) => ok && setEditForum(null))
|
||||
}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn"
|
||||
className="ns-tool-btn"
|
||||
>
|
||||
{t('save')}
|
||||
</button>{' '}
|
||||
<button onClick={() => setEditForum(null)} className="nw-tool-btn">{t('cancel')}</button>
|
||||
<button onClick={() => setEditForum(null)} className="ns-tool-btn">{t('cancel')}</button>
|
||||
</td>
|
||||
</tr>
|
||||
) : (
|
||||
@@ -160,21 +160,21 @@ export function AdminForumManager({ initial }: { initial: Group[] }) {
|
||||
<button
|
||||
onClick={() => setEditForum({ id: f.id, name: f.name, nameEn: f.name_en, description: f.description, descriptionEn: f.description_en, order: String(f.order), visibility: f.visibility })}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn"
|
||||
className="ns-tool-btn"
|
||||
>
|
||||
{t('edit')}
|
||||
</button>{' '}
|
||||
<button
|
||||
onClick={() => call(`/api/admin/forum/${f.id}`, 'PATCH', { visibility: f.visibility === 0 })}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn"
|
||||
className="ns-tool-btn"
|
||||
>
|
||||
{f.visibility === 0 ? t('show') : t('hide')}
|
||||
</button>{' '}
|
||||
<button
|
||||
onClick={() => confirm(t('confirmDelete')) && call(`/api/admin/forum/${f.id}`, 'DELETE')}
|
||||
disabled={busy}
|
||||
className="nw-tool-btn red-info2"
|
||||
className="ns-tool-btn red-info2"
|
||||
>
|
||||
{t('delete')}
|
||||
</button>
|
||||
|
||||
@@ -69,7 +69,7 @@ export function AdminGoldManager({ initial }: { initial: GoldOption[] }) {
|
||||
<p className="third-brown small-font">{o.price.toFixed(2)} €</p>
|
||||
</td>
|
||||
<td className="real-info-box">
|
||||
<button onClick={() => remove(o.id)} className="nw-tool-btn red-info2">
|
||||
<button onClick={() => remove(o.id)} className="ns-tool-btn red-info2">
|
||||
{t('delete')}
|
||||
</button>
|
||||
</td>
|
||||
|
||||
@@ -109,10 +109,10 @@ export function AdminNewsManager({ initialNews }: { initialNews: NewsItem[] }) {
|
||||
<input value={edit.tituloEn} onChange={(e) => setEdit({ ...edit, tituloEn: e.target.value })} placeholder={t('newsTitleEn')} maxLength={200} />
|
||||
<textarea value={edit.contenidoEn} onChange={(e) => setEdit({ ...edit, contenidoEn: e.target.value })} placeholder={t('newsContentEn')} rows={4} />
|
||||
<input value={edit.enlace} onChange={(e) => setEdit({ ...edit, enlace: e.target.value })} placeholder={t('newsLink')} />
|
||||
<button onClick={() => save(n.id)} disabled={busy} className="nw-tool-btn">
|
||||
<button onClick={() => save(n.id)} disabled={busy} className="ns-tool-btn">
|
||||
{busy ? t('saving') : t('save')}
|
||||
</button>{' '}
|
||||
<button onClick={() => setEditId(null)} className="nw-tool-btn">
|
||||
<button onClick={() => setEditId(null)} className="ns-tool-btn">
|
||||
{t('cancel')}
|
||||
</button>
|
||||
</td>
|
||||
@@ -124,10 +124,10 @@ export function AdminNewsManager({ initialNews }: { initialNews: NewsItem[] }) {
|
||||
{n.fecha && <p className="third-brown small-font">{new Date(n.fecha).toLocaleString(locale)}</p>}
|
||||
</td>
|
||||
<td className="real-info-box">
|
||||
<button onClick={() => startEdit(n)} className="nw-tool-btn">
|
||||
<button onClick={() => startEdit(n)} className="ns-tool-btn">
|
||||
{t('edit')}
|
||||
</button>{' '}
|
||||
<button onClick={() => remove(n.id)} className="nw-tool-btn red-info2">
|
||||
<button onClick={() => remove(n.id)} className="ns-tool-btn red-info2">
|
||||
{t('delete')}
|
||||
</button>
|
||||
</td>
|
||||
|
||||
@@ -44,7 +44,7 @@ function Row({ row }: { row: PriceRow }) {
|
||||
onChange={(e) => setValue(e.target.value)}
|
||||
style={{ width: 90, textAlign: 'right' }}
|
||||
/>{' '}
|
||||
<button onClick={save} disabled={busy} className="nw-tool-btn">
|
||||
<button onClick={save} disabled={busy} className="ns-tool-btn">
|
||||
{t('save')}
|
||||
</button>{' '}
|
||||
{saved && <span className="green-info small-font">{t('saved')}</span>}
|
||||
|
||||
@@ -135,8 +135,8 @@ function PromoRow({ promo, onDelete }: { promo: PromoCode; onDelete: () => void
|
||||
<label className="small-font"><input type="checkbox" checked={active} onChange={(e) => setActive(e.target.checked)} /> {t('promoActive')}</label>
|
||||
</td>
|
||||
<td className="real-info-box">
|
||||
<button onClick={save} disabled={busy} className="nw-tool-btn">{saved ? t('saved') : t('save')}</button>{' '}
|
||||
<button onClick={onDelete} className="nw-tool-btn red-info2">{t('delete')}</button>
|
||||
<button onClick={save} disabled={busy} className="ns-tool-btn">{saved ? t('saved') : t('save')}</button>{' '}
|
||||
<button onClick={onDelete} className="ns-tool-btn red-info2">{t('delete')}</button>
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
|
||||
@@ -90,7 +90,7 @@ export function AdminRecruitManager({ initial }: { initial: RecruitReward[] }) {
|
||||
</p>
|
||||
</td>
|
||||
<td className="real-info-box">
|
||||
<button onClick={() => remove(r.id)} className="nw-tool-btn red-info2">
|
||||
<button onClick={() => remove(r.id)} className="ns-tool-btn red-info2">
|
||||
{t('delete')}
|
||||
</button>
|
||||
</td>
|
||||
|
||||
@@ -90,11 +90,11 @@ export function AdminUsersManager() {
|
||||
</td>
|
||||
<td className="real-info-box">
|
||||
{a.banned ? (
|
||||
<button onClick={() => act(a, 'unban')} className="nw-tool-btn green-info">
|
||||
<button onClick={() => act(a, 'unban')} className="ns-tool-btn green-info">
|
||||
{t('unban')}
|
||||
</button>
|
||||
) : (
|
||||
<button onClick={() => act(a, 'ban')} className="nw-tool-btn red-info2">
|
||||
<button onClick={() => act(a, 'ban')} className="ns-tool-btn red-info2">
|
||||
{t('ban')}
|
||||
</button>
|
||||
)}
|
||||
|
||||
@@ -70,7 +70,7 @@ export function AdminVotesManager({ initial }: { initial: VoteSite[] }) {
|
||||
</p>
|
||||
</td>
|
||||
<td className="real-info-box">
|
||||
<button onClick={() => remove(s.id)} className="nw-tool-btn red-info2">
|
||||
<button onClick={() => remove(s.id)} className="ns-tool-btn red-info2">
|
||||
{t('delete')}
|
||||
</button>
|
||||
</td>
|
||||
|
||||
@@ -4,8 +4,8 @@ import { useState } from 'react'
|
||||
import { useTranslations } from 'next-intl'
|
||||
import { Link } from '@/i18n/navigation'
|
||||
|
||||
const LOGOS = '/nw-themes/nw-ryu/nw-images/nw-logos'
|
||||
const RANKS = '/nw-themes/nw-ryu/nw-images/nw-ranks'
|
||||
const LOGOS = '/ns-themes/ns-ryu/ns-images/ns-logos'
|
||||
const RANKS = '/ns-themes/ns-ryu/ns-images/ns-ranks'
|
||||
|
||||
type TabId = 'Info' | 'Stripe' | 'SumUp'
|
||||
|
||||
|
||||
@@ -23,18 +23,18 @@ export async function Pagination({
|
||||
const pages: number[] = []
|
||||
for (let p = from; p <= to; p++) pages.push(p)
|
||||
|
||||
const cls = (active: boolean) => `nw-page-link${active ? ' nw-page-current' : ''}`
|
||||
const cls = (active: boolean) => `ns-page-link${active ? ' ns-page-current' : ''}`
|
||||
|
||||
return (
|
||||
<nav className="centered separate" aria-label="pagination">
|
||||
{page > 1 && (
|
||||
<Link href={hrefFor(page - 1)} className="nw-page-link">
|
||||
<Link href={hrefFor(page - 1)} className="ns-page-link">
|
||||
← {t('prev')}
|
||||
</Link>
|
||||
)}
|
||||
{from > 1 && (
|
||||
<>
|
||||
<Link href={hrefFor(1)} className="nw-page-link">
|
||||
<Link href={hrefFor(1)} className="ns-page-link">
|
||||
1
|
||||
</Link>
|
||||
{from > 2 && <span className="third-brown">…</span>}
|
||||
@@ -48,13 +48,13 @@ export async function Pagination({
|
||||
{to < totalPages && (
|
||||
<>
|
||||
{to < totalPages - 1 && <span className="third-brown">…</span>}
|
||||
<Link href={hrefFor(totalPages)} className="nw-page-link">
|
||||
<Link href={hrefFor(totalPages)} className="ns-page-link">
|
||||
{totalPages}
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
{page < totalPages && (
|
||||
<Link href={hrefFor(page + 1)} className="nw-page-link">
|
||||
<Link href={hrefFor(page + 1)} className="ns-page-link">
|
||||
{t('next')} →
|
||||
</Link>
|
||||
)}
|
||||
|
||||
@@ -92,13 +92,13 @@ export function PostActions({
|
||||
<div className="separate">
|
||||
<RichTextArea value={text} onChange={setText} rows={4} />
|
||||
<br />
|
||||
<button type="button" onClick={save} disabled={busy} className="nw-tool-btn">
|
||||
<button type="button" onClick={save} disabled={busy} className="ns-tool-btn">
|
||||
{busy ? t('sending') : t('save')}
|
||||
</button>{' '}
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => { setEditing(false); setText(initialText); setError(null) }}
|
||||
className="nw-tool-btn"
|
||||
className="ns-tool-btn"
|
||||
>
|
||||
{t('cancel')}
|
||||
</button>
|
||||
@@ -110,7 +110,7 @@ export function PostActions({
|
||||
if (deleted) {
|
||||
return (
|
||||
<div className="separate small-font">
|
||||
<button type="button" onClick={restore} disabled={busy} className="nw-tool-btn green-info">
|
||||
<button type="button" onClick={restore} disabled={busy} className="ns-tool-btn green-info">
|
||||
{t('restore')}
|
||||
</button>
|
||||
{error && <span className="red-info2"> {error}</span>}
|
||||
|
||||
@@ -128,7 +128,7 @@ export function RecruitPanel({
|
||||
{r.claimed ? (
|
||||
<span className="green-info"><i className="fas fa-check"></i> {t('recruit.claimed')}</span>
|
||||
) : eligible ? (
|
||||
<button type="button" className="nw-tool-btn" onClick={() => claim(r)} disabled={busyId !== null}>
|
||||
<button type="button" className="ns-tool-btn" onClick={() => claim(r)} disabled={busyId !== null}>
|
||||
{busyId === r.id ? '…' : t('recruit.claim')}
|
||||
</button>
|
||||
) : (
|
||||
|
||||
@@ -46,28 +46,28 @@ export function RichTextArea({
|
||||
return (
|
||||
<div>
|
||||
<div className="lefted">
|
||||
<button type="button" onClick={() => surround('<strong>', '</strong>')} className="nw-tool-btn" title={t('bold')}>
|
||||
<button type="button" onClick={() => surround('<strong>', '</strong>')} className="ns-tool-btn" title={t('bold')}>
|
||||
<b>B</b>
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => surround('<em>', '</em>')} className="nw-tool-btn" title={t('italic')}>
|
||||
<button type="button" onClick={() => surround('<em>', '</em>')} className="ns-tool-btn" title={t('italic')}>
|
||||
<i>I</i>
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => surround('<u>', '</u>')} className="nw-tool-btn" title={t('underline')}>
|
||||
<button type="button" onClick={() => surround('<u>', '</u>')} className="ns-tool-btn" title={t('underline')}>
|
||||
<u>U</u>
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => surround('<s>', '</s>')} className="nw-tool-btn" title={t('strike')}>
|
||||
<button type="button" onClick={() => surround('<s>', '</s>')} className="ns-tool-btn" title={t('strike')}>
|
||||
<s>S</s>
|
||||
</button>{' '}
|
||||
<button type="button" onClick={insertLink} className="nw-tool-btn" title={t('link')}>
|
||||
<button type="button" onClick={insertLink} className="ns-tool-btn" title={t('link')}>
|
||||
🔗
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => surround('<blockquote>', '</blockquote>', t('quoteText'))} className="nw-tool-btn" title={t('quote')}>
|
||||
<button type="button" onClick={() => surround('<blockquote>', '</blockquote>', t('quoteText'))} className="ns-tool-btn" title={t('quote')}>
|
||||
❝
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => surround('<ul>\n<li>', '</li>\n</ul>', t('listItem'))} className="nw-tool-btn" title={t('list')}>
|
||||
<button type="button" onClick={() => surround('<ul>\n<li>', '</li>\n</ul>', t('listItem'))} className="ns-tool-btn" title={t('list')}>
|
||||
•
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => surround('<code>', '</code>')} className="nw-tool-btn" title={t('code')}>
|
||||
<button type="button" onClick={() => surround('<code>', '</code>')} className="ns-tool-btn" title={t('code')}>
|
||||
{'</>'}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -12,7 +12,7 @@ const SERVER_NAME = 'NightSpire'
|
||||
* `home/templates/partials/header.html` con las clases del tema real
|
||||
* (nav-wrapper, nav-bar, nav-dropdown...). Los enlaces internos que ya
|
||||
* existen en web-next usan <Link> (next-intl); el resto se mantiene igual
|
||||
* que en Django. El toggle móvil replica `nwNavBar()` de nw-scripts.js.
|
||||
* que en Django. El toggle móvil replica `nwNavBar()` de ns-scripts.js.
|
||||
*/
|
||||
export function SiteHeader({
|
||||
loggedIn,
|
||||
@@ -34,7 +34,7 @@ export function SiteHeader({
|
||||
return (
|
||||
<header>
|
||||
<div className="nav-wrapper">
|
||||
<div className={open ? 'nav-bar responsive' : 'nav-bar'} id="nw-nav-bar">
|
||||
<div className={open ? 'nav-bar responsive' : 'nav-bar'} id="ns-nav-bar">
|
||||
<a
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
@@ -135,16 +135,16 @@ export function SiteHeader({
|
||||
{/* eslint-disable @next/next/no-img-element */}
|
||||
<Link href="/">
|
||||
<img
|
||||
className="nw-long-logo"
|
||||
src="/nw-themes/nw-ryu/nw-images/nw-logos/nw-long-logo.webp"
|
||||
className="ns-long-logo"
|
||||
src="/ns-themes/ns-ryu/ns-images/ns-logos/ns-long-logo.webp"
|
||||
alt={SERVER_NAME}
|
||||
title={SERVER_NAME}
|
||||
/>
|
||||
</Link>
|
||||
<Link href="/">
|
||||
<img
|
||||
className="nw-logo"
|
||||
src="/nw-themes/nw-ryu/nw-images/nw-logos/nw-logo.webp"
|
||||
className="ns-logo"
|
||||
src="/ns-themes/ns-ryu/ns-images/ns-logos/ns-logo.webp"
|
||||
alt="NW"
|
||||
title="NW"
|
||||
/>
|
||||
|
||||
@@ -12,7 +12,7 @@ import type { StoreCategory, StoreItem } from '@/lib/store'
|
||||
const ICON_FALLBACK = 'inv_misc_questionmark'
|
||||
|
||||
/** Renders de los ítems de la tienda (public/), para el preview en hover. */
|
||||
const STORE_DISPLAY_PATH = '/nw-themes/nw-ryu/nw-images/nw-displays'
|
||||
const STORE_DISPLAY_PATH = '/ns-themes/ns-ryu/ns-images/ns-displays'
|
||||
|
||||
/**
|
||||
* Importe en euros en el idioma de la web ("2,00 €", "0,125 €").
|
||||
@@ -100,16 +100,16 @@ function CategoryNode({
|
||||
<div className="item-box" key={it.id}>
|
||||
{/* Previsualización del render al pasar el ratón, como el original:
|
||||
solo la tienen los ítems equipables (los demás no tienen
|
||||
apariencia). El CSS (nw-st-tooltip-w, nw-img-display) ya viene
|
||||
apariencia). El CSS (ns-st-tooltip-w, ns-img-display) ya viene
|
||||
en el tema. */}
|
||||
{it.preview && (
|
||||
<div className="second-brown nw-st-tooltip-w">
|
||||
<div className="second-brown ns-st-tooltip-w">
|
||||
{/* `fas`, no el `fa` suelto del original: cargamos Font Awesome 6,
|
||||
donde solo .fas/.fa-solid activan la fuente (el `fa` de FA4/5
|
||||
no pinta nada sin el shim de compatibilidad). */}
|
||||
<i className="fas fa-image" />
|
||||
<span className="nw-st-img-tooltip">
|
||||
<ins className="nw-img-display" style={{ backgroundImage: `url(${STORE_DISPLAY_PATH}/${it.preview}.png)` }} />
|
||||
<span className="ns-st-img-tooltip">
|
||||
<ins className="ns-img-display" style={{ backgroundImage: `url(${STORE_DISPLAY_PATH}/${it.preview}.png)` }} />
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -49,7 +49,7 @@ export function TopicModBar({
|
||||
return (
|
||||
<div className="info-box-light separate">
|
||||
<span className="red-info2">{t('deletedMark')}</span>{' '}
|
||||
<button type="button" onClick={() => act('restore')} disabled={busy} className="nw-tool-btn green-info">
|
||||
<button type="button" onClick={() => act('restore')} disabled={busy} className="ns-tool-btn green-info">
|
||||
{t('restoreTopic')}
|
||||
</button>
|
||||
</div>
|
||||
@@ -59,10 +59,10 @@ export function TopicModBar({
|
||||
return (
|
||||
<div className="info-box-light separate">
|
||||
<span className="yellow-info">{t('moderation')}:</span>{' '}
|
||||
<button type="button" onClick={() => act(locked ? 'unlock' : 'lock')} disabled={busy} className="nw-tool-btn">
|
||||
<button type="button" onClick={() => act(locked ? 'unlock' : 'lock')} disabled={busy} className="ns-tool-btn">
|
||||
{locked ? t('unlock') : t('lock')}
|
||||
</button>{' '}
|
||||
<button type="button" onClick={() => act(sticky ? 'unsticky' : 'sticky')} disabled={busy} className="nw-tool-btn">
|
||||
<button type="button" onClick={() => act(sticky ? 'unsticky' : 'sticky')} disabled={busy} className="ns-tool-btn">
|
||||
{sticky ? t('unpin') : t('pin')}
|
||||
</button>{' '}
|
||||
{moveForums.length > 0 && (
|
||||
@@ -87,7 +87,7 @@ export function TopicModBar({
|
||||
))}
|
||||
</select>
|
||||
)}{' '}
|
||||
<button type="button" onClick={() => act('delete', undefined, t('confirmDeleteTopic'))} disabled={busy} className="nw-tool-btn red-info2">
|
||||
<button type="button" onClick={() => act('delete', undefined, t('confirmDeleteTopic'))} disabled={busy} className="ns-tool-btn red-info2">
|
||||
{t('deleteTopic')}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import { useState } from 'react'
|
||||
import { useTranslations } from 'next-intl'
|
||||
|
||||
const LOGOS = '/nw-themes/nw-ryu/nw-images/nw-logos'
|
||||
const LOGOS = '/ns-themes/ns-ryu/ns-images/ns-logos'
|
||||
|
||||
type Msg = { success: boolean; text: string } | null
|
||||
|
||||
|
||||
@@ -4,18 +4,18 @@ const SERVER_NAME = 'NightSpire'
|
||||
|
||||
/**
|
||||
* Bloque de vídeo de cabecera — réplica del partial Django `partials/video.html`
|
||||
* (logo principal + vídeo de fondo en bucle). Clases del tema real: div-nw-video,
|
||||
* nw-main-logo, nw-video.
|
||||
* (logo principal + vídeo de fondo en bucle). Clases del tema real: div-ns-video,
|
||||
* ns-main-logo, ns-video.
|
||||
*/
|
||||
export function Video() {
|
||||
return (
|
||||
<div className="div-nw-video">
|
||||
<div className="nw-main-logo">
|
||||
<div className="div-ns-video">
|
||||
<div className="ns-main-logo">
|
||||
<Link href="/">
|
||||
{/* eslint-disable-next-line @next/next/no-img-element */}
|
||||
<img
|
||||
className="nw_main_logo_img"
|
||||
src="/nw-themes/nw-ryu/nw-images/nw-logos/nightspire-main-logo-transparent.webp"
|
||||
src="/ns-themes/ns-ryu/ns-images/ns-logos/nightspire-main-logo-transparent.webp"
|
||||
alt={SERVER_NAME}
|
||||
title={SERVER_NAME}
|
||||
/>
|
||||
@@ -28,8 +28,8 @@ export function Video() {
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<video className="nw-video" autoPlay loop muted playsInline>
|
||||
<source src="/nw-themes/nw-ryu/nw-videos/nw-logo.mp4" />
|
||||
<video className="ns-video" autoPlay loop muted playsInline>
|
||||
<source src="/ns-themes/ns-ryu/ns-videos/ns-logo.mp4" />
|
||||
</video>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useTranslations, useLocale } from 'next-intl'
|
||||
import { useRouter } from '@/i18n/navigation'
|
||||
import type { VoteSiteStatus } from '@/lib/vote'
|
||||
|
||||
const REFRESH_ICON = '/nw-themes/nw-ryu/nw-images/nw-icons/refresh.webp'
|
||||
const REFRESH_ICON = '/ns-themes/ns-ryu/ns-images/ns-icons/refresh.webp'
|
||||
|
||||
export function VotePanel({ sites, canVote }: { sites: VoteSiteStatus[]; canVote: boolean }) {
|
||||
const t = useTranslations('Vote')
|
||||
|
||||
Reference in New Issue
Block a user