upstream: integrar 0.9.5 en lo que no diverge (57 ficheros) + dependencias nuevas

Primera tanda de la integracion 0.9.1 -> 0.9.5. Se actualizan los 57 ficheros que
upstream cambio y la rama no tocaba, entre ellos los 11 de traduccion: eso ya solo
es posible gracias al overlay de i18n, antes eran 11 conflictos garantizados.

Se portan ademas las dependencias que 0.9.5 introduce y de las que dependen los
ficheros actualizados: pdfDocument, content_favorites, recurrence, media_gallery,
comments_view, gallery_view y polls (modelo, limites y vista).

Quedan 48 ficheros con divergencia real por resolver a mano (backend.js,
main_views.js, OasisMobile.css y 45 vistas y modelos).

Verificado: 0 errores de sintaxis en src/, 0 requires relativos rotos, la app
arranca declarando 0.9.5 y las 47 rutas principales responden 200/302.
This commit is contained in:
SITO 2026-08-18 21:42:59 +02:00
parent b3986b12a0
commit f964e61a1c
67 changed files with 5740 additions and 10907 deletions

View file

@ -88,9 +88,9 @@ const buildGraphSvg = (me, peers) => {
+ `</svg>`;
};
const kpi = (label, value) => div({ class: 'stats-kpi' },
div({ class: 'stats-kpi-label' }, label),
div({ class: 'stats-kpi-value' }, String(value))
const kpi = (label, value) => div({ class: 'stats-kpi stats-kpi-inline' },
span({ class: 'stats-kpi-label' }, `${String(label).toUpperCase()}: `),
span({ class: 'stats-kpi-value' }, String(value))
);
const legendItem = (kind, label) =>
@ -126,27 +126,27 @@ exports.graphosView = ({ filter, me, peers, kpis, focus = null, focusId = null,
modes.map(m =>
form({ method: 'GET', action: '/graphos' },
input({ type: 'hidden', name: 'filter', value: m }),
button({ type: 'submit', class: filter === m ? 'filter-btn active' : 'filter-btn' }, i18n[m + 'Button'])
button({ type: 'submit', class: filter === m ? 'filter-btn active' : 'filter-btn' }, String(i18n[m + 'Button']).toUpperCase())
)
)
),
capped
? p({ class: 'graphos-cap-note' }, `${i18n.graphosShowing || 'Showing'} ${shown} / ${total}`)
: null,
div({ class: 'graphos-legend' },
legendItem('me', i18n.graphosYou || 'You'),
legendItem('online', i18n.online || 'Online'),
filter !== 'MINE' ? legendItem('discovered', i18n.discovered || 'Discovered') : null,
filter !== 'MINE' ? legendItem('unknown', i18n.unknown || 'Unknown') : null
),
div({ class: 'graphos-canvas', innerHTML: buildGraphSvg(me, peers) }),
div({ class: 'stats-block' },
div({ class: 'stats-block graphos-stats' },
div({ class: 'stats-grid' },
kpi(i18n.graphosTotalNodes || 'Total nodes', kpis.total),
kpi(i18n.online || 'Online', kpis.online),
filter !== 'MINE' ? kpi(i18n.discovered || 'Discovered', kpis.discovered) : null,
filter !== 'MINE' ? kpi(i18n.unknown || 'Unknown', kpis.unknown) : null
)
),
div({ class: 'graphos-canvas', innerHTML: buildGraphSvg(me, peers) }),
div({ class: 'graphos-legend' },
legendItem('me', i18n.graphosYou || 'You'),
legendItem('online', i18n.online || 'Online'),
filter !== 'MINE' ? legendItem('discovered', i18n.discovered || 'Discovered') : null,
filter !== 'MINE' ? legendItem('unknown', i18n.unknown || 'Unknown') : null
)
)
);