PageSourceSearch

https://elshowdelosimpactos.com/index.php

html elshowdelosimpactos.com collected 2026-10-08 02:55:48 UTC 24,660 bytes, 603 lines download raw bytes

1<!DOCTYPE html>
2<html lang="es">
3<head>
4<meta charset="UTF-8">
5<meta name="viewport" content="width=device-width, initial-scale=1.0">
6<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 6-7
6
7<script async src="https://www.googletagmanager.com/gtag/js?id=
7G-JEJ3XM5MD4
vendor: 12 bytes, line 7
7"></script>
8<script>
9  
vendor: 134 bytes, lines 9-13
9window.dataLayer = window.dataLayer || [];
10  function gtag(){dataLayer.push(arguments);}
11  gtag('js', new Date());
12
13  gtag('config', '
13G-JEJ3XM5MD4
vendor: 4 bytes, line 13
13');
14</script>
14
15<title>El Show de los Impactos — FM 98.1</title>
16<meta name="description" content="Radio, noticias y entretenimiento desde Posadas, Misiones.">
17<meta name="robots" content="index, follow">
18<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
19<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
20<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
21<link rel="icon" href="../favicon.ico" type="image/x-icon">
22<link href="https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap" rel="stylesheet">
23<link rel="stylesheet" href="assets/site.css">
24</head>
25<body>
26<p id="app-boot" class="loading-msg app-boot">Cargando…</p>
27<div id="app" v-cloak>
28  <div class="topbar">
29  <div class="tb-l">
30    <div class="tb-live"><span class="pulse"></span><span>Al Aire</span></div>
31    <div class="vu">
32      <div class="vb"></div><div class="vb"></div><div class="vb"></div>
33      <div class="vb"></div><div class="vb"></div><div class="vb"></div>
34    </div>
35    <span class="tb-freq">FM 98.1</span>
36  </div>
37  <button type="button" class="btn-escuchar" @click="toggleAudio">{{ isPlaying ? '■ Detener' : '▶ Escuchar en vivo' }}</button>
38  <audio id="stream-audio" class="hidden" preload="none">
39    <source src="https://streamlky.alsolnet.com/fmshow" type="audio/mpeg">
40  </audio>
41</div>
42  <header class="site-header">
43  <a href="index.php" class="logo">
44    <img src="https://elshowdelosimpactos.com/logoPage2025_v2.png" alt="El Show de los Impactos">
45    <div class="logo-text">
46      <span class="logo-name">El Show de los Impactos</span>
47      <span class="logo-fm">FM 98.1 · Posadas, Misiones</span>
48    </div>
49  </a>
50
51  <button
52    type="button"
53    class="nav-toggle"
54    :class="{ open: menuAbierto }"
55    aria-label="Abrir menú"
56    :aria-expanded="menuAbierto ? 'true' : 'false'"
57    @click="toggleMenu">
58    <span></span><span></span><span></span>
59  </button>
60
61  <div class="nav-backdrop" v-if="menuAbierto" @click="cerrarMenu" aria-hidden="true"></div>
62
63  <nav class="site-nav" :class="{ open: menuAbierto }">
64          <a href="index.php" :class="{ on: navActive === 'inicio' }" @click.prevent="navInicio">Inicio</a>
65      <a href="#noticias-section" :class="{ on: navActive === 'noticias' }" @click.prevent="navScroll('noticias-section')">Noticias</a>
66      <a href="#podcast-section" @click.prevent="navScroll('podcast-section')">Podcast</a>
67      <a href="#hero-vivo" @click.prevent="navScroll('hero-vivo')">En Vivo</a>
68      <button type="button" class="nav-search" aria-label="Buscar" @click="navBuscar">
69        <svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
70      </button>
71      </nav>
72</header>
73
74  <div class="ticker" v-if="tickerItems.length">
75    <div class="ticker-tag">Ahora</div>
76    <div class="ticker-scroll">
77      <div class="ticker-inner">
78        <span v-for="(t, i) in tickerDoble" :key="'t-' + i">{{ t }}</span>
79      </div>
80    </div>
81  </div>
82
83  <div class="w">
84    <div class="hero">
85      <a v-if="destacada" :href="urlNoticia(destacada.id)" class="hero-nota">
86        <div class="hero-nota-img">
87          <img v-if="destacada.url_imagen" :src="destacada.url_imagen" :alt="destacada.titulo">
88          <div v-else class="ph" v-html="placeholderSvg"></div>
89          <span class="hero-nota-cat">{{ destacada.seccion_title || 'Destacado' }}</span>
90        </div>
91        <div class="hero-nota-body">
92          <div class="hero-nota-title">{{ destacada.titulo }}</div>
93          <div class="hero-nota-meta">
94            <span>{{ tiempoRelativo(destacada) }}</span>
95            <span class="sep">●</span>
96            <span>{{ destacada.seccion_title }}</span>
97          </div>
98          <div class="hero-nota-excerpt" v-if="destacada.copete">{{ destacada.copete }}</div>
99        </div>
100      </a>
101
102      <div class="hero-vivo" id="hero-vivo">
103        <div class="vivo-top">
104          <span class="vivo-dot"></span>
105          <span class="vivo-top-label">En Vivo</span>
106          <span class="vivo-top-sub">FM 98.1 · YouTube</span>
107        </div>
108        <div class="vivo-embed">
109          <iframe :src="videoSrc" title="El Show en Vivo" allowfullscreen allow="autoplay;encrypted-media"></iframe>
110        </div>
111        <div class="vivo-foot">
112          <span class="vivo-foot-l">En vivo / Último programa</span>
113          <span class="vivo-foot-r">FM 98.1</span>
114        </div>
115      </div>
116    </div>
117
118    <a href="https://wa.me/543764361973" class="wa" target="_blank" rel="noopener">
119      <div class="wa-ball">
120        <svg viewBox="0 0 24 24"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>
121      </div>
122      <div><div class="wa-tag">Escribinos</div><div class="wa-msg">Mandá tu foto o video</div></div>
123      <div class="wa-chevron">›</div>
124    </a>
125
126    <div class="pills" id="noticias-section">
127      <button
128        v-for="cat in categorias"
129        :key="cat.id"
130        type="button"
131        class="pill"
132        :class="{ on: seccionActiva === cat.id }"
133        @click="filtrarSeccion(cat.id)">
134        {{ cat.nombre }}
135      </button>
136    </div>
137
138    <div class="sec-label">Entrevistas</div>
139    <div class="entrevistas" v-if="entrevistas.length">
140      <a
141        v-for="item in entrevistas"
142        :key="'e-' + item.id"
143        :href="urlNoticia(item.id)"
144        class="ecard">
145        <div class="ecard-img">
146          <img v-if="item.url_imagen" :src="item.url_imagen" :alt="item.titulo">
147          <svg v-else fill="none" stroke="#ccc" stroke-width=".7" viewB
147ox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><path d="m21 15-5-5L5 21"/></svg>
148        </div>
149        <div class="ecard-stripe"></div>
150        <div class="ecard-body">
151          <div class="ecard-tag">Entrevista</div>
152          <div class="ecard-title">{{ item.titulo }}</div>
153          <div class="ecard-guest">{{ tiempoRelativo(item) }} · {{ item.seccion_title }}</div>
154        </div>
155      </a>
156    </div>
157
158    <div class="sec-label">Últimas noticias</div>
159
160    <div v-if="cargando && !noticias.length" class="loading-msg">Cargando noticias…</div>
161
162    <template v-for="(bloque, idx) in gridBlocks" :key="'b-' + idx">
163      <div v-if="bloque.type === 'grid'" class="grid4">
164        <a
165          v-for="noticia in bloque.noticias"
166          :key="noticia.id"
167          :href="urlNoticia(noticia.id)"
168          class="card">
169          <div class="card-img">
170            <img v-if="noticia.url_imagen" :src="noticia.url_imagen" :alt="noticia.titulo">
171            <svg v-else fill="none" stroke="#ccc" stroke-width=".7" viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><path d="m21 15-5-5L5 21"/></svg>
172            <div class="card-cat">{{ noticia.seccion_title }}</div>
173          </div>
174          <div class="card-body">
175            <div class="card-titulo">{{ noticia.titulo }}</div>
176            <div class="card-hora">{{ tiempoRelativo(noticia) }}</div>
177          </div>
178        </a>
179      </div>
180
181      <div v-else-if="bloque.type === 'brow'" class="brow">
182        <div v-for="(ban, bi) in bloque.banners" :key="'ban-' + idx + '-' + bi" class="bs">
183          <a v-if="ban" :href="ban.url" target="_blank" rel="noopener">
184            <img :src="ban.direccion" alt="" @error="onBannerError($event)">
185          </a>
186          <span v-else class="bs-lbl">Publicidad</span>
187        </div>
188      </div>
189
190      <div v-else-if="bloque.type === 'bfull'" class="bfull">
191        <a v-if="bloque.banner" :href="bloque.banner.url" target="_blank" rel="noopener">
192          <img :src="bloque.banner.direccion" alt="Auspiciante destacado" @error="onBannerFullError($event)">
193        </a>
194        <span v-else class="bfull-lbl">◆ Auspiciante Destacado ◆</span>
195      </div>
196    </template>
197
198    <button
199      v-if="hayMasNoticias"
200      type="button"
201      class="btn-load-more"
202      :disabled="cargando"
203      @click="cargarMas">
204      {{ cargando ? 'Cargando…' : 'Cargar más' }}
205    </button>
206
207    <div class="aniv">
208      <video controls preload="metadata">
209        <source src="https://elshowdelosimpactos.com/audios/vivo.mp4" type="video/mp4">
210      </video>
211      <div class="aniv-info">
212        <div class="aniv-eyebrow">Especial aniversario</div>
213        <div class="aniv-num">50</div>
214        <div class="aniv-sub">Años en el aire<br>de Misiones</div>
215        <div class="aniv-p">Un recorrido por los momentos más importantes de nuestra radio. Desde los primeros días hasta hoy, la voz que acompañó a Posadas y a toda la provincia.</div>
216      </div>
217    </div>
218  </div>
219
220  <div class="pod" id="podcast-section">
221    <div class="w">
222      <div class="pod-head">
223        <div class="pod-icon">
224          <svg viewBox="0 0 24 24"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z"/></svg>
225        </div>
226        <div class="pod-title">Podcast · Spotify</div>
227      </div>
228      <div class="pod-grid">
229        <div v-for="pod in podcasts" :key="pod.id" class="pod-card">
230          <div class="pod-img">
231            <img :src="pod.image" :alt="pod.title">
232          </div>
233          <div class="pod-body">
234            <a :href="pod.link" class="pod-a" target="_blank" rel="noopener">{{ pod.title }}</a>
235            <p class="pod-p">{{ pod.description }}</p>
236          </div>
237        </div>
238      </div>
239      <a href="https://open.spotify.com" target="_blank" rel="noopener" class="pod-cta">
239Escuchar en Spotify →</a>
240    </div>
241  </div>
242
243  <div class="redes">
244  <span class="redes-lbl">Seguinos</span>
245  <div class="redes-btns">
246    <a href="https://api.whatsapp.com/send/?phone=543764361973" class="rbtn wa" target="_blank" rel="noopener">
247      <svg viewBox="0 0 24 24"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>
248      WhatsApp
249    </a>
250    <a href="https://www.facebook.com/ElShowdelosImpactos/" class="rbtn fb" target="_blank" rel="noopener">
251      <svg viewBox="0 0 24 24"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
252      Facebook
253    </a>
254    <a href="https://www.instagram.com/elshowdelosimpactos/" class="rbtn ig" target="_blank" rel="noopener">
255      <svg viewBox="0 0 24 24"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg>
256      Instagram
257    </a>
258    <a href="https://www.youtube.com/@FMSHOW98.1" class="rbtn yt" target="_blank" rel="noopener">
259      <svg viewBox="0 0 24 24"><path d="M23.495 6.205a3.007 3.007 0 00-2.088-2.088c-1.87-.501-9.396-.501-9.396-.501s-7.507-.01-9.396.501A3.007 3.007 0 00.527 6.205a31.247 31.247 0 00-.522 5.805 31.247 31.247 0 00.522 5.783 3.007 3.007 0 002.088 2.088c1.868.502 9.396.502 9.396.502s7.506 0 9.396-.502a3.007 3.007 0 002.088-2.088 31.247 31.247 0 00.5-5.783 31.247 31.247 0 00-.5-5.805zM9.609 15.601V8.408l6.264 3.602z"/></svg>
260      YouTube
261    </a>
262  </div>
263</div>
264  <footer>
265
266  <div class="foot-g">
267
268    <div>
269
270      <div class="foot-brand-name">El Show de los Impactos</div>
271
272      <span class="foot-brand-sub">FM 98.1 · Posadas, Misiones</span>
273
274      <p class="foot-brand-p">Radio, noticias y entretenimiento desde el corazón de Misiones. Al aire todos los días con la información local y regional que importa.</p>
275
276    </div>
277
278    <div class="foot-col">
279
280      <div class="foot-col-h">Secciones</div>
281
282      <ul>
283
284        <li><a href="index.php?seccion=2">Policiales</a></li>
285
286        <li><a href="index.php?seccion=15">Política</a></li>
287
288        <li><a href="index.php?seccion=7">Deportes</a></li>
289
290        <li><a href="index.php?seccion=11">Generales</a></li>
291
292        <li><a href="index.php?seccion=10">Economía</a></li>
293
294        <li><a href="index.php?seccion=16">Espectáculos</a></li>
295
296      </ul>
297
298    </div>
299
300    <div class="foot-col">
301
302      <div class="foot-col-h">Contacto</div>
303
304      <ul>
305
306        <li><a href="mailto:[email protected]">[email protected]</a></li>
307        <li><a href="https://wa.me/543764101023">Linea Comercial 3764 101023</a></li>
308        <li><a href="https://wa.me/543764361973">WhatsApp 3764 361973</a></li>
309        <li><a href="#">Chacra 150 · Sección 18</a></li>
310        <li><a href="#">Villa Cabello, Posadas</a></li>
311      </ul>
312
313    </div>
314
315  </div>
316
317  <div class="foot-bottom">
318
319    <span>© 2025 Agencia 1 Show · El Show de los Impactos · FM 98.1</span>
320
321    <span>Posadas · Misiones · Argentina</span>
322
323  </div>
324
325</footer>
326
327
328  <div v-if="busquedaAbierta" class="search-overlay" @click.self="cerrarBusqueda">
329    <div class="search-box">
330      <input
331        type="search"
332        v-model="terminoBusqueda"
333        placeholder="Buscar noticias…"
334        @keyup.enter="buscarNoticias"
335        ref="searchInput">
336      <div class="search-results">
337        <a
338          v-for="n in resultadosBusqueda"
339          :key="'s-' + n.id"
340          :href="urlNoticia(n.id)"
341          class="search-item">{{ n.titulo }}</a>
342        <p v-if="terminoBusqueda && !resultadosBusqueda.length && !buscando" class="loading-msg">Sin resultados</p>
343      </div>
344      <button type="button" class="search-close" @click="cerrarBusqueda">Cerrar</button>
345    </div>
346  </div>
347</div>
348
349<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
vendor: 1 bytes, line 349
349
350<script src="assets/app.js"></script>
vendor: 1 bytes, line 350
350
351<script>
352if (typeof window.ShowApp === 'undefined') {
353  console.error('No se cargó app.js desde assets/app.js');
354}
355const initialVideoSrc = "https:\/\/www.youtube.com\/embed\/HJS4HvmEAwc";
356const { createApp } = Vue;
357
358createApp({
359  data() {
360    return {
361      navActive: 'inicio',
362      menuAbierto: false,
363      isPlaying: false,
364      videoSrc: initialVideoSrc,
365      destacada: null,
366      entrevistas: [],
367      noticias: [],
368      banners: [],
369      bannerDestacado: null,
370      tickerItems: [],
371      categorias: ShowApp.categorias(),
372      podcasts: ShowApp.podcasts(),
373      seccionActiva: 'inicio',
374      cargando: false,
375      pagina: 0,
376      porPagina: 20,
377      totalNoticias: 0,
378      placeholderSvg: ShowApp.placeholderSvg(),
379      busquedaAbierta: false,
380      terminoBusqueda: '',
381      resultadosBusqueda: [],
382      buscando: false,
383    };
384  },
385  computed: {
386    tickerDoble() {
387      return [...this.tickerItems, ...this.tickerItems];
388    },
389    noticiasGrid() {
390      const excluir = new Set();
391      if (this.destacada) {
392        excluir.add(this.destacada.id);
393      }
394      this.entrevistas.forEach((e) => excluir.add(e.id));
395      return this.noticias.filter((n) => !excluir.has(n.id));
396    },
397    gridBlocks() {
398      const blocks = [];
399      const list = this.noticiasGrid;
400      let bannerIdx = 0;
401      for (let i = 0; i < list.length; i += 4) {
402        const slice = list.slice(i, i + 4);
403        blocks.push({ type: 'grid', noticias: slice });
404        if (bannerIdx < this.banners.length) {
405          blocks.push({
406            type: 'brow',
407            banners: [this.banners[bannerIdx] || null, this.banners[bannerIdx + 1] || null],
408          });
409          bannerIdx += 2;
410        }
411      }
412      if (this.bannerDestacado && blocks.length) {
413        blocks.push({ type: 'bfull', banner: this.bannerDestacado });
414      }
415      return blocks;
416    },
417    hayMasNoticias() {
418      return this.noticias.length < this.totalNoticias;
419    },
420  },
421  methods: {
422    urlNoticia(id) {
423      return ShowApp.urlNoticia(id);
424    },
425    tiempoRelativo(noticia) {
426      return ShowApp.tiempoRelativo(noticia.fecha_modificado_iso || noticia.fecha_publicacion_iso, noticia.fecha_publicacion);
427    },
428    toggleAudio() {
429      this.isPlaying = ShowApp.toggleAudio(this.isPlaying);
430    },
431    toggleMenu() {
432      this.menuAbierto = !this.menuAbierto;
433    },
434    cerrarMenu() {
435      this.menuAbierto = false;
436    },
437    navInicio() {
438      this.cerrarMenu();
439      this.irInicio();
440    },
441    navScroll(id) {
442      this.cerrarMenu();
443      this.scrollToId(id);
444    },
445    navBuscar() {
446      this.cerrarMenu();
447      this.abrirBusqueda();
448    },
449    scrollToId(id) {
450      ShowApp.scrollToId(id);
451      this.navActive = id === 'noticias-section' ? 'noticias' : this.navActive;
452    },
453    irInicio() {
454      this.navActive = 'inicio';
455      this.seccionActiva = 'inicio';
456      this.pagina = 0;
457      window.location.href = 'index.php';
458    },
459    abrirBusqueda() {
460      this.busquedaAbierta = true;
461      this.$nextTick(() => {
462        if (this.$refs.searchInput) {
463          this.$refs.searchInput.focus();
464        }
465      });
466    },
467    cerrarBusqueda() {
468      this.busquedaAbierta = false;
469      this.terminoBusqueda = '';
470      this.resultadosBusqueda = [];
471    },
472    async buscarNoticias() {
473      if (!this.terminoBusqueda.trim()) {
474        return;
475      }
476      this.buscando = true;
477      try {
478        const data = await ShowApp.fetchApi({
479          accion: 'noticias',
480          buscar: this.terminoBusqueda.trim(),
481          por_pagina: 10,
482        });
483        this.resultadosBusqueda = data.noticias || [];
484      } catch (e) {
485        console.error(e);
486      } finally {
487        this.buscando = false;
488      }
489    },
490    async cargarDestacada() {
491      const data = await ShowApp.fetchApi({ accion: 'destacada' });
492      this.destacada = data.noticia;
493    },
494    async cargarEntrevistas() {
495      const data = await ShowApp.fetchApi({ accion: 'entrevistas', limite: 4 });
496      this.entrevistas = data.entrevistas || [];
497    },
498    async cargarTicker() {
499      const data = await ShowApp.fetchApi({ accion: 'ticker', limite: 8 });
500      this.tickerItems = data.titulos || [];
501    },
502    async cargarBanners() {
503      const data = await ShowApp.fetchApi({ accion: 'banners' });
504      this.banners = data.banners || [];
505      this.bannerDestacado = data.destacado || null;
506    },
507    async cargarNoticias(reset) {
508      if (reset) {
509        this.pagina = 0;
510        this.noticias = [];
511      }
512      this.cargando = true;
513      try {
514        const params = {
515          accion: 'noticias',
516          pagina: this.pagina,
517          por_pagina: this.porPagina,
518        };
519        if (this.seccionActiva && this.seccionActiva !== 'todas') {
520          params.seccion = this.seccionActiva;
521        }
522        const data = await ShowApp.fetchApi(params);
523        const items = data.noticias || [];
524        this.totalNoticias = data.meta ? data.meta.total : items.length;
525        if (reset) {
526          this.noticias = items;
527        } else {
528          const ids = new Set(this.noticias.map((n) => n.id));
529          items.forEach((n) => {
530            if (!ids.has(n.id)) {
531              this.noticias.push(n);
532            }
533          });
534        }
535      } catch (e) {
536        console.error(e);
537      } finally {
538        this.cargando = false;
539      }
540    },
541    async filtrarSeccion(id) {
542      this.seccionActiva = id;
543      this.navActive = id === 'inicio' ? 'inicio' : 'noticias';
544      await this.cargarNoticias(true);
545      ShowApp.scrollToId('noticias-section');
546    },
547    async cargarMas() {
548      this.pagina += 1;
549      await this.cargarNoticias(false);
550    },
551    onBannerError(e) {
552      e.target.parentElement.innerHTML = '<span class="bs-lbl">Publicidad</span>';
553    },
554    onBannerFullError(e) {
555      e.target.parentElement.innerHTML = '<span class="bfull-lbl">◆ Auspiciante Destacado ◆</span>';
556    },
557    initFromQuery() {
558      const params = new URLSearchParams(window.location.search);
559      const seccion = params.get('seccion');
560      if (seccion) {
561        this.seccionActiva = seccion;
562        this.navActive = 'noticias';
563      }
564    },
565  },
566  watch: {
567    terminoBusqueda(val) {
568      if (val.length >= 3) {
569        this.buscarNoticias();
570      } else {
571        this.resultadosBusqueda = [];
572      }
573    },
574  },
575  async mounted() {
576    this.initFromQuery();
577    const boot = document.getElementById('app-boot');
578    if (boot) {
579      boot.remove();
580    }
581    this.cargando = true;
582    try {
583      await Promise.all([
584        this.cargarDestacada(),
585        this.cargarEntrevistas(),
586        this.cargarTicker(),
587        this.cargarBanners(),
588        this.cargarNoticias(true),
589      ]);
590    } finally {
591      this.cargando = false;
592    }
593    document.addEventListener('keydown', (e) => {
594      if (e.key === 'Escape') {
595        this.cerrarMenu();
596        this.cerrarBusqueda();
597      }
598    });
599  },
600}).mount('#app');
601</script>
601
602</body>
603</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.