Release 2.21.0: non-destructive media and scoped player sync
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m36s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 31s

This commit is contained in:
lzstealth committed 2026-10-26 21:46:33 +00:00
1 parent 24df245ea1
commit 7cff39dc76
35 files changed
+2009 -949

No files matched your search

+10 -7
View File
@@ -19,19 +19,22 @@ test('slide table thumbnails size to the canvas ratio and show the whole image',
assert.match(placeholderRule, /min-height:\s*0;/);
});
test('slide list thumbnails open and release an authorized preview modal', () => {
test('slide list thumbnails open and release the shared saved-image preview modal', () => {
const listTemplate = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'views', 'signage', 'slides', 'list.hbs'), 'utf8');
const slidesRoutes = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'routes', 'signage', 'slides', 'routes.js'), 'utf8');
const previewTemplate = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'views', 'shared', 'slide-preview-modal.hbs'), 'utf8');
const stylesheet = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'public', 'css', 'theme-custom.css'), 'utf8');
assert.match(listTemplate, /class="playlist-slide-thumb slide-list-thumbnail-button"[^>]*data-bs-toggle="modal"/);
assert.match(listTemplate, /data-slide-preview-url="\/api\/internal\/slide-thumbnails\/\{\{id\}\}\/popup-preview"/);
assert.match(listTemplate, /data-slide-preview-url="\{\{thumbnail_path\}\}"/);
assert.match(listTemplate, /data-canvas-width="\{\{canvas_width\}\}" data-canvas-height="\{\{canvas_height\}\}"/);
assert.match(listTemplate, /currentAspectRatio = canvasWidth > 0 && canvasHeight > 0 \? canvasWidth \/ canvasHeight : 16 \/ 9/);
assert.match(listTemplate, /\{\{> slide-preview-modal\}\}/);
assert.match(previewTemplate, /currentAspectRatio = canvasWidth > 0 && canvasHeight > 0 \? canvasWidth \/ canvasHeight : 16 \/ 9/);
assert.match(listTemplate, /aria-label="Preview slide: \{\{title\}\}"/);
assert.match(listTemplate, /data-slide-preview-frame/);
assert.match(listTemplate, /frame\.src = 'about:blank'/);
assert.match(slidesRoutes, /\/api\/internal\/slide-thumbnails\/:id\/popup-preview', requirePopupPreviewAccess, async function/);
assert.match(previewTemplate, /<img[^>]+data-slide-preview-image hidden/);
assert.match(previewTemplate, /image\.src = thumbnailUrl\.replace/);
assert.match(previewTemplate, /image\.src = thumbnailUrl;/);
assert.match(previewTemplate, /modal\.addEventListener\('hidden\.bs\.modal', function \(\) \{\s*thumbnailUrl = '';\s*image\.hidden = true;\s*image\.removeAttribute\('src'\)/);
assert.doesNotMatch(previewTemplate, /<iframe\b|popup-preview|about:blank/);
assert.match(stylesheet, /^\.slide-list-thumbnail-button:focus-visible\s*\{/m);
const previewFrameRule = stylesheet.match(/^\.slide-list-preview-frame\s*\{([^}]+)\}/m)[1];
assert.match(previewFrameRule, /background:\s*var\(--bs-body-bg\);/);