openvibers/openvibe.shared Commits

Shared 2.14.1: the update log names every site (Space, Services, Actor, …), never a lowercase id. (#35)

OP OpenVibers committed 8 Oct 2026 · 0c629e4efb · 5 files, +27 −6

Claude-Session: https://claude.ai/code/session_01K8AYn3FF3HE7CPfM262qdh

Co-authored-by: Claude Opus 5.5 <[email protected]>

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex d749677..457279d 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,12 @@ All notable changes to `openvibe-shared`. Versions follow [semver](https://semve
breaking change to any exported module, browser global or served file name is a new major.
A release is the git tag `vX.Y.Z`; consumers pin the tag's tarball (see README).
++## 2.14.1 — 2026-10-08
++
++- shipped.js names every site (Space, Services, Actor, Run, Watch, Download and the rest): the update log showed
++ "space", "services" and "actor" in lowercase next to "Host" and "Community". A site missing from the list still reads
++ as a name (its id capitalised), and `siteName` is exported.
++
## 2.14.0 — 2026-10-08
- A boost page move no longer keeps the old navbar. 2.13.3 removed the render's document listeners, but panels.js
ddiff --git a/package-lock.json b/package-lock.json
iindex f910b78..e0f7272 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-shared",
-- "version": "2.14.0",
++ "version": "2.14.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-shared",
-- "version": "2.14.0",
++ "version": "2.14.1",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex 2995fc4..21905ba 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-shared",
-- "version": "2.14.0",
++ "version": "2.14.1",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"main": "index.js",
"bin": {
ddiff --git a/shipped.js b/shipped.js
iindex b344257..0793619 100644
---- a/shipped.js
++++ b/shipped.js
@@@ -34,7 +34,18 @@
}(typeof globalThis !== 'undefined' ? globalThis : this, function () {
'use strict';
const API = 'https://openvibe.network/api/v1/changelog';
-- const SITE_NAMES = { live: 'Live', network: 'Network', tools: 'Tools', media: 'Media', community: 'Community', chat: 'Chat', games: 'Games', blog: 'Blog', wiki: 'Wiki', news: 'News', reviews: 'Reviews', deals: 'Deals', coupons: 'Coupons', trade: 'Trade', codes: 'Codes', host: 'Host', ai: 'AI', search: 'Search', sources: 'Sources', events: 'Events', billing: 'Billing', tips: 'Tips', vip: 'VIP', openre: 'OpenRe', bot: 'Bot', sites: 'Sites', realtime: 'Realtime' };
++ // Every OpenVibe service's display name (openvibe-contracts site.name). A service missing here still reads as a name
++ // (siteName capitalises its id), never as a lowercase id next to capitalised ones.
++ const SITE_NAMES = {
++ live: 'Live', network: 'Network', tools: 'Tools', media: 'Media', community: 'Community', chat: 'Chat', games: 'Games',
++ blog: 'Blog', wiki: 'Wiki', news: 'News', reviews: 'Reviews', deals: 'Deals', coupons: 'Coupons', trade: 'Trade',
++ codes: 'Codes', host: 'Host', ai: 'AI', search: 'Search', sources: 'Sources', events: 'Events', billing: 'Billing',
++ tips: 'Tips', vip: 'VIP', openre: 'OpenRe', bot: 'Bot', sites: 'Sites', realtime: 'Realtime', space: 'Space',
++ services: 'Services', actor: 'Actor', run: 'Run', watch: 'Watch', node: 'Node', zone: 'Zone', download: 'Download',
++ video: 'Video', pics: 'Pics', rent: 'Rent', homes: 'Homes', work: 'Work', food: 'Food', help: 'Help', quest: 'Quest',
++ website: 'Website', fund: 'Fund', 'media-hub': 'Media Hub', extensions: 'Extensions', contracts: 'Contracts', sdk: 'SDK',
++ shared: 'Shared', examples: 'Examples', publishing: 'Publishing',
++ };
const STYLE_ID = 'ov-shipped-style';
const TEXT = 'var(--text-primary,var(--text,inherit))';
const MUTED = 'var(--text-secondary,var(--text-muted,#8b93ad))';
@@@ -98,7 +109,7 @@
function safeUrl(u) { return /^https:\/\//.test(String(u || '')) ? String(u) : null; }
function localHref(u) { const s = String(u || ''); return /^\/(?!\/)/.test(s) || /^https:\/\//.test(s) ? s : null; }
function clamp(n, lo, hi, d) { const v = parseInt(n, 10); return Number.isFinite(v) ? Math.min(Math.max(v, lo), hi) : d; }
-- const siteName = (id) => SITE_NAMES[id] || id;
++ const siteName = (id) => SITE_NAMES[id] || String(id || '').replace(/(^|-)([a-z])/g, (m, d, c) => `${d ? ' ' : ''}${c.toUpperCase()}`);
function timeEl(iso) { const t = el('time', { datetime: iso, 'data-ov-ago': '' }, ago(iso)); t.title = new Date(iso).toLocaleString(); return t; }
function rocket() {
const ns = 'http://www.w3.org/2000/svg';
@@@ -371,5 +382,5 @@
return out;
}
-- return { latest, list, mount: list, log, scan, render, renderLatest, appendDays, serviceFor, ago, API, SITE_NAMES };
++ return { latest, list, mount: list, log, scan, render, renderLatest, appendDays, serviceFor, ago, API, SITE_NAMES, siteName };
}));
ddiff --git a/test/shipped.test.js b/test/shipped.test.js
iindex 6924a3c..dc290b3 100644
---- a/test/shipped.test.js
++++ b/test/shipped.test.js
@@@ -26,6 +26,10 @@ const data = {
assert.strictEqual(node.querySelectorAll('img').length, 0, 'commit text is text, never markup');
assert.ok(items[0].textContent.includes('<img src=x'));
assert.strictEqual(items[0].querySelector('.ov-shipped-site').textContent, 'Live', 'network-wide: each line names its site');
++ // Every site reads as its name, never as a lowercase id next to capitalised ones (the owner saw "space", "actor").
++ for (const [id, name] of [['space', 'Space'], ['services', 'Services'], ['actor', 'Actor'], ['vip', 'VIP'], ['openre', 'OpenRe'], ['media-hub', 'Media Hub'], ['brand-new', 'Brand New']]) {
++ assert.strictEqual(shipped.siteName(id), name, id);
++ }
assert.strictEqual(items[1].querySelector('a'), null, 'a non-https link is not a link');
assert.ok(items[0].querySelector('time').textContent.endsWith('h ago'));
assert.strictEqual(node.querySelector('.ov-shipped-notes').getAttribute('href'), data.latest_post.url);