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
@@ -0,0 +1,63 @@
// Shared slide form view-model builder.
const { getRegionEditorScripts } = require('../../../lib/region-scripts');
function buildDefaultSlide() {
return {
title: '',
template_id: null,
content: {}
};
}
function buildTemplates(templates, templateRegions) {
const regions = Array.isArray(templateRegions) ? templateRegions : [];
return (Array.isArray(templates) ? templates : []).map((template) => Object.assign({}, template, {
canvas_size_width: template.canvas_size_width,
canvas_size_height: template.canvas_size_height,
regions: regions.filter((region) => Number(region.template_id) === Number(template.id))
}));
}
function buildSlideFormViewModel(data, slide, message, currentUser, isEdit) {
const assetVersion = Date.now().toString(36);
const templateRegions = data && data.templateRegions ? data.templateRegions : [];
const rssFeeds = data && data.rssFeeds ? data.rssFeeds : [];
const apiSources = data && data.apiSources ? data.apiSources : [];
const timetableGroups = data && data.timetableGroups ? data.timetableGroups : [];
const fontLibrary = data && data.fontLibrary ? data.fontLibrary : null;
const templates = buildTemplates(data && data.templates ? data.templates : [], templateRegions);
const viewSlide = slide || buildDefaultSlide();
return {
title: isEdit ? 'Edit slide' : 'Create slide',
active: 'slides',
message: message,
isEdit: Boolean(isEdit),
inUse: Boolean(viewSlide && viewSlide.inUse),
action: isEdit && viewSlide.id ? '/slides/' + viewSlide.id : '/slides',
formAttrs: isEdit
? 'data-async-save data-async-save-close-url="/slides" data-async-save-new-url="/slides/new"'
: 'data-async-save data-async-save-close-url="/slides" data-async-save-new-redirect="response-url" data-async-save-new-url="/slides/new"',
slide: viewSlide,
templates: templates,
stylesheets: fontLibrary && fontLibrary.stylesheetHref ? [fontLibrary.stylesheetHref] : [],
slideEditorData: {
templates: templates,
rssFeeds: rssFeeds,
apiSources: apiSources,
timetableGroups: timetableGroups,
fontStylesheetHref: fontLibrary && fontLibrary.stylesheetHref ? fontLibrary.stylesheetHref : '',
fontFamilyFormats: fontLibrary && fontLibrary.fontFamilyFormats ? fontLibrary.fontFamilyFormats : '',
existingTemplateId: viewSlide && viewSlide.template_id ? viewSlide.template_id : null,
existingContent: viewSlide && viewSlide.content ? viewSlide.content : {}
},
assetVersion: assetVersion,
slideEditorScripts: getRegionEditorScripts(assetVersion),
currentUser: currentUser || null
};
}
module.exports = {
buildSlideFormViewModel: buildSlideFormViewModel
};