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 -37
View File
@@ -1,41 +1,8 @@
// Announcement add page renderer and form defaults.
// Announcement add page renderer.
const { renderView } = require('../../../view');
const { DEFAULT_ANNOUNCEMENT_ICON } = require('#src/data/announcement-icons');
const { buildAnnouncementFormViewModel } = require('./form-view-model');
function buildDefaultAnnouncement() {
return {
id: null,
message: '',
short_label: '',
announcement_type: 'lower-third',
color_key: 'primary',
icon_key: DEFAULT_ANNOUNCEMENT_ICON,
durationMode: 'duration',
duration_seconds: null,
durationValue: 5,
durationUnit: 'minutes',
durationLabel: 'Until disabled',
screen_ids: []
};
}
module.exports = function renderAnnouncementFormPage(announcement, mode, message, currentUser, options) {
const isEdit = mode === 'edit';
const announcementTypes = Array.isArray(options && options.announcementTypes) ? options.announcementTypes : [];
const announcementColors = Array.isArray(options && options.announcementColors) ? options.announcementColors : [];
const announcementIcons = Array.isArray(options && options.announcementIcons) ? options.announcementIcons : [];
const announcementScreens = Array.isArray(options && options.announcementScreens) ? options.announcementScreens : [];
return renderView(isEdit ? 'signage/announcements/edit' : 'signage/announcements/add', {
title: isEdit ? 'Edit announcement' : 'Add announcement',
active: 'announcements',
message: message,
currentUser: currentUser || null,
announcement: Object.assign({}, buildDefaultAnnouncement(), announcement || {}),
announcementTypes: announcementTypes,
announcementColors: announcementColors,
announcementIcons: announcementIcons,
announcementScreens: announcementScreens
});
module.exports = function renderAnnouncementAddPage(announcement, message, currentUser, options) {
return renderView('signage/announcements/form', buildAnnouncementFormViewModel(announcement, message, currentUser, options, false));
};
+4 -3
View File
@@ -1,7 +1,8 @@
// Announcement edit page renderer that reuses the add form.
// Announcement edit page renderer.
const renderAnnouncementFormPage = require('./add');
const { renderView } = require('../../../view');
const { buildAnnouncementFormViewModel } = require('./form-view-model');
module.exports = function renderAnnouncementEditPage(announcement, _data, message, currentUser, options) {
return renderAnnouncementFormPage(announcement, 'edit', message, currentUser, options);
return renderView('signage/announcements/form', buildAnnouncementFormViewModel(announcement, message, currentUser, options, true));
};
@@ -0,0 +1,54 @@
// Shared announcement form view-model builder.
const { DEFAULT_ANNOUNCEMENT_ICON } = require('#src/data/announcement-icons');
function buildDefaultAnnouncement() {
return {
id: null,
message: '',
short_label: '',
announcement_type: 'lower-third',
color_key: 'primary',
icon_key: DEFAULT_ANNOUNCEMENT_ICON,
durationMode: 'duration',
duration_seconds: null,
durationValue: 5,
durationUnit: 'minutes',
durationLabel: 'Until disabled',
screen_ids: []
};
}
function buildAnnouncementFormViewModel(announcement, message, currentUser, options, isEdit) {
const announcementTypes = Array.isArray(options && options.announcementTypes) ? options.announcementTypes : [];
const announcementColors = Array.isArray(options && options.announcementColors) ? options.announcementColors : [];
const announcementIcons = Array.isArray(options && options.announcementIcons) ? options.announcementIcons : [];
const announcementScreens = Array.isArray(options && options.announcementScreens) ? options.announcementScreens : [];
const viewAnnouncement = Object.assign({}, buildDefaultAnnouncement(), announcement || {});
const canDelete = Boolean(currentUser && Array.isArray(currentUser.permissionKeys) && currentUser.permissionKeys.indexOf('announcements.delete') !== -1);
return {
title: isEdit ? 'Edit announcement' : 'Add announcement',
active: 'announcements',
message: message,
currentUser: currentUser || null,
announcement: viewAnnouncement,
isEdit: Boolean(isEdit),
showSaveSecondaryActions: Boolean(isEdit),
showDeleteAction: Boolean(isEdit && canDelete),
deleteDisabled: !isEdit || !Boolean(viewAnnouncement && viewAnnouncement.canDelete),
formAction: isEdit && viewAnnouncement && viewAnnouncement.id ? '/announcements/' + viewAnnouncement.id : '/announcements',
formAttrs: 'data-async-save' + (isEdit ? ' data-async-save-close-url="/announcements"' : ' data-async-save-new-redirect="response-url"') + ' data-async-save-new-url="/announcements/new"',
cancelUrl: '/announcements',
deleteUrl: isEdit && viewAnnouncement && viewAnnouncement.id ? '/announcements/' + viewAnnouncement.id + '/delete' : '',
actionFormId: 'announcement-action-form',
announcementTypes: announcementTypes,
announcementColors: announcementColors,
announcementIcons: announcementIcons,
announcementScreens: announcementScreens
};
}
module.exports = {
buildAnnouncementFormViewModel: buildAnnouncementFormViewModel
};
@@ -261,7 +261,7 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
app.get('/announcements/new', requirePermission('announcements.create'), async function (req, res, next) {
try {
const screens = await fetchAnnouncementScreens();
res.send(pages.renderAnnouncementFormPage(buildAnnouncementFormData({
res.send(pages.renderAnnouncementAddPage(buildAnnouncementFormData({
message: '',
short_label: '',
announcement_type: 'lower-third',
@@ -272,7 +272,7 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
durationValue: 5,
durationUnit: 'minutes',
screen_ids: []
}), 'add', req.query.message ? String(req.query.message) : '', req.currentUser, {
}), req.query.message ? String(req.query.message) : '', req.currentUser, {
announcementTypes: ANNOUNCEMENT_TYPES,
announcementColors: ANNOUNCEMENT_COLORS,
announcementIcons: ANNOUNCEMENT_ICONS,