openvibers/openvibe.blog Commits
The OpenVibe Frame: openvibe-shared/frame (formerly chrome-ssr) and 1.11.0; openvibe-publishing 0.3.2 (one copy of openvibe-shared)
Changes
@@@ -16,9 +16,9 @@"express-rate-limit": "^7.5.0","helmet": "^8.1.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",-- "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.1",++ "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.2","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"},"devDependencies": {"jsonwebtoken": "^9.0.2"@@@ -1031,12 +1031,12 @@}},"node_modules/openvibe-publishing": {-- "version": "0.3.1",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.1",-- "integrity": "sha512-fK7BqaLKLmTwpWTPL+1cQt13tbG6Tp407hIooVWJ8Hi5QvZIzJxQPWb3lnzdCDjAOUCCgxmNNQ0o+fQbohbUJg==",++ "version": "0.3.2",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.2",++ "integrity": "sha512-XNpM7JJHCWlk2SZRzRqpu2kmWF9kMj6+tS3433hRKdyAB3jubi7Xzeav0OGX1wtqlKk4k00R186XiFmx1igTDg==","license": "MIT","dependencies": {-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"},"engines": {"node": ">=20"@@@ -1060,9 +1060,9 @@}},"node_modules/openvibe-shared": {-- "version": "1.10.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0",-- "integrity": "sha512-d2GkNuJkx6as4NKiryIBAGuff+7kY+eDMmGxK3AR91yLcgW8UYugML0foas/vdhqRNowE2I8JRVEnD01ZLhnrQ==",++ "version": "1.11.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0",++ "integrity": "sha512-edMW0I25HNFReLcfZ9ak+4q5sy2t7qq7EPG52tOerTBV2fU994C5we/02AD/9i2Vuq0+ayNBBisW0cg60L6DLQ==","license": "MIT","dependencies": {"jsonwebtoken": "^9.0.0"@@@ -22,9 +22,9 @@"express-rate-limit": "^7.5.0","helmet": "^8.1.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",-- "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.1",++ "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.2","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0"++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"},"devDependencies": {"jsonwebtoken": "^9.0.2"@@@ -84,7 +84,7 @@ function createApp(opts = {}) {contentSecurityPolicy: {directives: {defaultSrc: ["'self'"],-- // The shared chrome (theme-loader, navbar) comes from the Network; the inline init is ours.++ // The OpenVibe Frame (theme-loader, navbar, footer) comes from the Network; the inline init is ours.scriptSrc: ["'self'", "'unsafe-inline'", 'https://openvibe.network'],styleSrc: ["'self'", "'unsafe-inline'", 'https://openvibe.network', 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],fontSrc: ["'self'", 'data:', 'https://fonts.gstatic.com', 'https://cdnjs.cloudflare.com'],@@@ -17,7 +17,7 @@* members/VIP and private posts, refusals, 404/410 — is `private, no-store` + X-Robots-Tag.*/const express = require('express');--const chromeSsr = require('openvibe-shared/chrome-ssr');++const frame = require('openvibe-shared/frame');const seo = require('openvibe-publishing/seo');const ssr = require('openvibe-publishing/ssr');const authorship = require('openvibe-publishing/authorship');@@@ -110,7 +110,7 @@ function createPublicRoutes(ctx) {blog, blogUrl: `/@${blog.handle}`, items, pager, feeds,series: blogs.series(blog).filter((sr) => shows({ seriesId: sr.id })), categories: prune(reading.categoriesTree(blog)),canWrite: access.canWrite(store, req.viewer, blog, 'create'),-- }) + (home && pager.page === 1 ? chromeSsr.shipped({ service: 'blog', title: 'Recently shipped on OpenVibe.Blog' }) : ''),++ }) + (home && pager.page === 1 ? frame.shipped({ service: 'blog', title: 'Recently shipped on OpenVibe.Blog' }) : ''),}, { cacheable: !restricted });}@@@ -123,7 +123,7 @@ function createPublicRoutes(ctx) {description: 'Every change deployed to OpenVibe.Blog, newest first, with the Patch notes that gather them.',decision: pageDecision('/updates'),canonical: seo.canonicalUrl(config.baseUrl, '/updates'),-- body: chromeSsr.updatesBody({ service: 'blog', siteName: 'OpenVibe.Blog' }) + chromeSsr.shippedScript(),++ body: frame.updatesBody({ service: 'blog', siteName: 'OpenVibe.Blog' }) + frame.shippedScript(),}, { cacheable: true })));router.get('/@:handle', wrap(async (req, res) => {@@@ -5,7 +5,7 @@* - <head>: title, description, canonical and robots from the indexability gate's decision* (openvibe-publishing/seo metaTags — there is no default that makes a page indexable),* Open Graph/Twitter, JSON-LD, feed links, the shared app icon and critical canvas-- * - the shared chrome: navbar.js and theme-loader.js from the Network (progressive), a++ * - the OpenVibe Frame: navbar.js and theme-loader.js from the Network (progressive), a* <noscript> navigation bar and the server-rendered shared footer (openvibe-shared)* - a blog's theme preset applied to its content surface only (openvibe-shared tokens)*/@@@ -15,7 +15,7 @@ const path = require('path');const seo = require('openvibe-publishing/seo');const { escapeHtml: esc } = require('openvibe-publishing/ssr');const appIcon = require('openvibe-shared/app-icon');--const chrome = require('openvibe-shared/chrome-ssr');++const frame = require('openvibe-shared/frame');const NETWORK_URL = 'https://openvibe.network';const SITE_NAME = 'OpenVibe.Blog';@@@ -97,16 +97,16 @@ ${appIcon.headTags({ site: 'blog' })}<body class="${esc(o.bodyClass || '')}"><a class="skip" href="#main">Skip to content</a><div id="navbar-mount"></div>--${chrome.noscriptNav({ name: SITE_NAME, home: '/', links: [{ label: 'Blog', href: '/' }, { label: 'Write', href: '/write' }] })}++${frame.noscriptNav({ name: SITE_NAME, home: '/', links: [{ label: 'Blog', href: '/' }, { label: 'Write', href: '/write' }] })}<noscript><div class="account-bar" role="navigation" aria-label="Account">${account}</div></noscript><main id="main" class="page blog-surface"${style}>${o.body || ''}</main>--${chrome.footer(footer)}++${frame.footer(footer)}<script>window.__OV_PAGE = ${JSON.stringify({ navbar: nav, footer }).replace(/</g, '\\u003c')};document.addEventListener('DOMContentLoaded', function () {-- try { if (window.OpenVibeNavbar) OpenVibeNavbar.init(window.__OV_PAGE.navbar); } catch (e) { /* the chrome is optional */ }++ try { if (window.OpenVibeNavbar) OpenVibeNavbar.init(window.__OV_PAGE.navbar); } catch (e) { /* the Frame is optional */ }try { if (window.OpenVibeFooter) OpenVibeFooter.init(window.__OV_PAGE.footer); } catch (e) { /* */ }});</script>
@@ -16,9 +16,9 @@
@@ -16,9 +16,9 @@
"express-rate-limit": "^7.5.0",
"express-rate-limit": "^7.5.0",
"helmet": "^8.1.0",
"helmet": "^8.1.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",
- "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.1",
+ "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.2",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"
},
},
"devDependencies": {
"devDependencies": {
"jsonwebtoken": "^9.0.2"
"jsonwebtoken": "^9.0.2"
@@ -1031,12 +1031,12 @@
@@ -1031,12 +1031,12 @@
}
}
},
},
"node_modules/openvibe-publishing": {
"node_modules/openvibe-publishing": {
- "version": "0.3.1",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.1",
- "integrity": "sha512-fK7BqaLKLmTwpWTPL+1cQt13tbG6Tp407hIooVWJ8Hi5QvZIzJxQPWb3lnzdCDjAOUCCgxmNNQ0o+fQbohbUJg==",
+ "version": "0.3.2",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.2",
+ "integrity": "sha512-XNpM7JJHCWlk2SZRzRqpu2kmWF9kMj6+tS3433hRKdyAB3jubi7Xzeav0OGX1wtqlKk4k00R186XiFmx1igTDg==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"
},
},
"engines": {
"engines": {
"node": ">=20"
"node": ">=20"
@@ -1060,9 +1060,9 @@
@@ -1060,9 +1060,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "1.10.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0",
- "integrity": "sha512-d2GkNuJkx6as4NKiryIBAGuff+7kY+eDMmGxK3AR91yLcgW8UYugML0foas/vdhqRNowE2I8JRVEnD01ZLhnrQ==",
+ "version": "1.11.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0",
+ "integrity": "sha512-edMW0I25HNFReLcfZ9ak+4q5sy2t7qq7EPG52tOerTBV2fU994C5we/02AD/9i2Vuq0+ayNBBisW0cg60L6DLQ==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0"
"jsonwebtoken": "^9.0.0"
@@ -22,9 +22,9 @@
@@ -22,9 +22,9 @@
"express-rate-limit": "^7.5.0",
"express-rate-limit": "^7.5.0",
"helmet": "^8.1.0",
"helmet": "^8.1.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.33.0",
- "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.1",
+ "openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v0.3.2",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.7.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.10.0"
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.11.0"
},
},
"devDependencies": {
"devDependencies": {
"jsonwebtoken": "^9.0.2"
"jsonwebtoken": "^9.0.2"
@@ -84,7 +84,7 @@ function createApp(opts = {}) {
@@ -84,7 +84,7 @@ function createApp(opts = {}) {
contentSecurityPolicy: {
contentSecurityPolicy: {
directives: {
directives: {
defaultSrc: ["'self'"],
defaultSrc: ["'self'"],
- // The shared chrome (theme-loader, navbar) comes from the Network; the inline init is ours.
+ // The OpenVibe Frame (theme-loader, navbar, footer) comes from the Network; the inline init is ours.
scriptSrc: ["'self'", "'unsafe-inline'", 'https://openvibe.network'],
scriptSrc: ["'self'", "'unsafe-inline'", 'https://openvibe.network'],
styleSrc: ["'self'", "'unsafe-inline'", 'https://openvibe.network', 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],
styleSrc: ["'self'", "'unsafe-inline'", 'https://openvibe.network', 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],
fontSrc: ["'self'", 'data:', 'https://fonts.gstatic.com', 'https://cdnjs.cloudflare.com'],
fontSrc: ["'self'", 'data:', 'https://fonts.gstatic.com', 'https://cdnjs.cloudflare.com'],
@@ -17,7 +17,7 @@
@@ -17,7 +17,7 @@
* members/VIP and private posts, refusals, 404/410 — is `private, no-store` + X-Robots-Tag.
* members/VIP and private posts, refusals, 404/410 — is `private, no-store` + X-Robots-Tag.
*/
*/
const express = require('express');
const express = require('express');
-const chromeSsr = require('openvibe-shared/chrome-ssr');
+const frame = require('openvibe-shared/frame');
const seo = require('openvibe-publishing/seo');
const seo = require('openvibe-publishing/seo');
const ssr = require('openvibe-publishing/ssr');
const ssr = require('openvibe-publishing/ssr');
const authorship = require('openvibe-publishing/authorship');
const authorship = require('openvibe-publishing/authorship');
@@ -110,7 +110,7 @@ function createPublicRoutes(ctx) {
@@ -110,7 +110,7 @@ function createPublicRoutes(ctx) {
blog, blogUrl: `/@${blog.handle}`, items, pager, feeds,
blog, blogUrl: `/@${blog.handle}`, items, pager, feeds,
series: blogs.series(blog).filter((sr) => shows({ seriesId: sr.id })), categories: prune(reading.categoriesTree(blog)),
series: blogs.series(blog).filter((sr) => shows({ seriesId: sr.id })), categories: prune(reading.categoriesTree(blog)),
canWrite: access.canWrite(store, req.viewer, blog, 'create'),
canWrite: access.canWrite(store, req.viewer, blog, 'create'),
- }) + (home && pager.page === 1 ? chromeSsr.shipped({ service: 'blog', title: 'Recently shipped on OpenVibe.Blog' }) : ''),
+ }) + (home && pager.page === 1 ? frame.shipped({ service: 'blog', title: 'Recently shipped on OpenVibe.Blog' }) : ''),
}, { cacheable: !restricted });
}, { cacheable: !restricted });
}
}
@@ -123,7 +123,7 @@ function createPublicRoutes(ctx) {
@@ -123,7 +123,7 @@ function createPublicRoutes(ctx) {
description: 'Every change deployed to OpenVibe.Blog, newest first, with the Patch notes that gather them.',
description: 'Every change deployed to OpenVibe.Blog, newest first, with the Patch notes that gather them.',
decision: pageDecision('/updates'),
decision: pageDecision('/updates'),
canonical: seo.canonicalUrl(config.baseUrl, '/updates'),
canonical: seo.canonicalUrl(config.baseUrl, '/updates'),
- body: chromeSsr.updatesBody({ service: 'blog', siteName: 'OpenVibe.Blog' }) + chromeSsr.shippedScript(),
+ body: frame.updatesBody({ service: 'blog', siteName: 'OpenVibe.Blog' }) + frame.shippedScript(),
}, { cacheable: true })));
}, { cacheable: true })));
router.get('/@:handle', wrap(async (req, res) => {
router.get('/@:handle', wrap(async (req, res) => {
@@ -5,7 +5,7 @@
@@ -5,7 +5,7 @@
* - <head>: title, description, canonical and robots from the indexability gate's decision
* - <head>: title, description, canonical and robots from the indexability gate's decision
* (openvibe-publishing/seo metaTags — there is no default that makes a page indexable),
* (openvibe-publishing/seo metaTags — there is no default that makes a page indexable),
* Open Graph/Twitter, JSON-LD, feed links, the shared app icon and critical canvas
* Open Graph/Twitter, JSON-LD, feed links, the shared app icon and critical canvas
- * - the shared chrome: navbar.js and theme-loader.js from the Network (progressive), a
+ * - the OpenVibe Frame: navbar.js and theme-loader.js from the Network (progressive), a
* <noscript> navigation bar and the server-rendered shared footer (openvibe-shared)
* <noscript> navigation bar and the server-rendered shared footer (openvibe-shared)
* - a blog's theme preset applied to its content surface only (openvibe-shared tokens)
* - a blog's theme preset applied to its content surface only (openvibe-shared tokens)
*/
*/
@@ -15,7 +15,7 @@ const path = require('path');
@@ -15,7 +15,7 @@ const path = require('path');
const seo = require('openvibe-publishing/seo');
const seo = require('openvibe-publishing/seo');
const { escapeHtml: esc } = require('openvibe-publishing/ssr');
const { escapeHtml: esc } = require('openvibe-publishing/ssr');
const appIcon = require('openvibe-shared/app-icon');
const appIcon = require('openvibe-shared/app-icon');
-const chrome = require('openvibe-shared/chrome-ssr');
+const frame = require('openvibe-shared/frame');
const NETWORK_URL = 'https://openvibe.network';
const NETWORK_URL = 'https://openvibe.network';
const SITE_NAME = 'OpenVibe.Blog';
const SITE_NAME = 'OpenVibe.Blog';
@@ -97,16 +97,16 @@ ${appIcon.headTags({ site: 'blog' })}
@@ -97,16 +97,16 @@ ${appIcon.headTags({ site: 'blog' })}
<body class="${esc(o.bodyClass || '')}">
<body class="${esc(o.bodyClass || '')}">
<a class="skip" href="#main">Skip to content</a>
<a class="skip" href="#main">Skip to content</a>
<div id="navbar-mount"></div>
<div id="navbar-mount"></div>
-${chrome.noscriptNav({ name: SITE_NAME, home: '/', links: [{ label: 'Blog', href: '/' }, { label: 'Write', href: '/write' }] })}
+${frame.noscriptNav({ name: SITE_NAME, home: '/', links: [{ label: 'Blog', href: '/' }, { label: 'Write', href: '/write' }] })}
<noscript><div class="account-bar" role="navigation" aria-label="Account">${account}</div></noscript>
<noscript><div class="account-bar" role="navigation" aria-label="Account">${account}</div></noscript>
<main id="main" class="page blog-surface"${style}>
<main id="main" class="page blog-surface"${style}>
${o.body || ''}
${o.body || ''}
</main>
</main>
-${chrome.footer(footer)}
+${frame.footer(footer)}
<script>
<script>
window.__OV_PAGE = ${JSON.stringify({ navbar: nav, footer }).replace(/</g, '\\u003c')};
window.__OV_PAGE = ${JSON.stringify({ navbar: nav, footer }).replace(/</g, '\\u003c')};
document.addEventListener('DOMContentLoaded', function () {
document.addEventListener('DOMContentLoaded', function () {
- try { if (window.OpenVibeNavbar) OpenVibeNavbar.init(window.__OV_PAGE.navbar); } catch (e) { /* the chrome is optional */ }
+ try { if (window.OpenVibeNavbar) OpenVibeNavbar.init(window.__OV_PAGE.navbar); } catch (e) { /* the Frame is optional */ }
try { if (window.OpenVibeFooter) OpenVibeFooter.init(window.__OV_PAGE.footer); } catch (e) { /* */ }
try { if (window.OpenVibeFooter) OpenVibeFooter.init(window.__OV_PAGE.footer); } catch (e) { /* */ }
});
});
</script>
</script>