63 lines
2.7 KiB
JavaScript
63 lines
2.7 KiB
JavaScript
// 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: ['vendor/qrcode-generator/qrcode.js?v=' + assetVersion].concat(getRegionEditorScripts(assetVersion)),
|
|
currentUser: currentUser || null
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
buildSlideFormViewModel: buildSlideFormViewModel
|
|
}; |