From f29540e17ee028002cf51e0d2e4851a20ee52e8e Mon Sep 17 00:00:00 2001 From: SITO Date: Mon, 19 Oct 2026 12:43:28 +0200 Subject: [PATCH] movil: barra de abajo marca la seccion abierta; llamada de voz sin video vacio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - la pestaña actual de la barra de abajo lleva la pastilla de color - en una llamada solo de voz no se ensena el video propio (era un recuadro gris con el icono de play) y Llamar se atenua mientras dura - la barra de confirmar borrado con su marco rojo --- src/client/assets/styles/mobile_ux.css | 8 ++++++++ src/client/public/js/karvan.js | 4 +++- src/views/hive_views.js | 6 +++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/client/assets/styles/mobile_ux.css b/src/client/assets/styles/mobile_ux.css index 1a3369c..d33a79e 100644 --- a/src/client/assets/styles/mobile_ux.css +++ b/src/client/assets/styles/mobile_ux.css @@ -411,3 +411,11 @@ body .main-content > .main-column { padding-left: 0 !important; padding-right: 0 font-size: 16px !important; } .main-column form.welcome-skip-end { display: flex !important; justify-content: center !important; } + +/* llamada solo con voz: sin el video propio vacio */ +.karvan-call:not(.has-cam) .kc-local { display: none !important; } +.karvan-call:not(.has-cam) .karvan-videos:not(:has(.kc-remote video)) { display: none !important; } +.karvan-call.active .kc-btn-start { opacity: .45; pointer-events: none; } +/* la barra de confirmar borrado con su marco rojo (Acampada quita el borde a los div) */ +.main-column div.confirm-bar { border: 2px solid var(--ux-danger) !important; } +.main-column .content-action-confirm[open] > summary { opacity: 1 !important; } diff --git a/src/client/public/js/karvan.js b/src/client/public/js/karvan.js index 666885a..fdae948 100644 --- a/src/client/public/js/karvan.js +++ b/src/client/public/js/karvan.js @@ -171,7 +171,7 @@ } // --- media / videollamada (Fase 1) --- - function setCallActive(on) { if (callRoot) callRoot.className = "karvan-call" + (on ? " active" : ""); } + function setCallActive(on) { if (callRoot) callRoot.className = "karvan-call" + (on ? " active" : "") + (camActive ? " has-cam" : ""); } function setStatus(msg) { if (statusEl) statusEl.textContent = msg || ""; } // textos traducidos: los pone la vista en data-txt-* de #karvan-call function txt(k, def) { return (callRoot && callRoot.getAttribute("data-txt-" + k)) || def; } @@ -179,6 +179,8 @@ function updateBtns() { if (btnMic) btnMic.className = "kc-btn" + (micActive ? " on" : ""); if (btnCam) btnCam.className = "kc-btn" + (camActive ? " on" : ""); + // sin camara no se ensena el video propio: era un recuadro gris con el icono de play + if (callRoot) callRoot.classList.toggle("has-cam", !!camActive); } function attachRemote(peer, remoteId, e) { diff --git a/src/views/hive_views.js b/src/views/hive_views.js index 73b3e95..d67fbc2 100644 --- a/src/views/hive_views.js +++ b/src/views/hive_views.js @@ -95,8 +95,12 @@ module.exports = ({ i18n }) => { const inboxN = sharedState.getInboxCount(); const cfg = getConfig(); const modOn = (m) => !m || cfg.modules[m] === 'on' || cfg.modules[m] === undefined; + // la pestaña de la seccion abierta se marca (pastilla de color tras el icono) + let here = ''; + try { here = (require('../models/typed_log').requestScope.getStore() || {}).path || ''; } catch (_) {} + const isHere = (href) => here === href || (href !== '/' && here.startsWith(href + '/')) || (href === '/activity' && here === '/'); const bbLink = (href, ico, label, badge) => a( - { class: "bb-item", href }, + { class: isHere(href) ? "bb-item current" : "bb-item", href, ...(isHere(href) ? { 'aria-current': 'page' } : {}) }, iconNode("bb-ico", iconKeyOf(href), ico), (badge && badge > 0) ? span({ class: "bb-badge" }, String(badge)) : "", span({ class: "bb-lbl" }, label)