upstream: integrar 0.9.5 en 34 ficheros mas y portar los modulos nuevos

Segunda tanda. Resueltas por merge de tres vias 15 divergencias que no solapaban,
y aplicada la version de 0.9.5 en 19 vistas y modelos donde la rama solo arrastraba
codigo antiguo (firmas viejas de renderProductForm, renderJobForm, listTags sin
search, y el import sin renderSpreadEditWarning). Se preserva la eliminacion de
housing donde la rama lo habia descartado: modules_view, blockchain_view,
search_model y tags_model.

Modulos nuevos del dev portados: blog, data, gallery, mentions, polls, workflows,
comments, recurrence y media_gallery, mas contentPdf, pdfDocument y content_favorites.

main_views recupera renderEngagement, spreadsFor y renderSpreadEditWarning, que la
rama habia eliminado y que las vistas de 0.9.5 necesitan. Sin ellas polls_view
lanzaba TypeError al editar.

El overlay de i18n pasa de 15 a 41 claves (46 en castellano): incorpora las 9 que
upstream tenia en 0.9.1 y elimino en 0.9.5 mientras nuestro codigo las sigue usando
(menuBlogs, spreadHint, chatShareUrl, forumFilterHot, publishBlog...) y las 17 de
Karvan, que nunca existieron y tiraban de texto de reserva en ingles; ahora estan
traducidas al castellano.

Verificado con la app arrancada: declara 0.9.5, 0 claves i18n sin resolver (antes
26), 26 rutas responden 200/302, y la interfaz de la rama sale intacta: 10
categorias y 47 modulos en los hexagonos, topbar con Personal/Community y avatar,
7 accesos rapidos en la barra inferior y 0 etiquetas vacias (antes 1, la de Blogs).
This commit is contained in:
SITO 2026-08-18 22:03:41 +02:00
parent f964e61a1c
commit 82b6c3ae05
43 changed files with 3221 additions and 2416 deletions

View file

@ -0,0 +1,104 @@
const ALL_MODULES = [
'agenda', 'ai', 'aiNav', 'audios', 'banking', 'blogs', 'bookmarks', 'calendars', 'chats', 'cipher',
'courts', 'dev', 'docs', 'events', 'favorites', 'fediverse', 'feed', 'forum', 'games', 'graphos',
'housing', 'images', 'industry', 'invites', 'jobs', 'larp', 'legacy', 'logs', 'maps', 'market',
'melody', 'opinions', 'pads', 'parliament', 'pixelia', 'polls', 'projects', 'reports', 'shops',
'tags', 'tasks', 'torrents', 'transfers', 'trending', 'tribes', 'videos', 'votes', 'wallet'
];
const NETWORK = ['feed', 'blogs', 'tags', 'trending', 'opinions', 'pads', 'forum', 'maps', 'chats'];
const MEDIA = ['audios', 'bookmarks', 'docs', 'images', 'torrents', 'videos'];
const OFFICE = ['agenda', 'calendars', 'events', 'tasks', 'reports', 'favorites'];
const GOVERNANCE = ['tribes', 'larp', 'votes', 'polls', 'parliament', 'courts', 'logs'];
const ECONOMY = ['banking', 'wallet', 'transfers', 'market', 'housing', 'jobs', 'shops', 'industry', 'projects'];
const MOBILE_MODULES = [
'agenda', 'favorites', 'wallet', 'tribes', 'larp', 'votes', 'polls', 'events', 'calendars', 'tasks',
'reports', 'banking', 'market', 'housing', 'jobs', 'shops', 'transfers', 'cipher', 'invites',
'games', 'audios', 'bookmarks', 'docs', 'images', ...NETWORK
];
const WORKFLOWS = [
{
key: 'default',
theme: 'Dark-SNH',
homePage: 'activity',
modules: ALL_MODULES.filter(m => m !== 'aiNav')
},
{
key: 'jobs',
theme: 'Clear-SNH',
homePage: 'activity',
modules: [...OFFICE, 'jobs', 'projects', 'industry', 'market', 'shops', 'banking', 'wallet', 'transfers',
'forum', 'chats', 'pads', 'feed', 'tags', 'trending', 'docs', 'invites']
},
{
key: 'ruling',
theme: 'Purple-SNH',
homePage: 'activity',
modules: [...GOVERNANCE, ...OFFICE, 'forum', 'pads', 'chats', 'feed', 'blogs', 'opinions', 'tags', 'trending', 'docs', 'invites']
},
{
key: 'politics',
theme: 'Dark-SNH',
homePage: 'trending',
modules: ['parliament', 'courts', 'votes', 'polls', 'reports', 'logs', 'forum', 'opinions', 'blogs',
'feed', 'tags', 'trending', 'pads', 'chats', 'fediverse', 'tribes', 'events', 'agenda']
},
{
key: 'social',
theme: 'Clear-SNH',
homePage: 'feed',
modules: [...NETWORK, ...MEDIA, 'events', 'calendars', 'agenda', 'favorites', 'games', 'pixelia',
'melody', 'tribes', 'fediverse', 'invites', 'polls']
},
{
key: 'business',
theme: 'Dark-SNH',
homePage: 'activity',
modules: [...ECONOMY, ...OFFICE, 'forum', 'chats', 'pads', 'docs', 'feed', 'tags', 'trending', 'invites', 'cipher']
},
{
key: 'night',
theme: 'Matrix-SNH',
homePage: 'feed',
modules: ['feed', 'blogs', 'opinions', 'chats', 'forum', 'tags', 'trending', 'audios', 'videos',
'images', 'bookmarks', 'melody', 'games', 'pixelia', 'favorites']
},
{
key: 'mobile',
theme: 'OasisMobile',
homePage: 'activity',
modules: MOBILE_MODULES
}
];
const WORKFLOW_KEYS = WORKFLOWS.map(w => w.key);
const getWorkflow = (key) => WORKFLOWS.find(w => w.key === String(key || '')) || null;
const modulesOf = (workflow) => {
const set = new Set(workflow.modules.filter(m => ALL_MODULES.includes(m)));
return ALL_MODULES.filter(m => set.has(m));
};
const currentWorkflow = (config) => {
const modules = (config && config.modules) || {};
const theme = (config && config.themes && config.themes.current) || '';
return WORKFLOW_KEYS.find(key => {
const w = getWorkflow(key);
if (theme !== w.theme) return false;
const on = new Set(modulesOf(w));
return ALL_MODULES.every(m => (modules[`${m}Mod`] === 'on') === on.has(m));
}) || null;
};
module.exports = {
ALL_MODULES,
MOBILE_MODULES,
WORKFLOWS,
WORKFLOW_KEYS,
getWorkflow,
modulesOf,
currentWorkflow
};