Release v2.18.0: template default content
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 2m2s
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-24 18:03:38 +01:00
1 parent 48e8f3eb4b
commit 24f1603b43
54 files changed
+1421 -151

No files matched your search

+31
View File
@@ -5,6 +5,7 @@ const vm = require('node:vm');
const slideFormEditorSource = fs.readFileSync(require.resolve('../src/web/public/js/slides/slide-form-editor.js'), 'utf8');
const slideFormSource = fs.readFileSync(require.resolve('../src/web/public/js/slides/slide-form.js'), 'utf8');
const slideFormTemplateSource = fs.readFileSync(require.resolve('../src/web/views/signage/slides/form.hbs'), 'utf8');
const mediaPickerSource = fs.readFileSync(require.resolve('../src/web/public/js/media-picker.js'), 'utf8');
const slideThumbnailPreviewSource = fs.readFileSync(require.resolve('../src/web/lib/media/slide-thumbnail-preview.js'), 'utf8');
const slideThumbnailsSource = fs.readFileSync(require.resolve('../src/web/lib/media/slide-thumbnails.js'), 'utf8');
@@ -79,6 +80,12 @@ test('media library selections keep image and video remove controls', () => {
assert.ok(mediaPickerSource.includes("var removeAction = isVideo ? 'region-video' : isQrImage ? 'region-qr-image' : 'region-image';"));
assert.ok(mediaPickerSource.includes('data-remove-\' + removeAction'));
assert.ok(mediaPickerSource.includes('slide-image-region-preview-remove'));
assert.ok(mediaPickerSource.includes("document.querySelectorAll('.modal.show')"));
assert.ok(mediaPickerSource.includes('nestedParentFocusTrap.deactivate()'));
assert.ok(mediaPickerSource.includes('pickerZIndex - 5'));
const pickerModal = fs.readFileSync(require.resolve('../src/web/views/shared/media-picker-modal.hbs'), 'utf8');
assert.ok(pickerModal.indexOf('data-media-picker-confirm') < pickerModal.indexOf('data-media-picker-cancel'));
assert.match(pickerModal, /class="btn btn-warning" data-media-picker-cancel>Cancel/);
});
test('slide thumbnail previews treat image-only text as visible content', () => {
@@ -146,4 +153,28 @@ test('HTML editor shares bounded size controls without changing its content', as
assert.equal(source.value, '<div>Keep this HTML</div>');
assert.match(slideHtmlRegionSource, /style="resize:none;"/);
assert.match(slideHtmlRegionSource, /sandboxed iframe preview\.<\/div>'\s*\+\s*'<div class="btn-group/);
});
test('slide template chooser searches and previews templates while preserving the submitted select', () => {
assert.equal((slideFormTemplateSource.match(/modalId="template-picker-modal"/g) || []).length, 1);
assert.match(slideFormTemplateSource, /name="template_id" id="template-select" class="visually-hidden"/);
assert.match(slideFormTemplateSource, /id="template-picker-open"/);
assert.match(slideFormTemplateSource, /template-picker-current"><strong id="template-picker-selected-name"/);
assert.doesNotMatch(slideFormTemplateSource, /id="template-picker-selected-size"/);
assert.match(slideFormTemplateSource, /modalId="template-picker-modal"/);
assert.match(slideFormTemplateSource, /id="template-picker-search"/);
assert.match(slideFormTemplateSource, /id="template-picker-canvas-size"/);
assert.match(slideFormTemplateSource, /All canvas sizes/);
assert.match(slideFormTemplateSource, /id="template-picker-grid"/);
assert.doesNotMatch(slideFormTemplateSource, /id="template-picker-none"|>No template<\/button>/);
assert.ok(slideFormSource.includes('function createTemplatePickerCard(template)'));
assert.ok(slideFormSource.includes('function populateTemplateCanvasSizes()'));
assert.doesNotMatch(slideFormSource, /createTemplatePickerCard\(null\)/);
assert.ok(slideFormSource.includes('function renderTemplatePicker()'));
assert.ok(slideFormSource.includes("templateSelect.dispatchEvent(new Event('change', { bubbles: true }))"));
});
test('popup preview is disabled and guarded until a template is selected', () => {
assert.match(slideFormSource, /if \(openPreviewPopupButton\) openPreviewPopupButton\.disabled = !template;/);
assert.match(slideFormSource, /function openPreviewPopup\(\) \{\s*if \(!getSelectedTemplate\(\)\)\s*\{\s*return;/);
});