Release v2.4.2

This commit is contained in:
2026-08-03 12:45:27 +01:00
parent 2b9cabdab2
commit e95928f31c
141 changed files with 7694 additions and 5078 deletions
+4 -57
View File
@@ -1,61 +1,8 @@
// Template add page renderer and form defaults.
// Template add page renderer.
const { renderView } = require('../../../view');
const { getRegionEditorScripts } = require('../../../lib/region-scripts');
const { buildTemplateFormViewModel } = require('./form-view-model');
function buildDefaultTemplate() {
return {
id: null,
name: '',
canvas_size_id: null,
canvas_size_width: 1920,
canvas_size_height: 1080,
background_color: '#111111',
background_image_path: '',
region_usage: [],
regions: []
};
}
function resolveTemplateCanvasSize(template, canvasSizes) {
const currentWidth = Math.max(1, Number(template.canvas_size_width || 1920));
const currentHeight = Math.max(1, Number(template.canvas_size_height || 1080));
const sizeId = template.canvas_size_id ? Number(template.canvas_size_id) : null;
const matched = (canvasSizes || []).find((size) => Number(size.id) === sizeId)
|| (canvasSizes || []).find((size) => Number(size.width) === currentWidth && Number(size.height) === currentHeight);
if (matched) {
return Object.assign({}, template, {
canvas_size_id: matched.id,
canvas_size_label: matched.name,
canvas_size_width: matched.width,
canvas_size_height: matched.height,
background_color: String(template.background_color || '#111111').trim() || '#111111'
});
}
return Object.assign({}, template, {
canvas_size_id: '',
canvas_size_label: 'Current size (' + currentWidth + 'x' + currentHeight + ')',
canvas_size_width: currentWidth,
canvas_size_height: currentHeight,
background_color: String(template.background_color || '#111111').trim() || '#111111'
});
}
module.exports = function renderTemplateFormPage(template, mode, message, canvasSizes, currentUser) {
const isEdit = mode === 'edit';
const current = resolveTemplateCanvasSize(template || buildDefaultTemplate(), canvasSizes || []);
const assetVersion = Date.now().toString(36);
return renderView(isEdit ? 'templates/edit' : 'templates/add', {
title: isEdit ? 'Edit template' : 'Create Template',
active: 'templates',
message: message,
currentUser: currentUser || null,
template: current,
inUse: Boolean(current.inUse),
canvasSizes: canvasSizes || [],
scripts: ['js/lib/modal.js?v=' + assetVersion].concat(getRegionEditorScripts(assetVersion), ['js/templates/template-designer-utils.js?v=' + assetVersion, 'js/templates/template-designer.js?v=' + assetVersion])
});
module.exports = function renderTemplateAddPage(template, message, canvasSizes, currentUser) {
return renderView('templates/form', buildTemplateFormViewModel(template, message, canvasSizes, currentUser, false));
};
+4 -3
View File
@@ -1,7 +1,8 @@
// Template edit page renderer that reuses the add form.
// Template edit page renderer.
const renderTemplateFormPage = require('./add');
const { renderView } = require('../../../view');
const { buildTemplateFormViewModel } = require('./form-view-model');
module.exports = function renderTemplateEditPage(template, data, message, currentUser) {
return renderTemplateFormPage(template, 'edit', message, data && data.canvasSizes ? data.canvasSizes : [], currentUser);
return renderView('templates/form', buildTemplateFormViewModel(template, message, data && data.canvasSizes ? data.canvasSizes : [], currentUser, true));
};
@@ -0,0 +1,70 @@
// Shared template form view-model builder.
const { getRegionEditorScripts } = require('../../../lib/region-scripts');
function buildDefaultTemplate() {
return {
id: null,
name: '',
canvas_size_id: null,
canvas_size_width: 1920,
canvas_size_height: 1080,
background_color: '#111111',
background_image_path: '',
region_usage: [],
regions: []
};
}
function resolveTemplateCanvasSize(template, canvasSizes) {
const currentWidth = Math.max(1, Number(template.canvas_size_width || 1920));
const currentHeight = Math.max(1, Number(template.canvas_size_height || 1080));
const sizeId = template.canvas_size_id ? Number(template.canvas_size_id) : null;
const matched = (canvasSizes || []).find((size) => Number(size.id) === sizeId)
|| (canvasSizes || []).find((size) => Number(size.width) === currentWidth && Number(size.height) === currentHeight);
if (matched) {
return Object.assign({}, template, {
canvas_size_id: matched.id,
canvas_size_label: matched.name,
canvas_size_width: matched.width,
canvas_size_height: matched.height,
background_color: String(template.background_color || '#111111').trim() || '#111111'
});
}
return Object.assign({}, template, {
canvas_size_id: '',
canvas_size_label: 'Current size (' + currentWidth + 'x' + currentHeight + ')',
canvas_size_width: currentWidth,
canvas_size_height: currentHeight,
background_color: String(template.background_color || '#111111').trim() || '#111111'
});
}
function buildTemplateFormViewModel(template, message, canvasSizes, currentUser, isEdit) {
const current = resolveTemplateCanvasSize(template || buildDefaultTemplate(), canvasSizes || []);
const assetVersion = Date.now().toString(36);
return {
title: isEdit ? 'Edit template' : 'Create Template',
active: 'templates',
message: message,
currentUser: currentUser || null,
template: current,
inUse: Boolean(current.inUse),
isEdit: Boolean(isEdit),
showSaveSecondaryActions: Boolean(isEdit),
deleteDisabled: !isEdit || Boolean(current.inUse),
formAction: isEdit && current.id ? '/templates/' + current.id : '/templates',
formAttrs: 'data-template-has-slides="' + (current.slide_count ? 'true' : 'false') + '" data-async-save' + (isEdit ? ' data-async-save-close-url="/templates"' : ' data-async-save-new-redirect="response-url"') + ' data-async-save-new-url="/templates/new"',
cancelUrl: '/templates',
deleteUrl: isEdit && current.id ? '/templates/' + current.id + '/delete' : '',
canvasSizes: canvasSizes || [],
scripts: ['js/lib/modal.js?v=' + assetVersion].concat(getRegionEditorScripts(assetVersion), ['js/templates/template-designer-utils.js?v=' + assetVersion, 'js/templates/template-designer.js?v=' + assetVersion])
};
}
module.exports = {
buildTemplateFormViewModel: buildTemplateFormViewModel
};