Release v2.14.1
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m53s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 32s

This commit is contained in:
lzstealth committed 2026-10-11 18:54:43 +01:00
1 parent 635e1a9942
commit c3299abaac
174 files changed
+4483 -1687

No files matched your search

@@ -1,7 +1,7 @@
// API source add page renderer.
const { renderView } = require('../../../view');
const { buildApiSourceFormViewModel } = require('./form-view-model');
const { renderView } = require('#src/web/view');
const { buildApiSourceFormViewModel } = require('#src/web/routes/data-sources/api-sources/form-view-model');
module.exports = function renderApiSourceAddPage(apiSource, message, currentUser, options) {
return renderView('data-sources/api-sources/form', buildApiSourceFormViewModel(apiSource, message, currentUser, options, false));
@@ -1,7 +1,7 @@
// API source edit page renderer.
const { renderView } = require('../../../view');
const { buildApiSourceFormViewModel } = require('./form-view-model');
const { renderView } = require('#src/web/view');
const { buildApiSourceFormViewModel } = require('#src/web/routes/data-sources/api-sources/form-view-model');
module.exports = function renderApiSourceEditPage(apiSource, data, message, currentUser) {
const viewData = Object.assign({
@@ -1,6 +1,6 @@
// API source list page renderer.
const { renderView } = require('../../../view');
const { renderView } = require('#src/web/view');
function toIsoTimestamp(value) {
if (!value) {
@@ -1,10 +1,10 @@
// API source route registration.
const { buildPagination } = require('../../../lib/pagination');
const renderApiSourcesPage = require('./list');
const renderApiSourceAddPage = require('./add');
const renderApiSourceEditPage = require('./edit');
const { buildDuplicateApiSourceName, buildDuplicateApiSource } = require('./duplicate');
const { buildPagination } = require('#src/web/lib/pagination');
const renderApiSourcesPage = require('#src/web/routes/data-sources/api-sources/list');
const renderApiSourceAddPage = require('#src/web/routes/data-sources/api-sources/add');
const renderApiSourceEditPage = require('#src/web/routes/data-sources/api-sources/edit');
const { buildDuplicateApiSourceName, buildDuplicateApiSource } = require('#src/web/routes/data-sources/api-sources/duplicate');
const { fetchAppSettings } = require('#src/data/app-settings');
function toIsoTimestamp(value) {
+2 -2
View File
@@ -1,7 +1,7 @@
// RSS feed add page renderer.
const { renderView } = require('../../../view');
const { buildRssFeedFormViewModel } = require('./form-view-model');
const { renderView } = require('#src/web/view');
const { buildRssFeedFormViewModel } = require('#src/web/routes/data-sources/rss-feeds/form-view-model');
module.exports = function renderRssFeedAddPage(rssFeed, message, currentUser, options) {
return renderView('data-sources/rss-feeds/form', buildRssFeedFormViewModel(rssFeed, message, currentUser, options, false));
@@ -1,7 +1,7 @@
// RSS feed edit page renderer.
const { renderView } = require('../../../view');
const { buildRssFeedFormViewModel } = require('./form-view-model');
const { renderView } = require('#src/web/view');
const { buildRssFeedFormViewModel } = require('#src/web/routes/data-sources/rss-feeds/form-view-model');
module.exports = function renderRssFeedEditPage(rssFeed, data, message, currentUser) {
const viewData = Object.assign({
@@ -1,6 +1,6 @@
// RSS feed list page renderer.
const { renderView } = require('../../../view');
const { renderView } = require('#src/web/view');
function formatIntervalLabel(interval, unit) {
const value = Math.max(1, Number(interval) || 0);
@@ -1,10 +1,10 @@
// RSS feed route registration.
const { buildPagination } = require('../../../lib/pagination');
const renderRssFeedsPage = require('./list');
const renderRssFeedAddPage = require('./add');
const renderRssFeedEditPage = require('./edit');
const { buildDuplicateRssFeedName, buildDuplicateRssFeed } = require('./duplicate');
const { buildPagination } = require('#src/web/lib/pagination');
const renderRssFeedsPage = require('#src/web/routes/data-sources/rss-feeds/list');
const renderRssFeedAddPage = require('#src/web/routes/data-sources/rss-feeds/add');
const renderRssFeedEditPage = require('#src/web/routes/data-sources/rss-feeds/edit');
const { buildDuplicateRssFeedName, buildDuplicateRssFeed } = require('#src/web/routes/data-sources/rss-feeds/duplicate');
const { fetchAppSettings } = require('#src/data/app-settings');
async function getDataSourceUsageMaps(pool, common) {
@@ -1,7 +1,7 @@
// Timetable group add page renderer.
const { renderView } = require('../../../view');
const { buildTimetableGroupFormViewModel } = require('./form-view-model');
const { renderView } = require('#src/web/view');
const { buildTimetableGroupFormViewModel } = require('#src/web/routes/data-sources/timetables/form-view-model');
module.exports = function renderTimetableGroupAddPage(timetableGroup, timetableEntries, message, currentUser, options) {
return renderView('data-sources/timetables/form', buildTimetableGroupFormViewModel(timetableGroup, timetableEntries, message, currentUser, false, options));
@@ -1,7 +1,7 @@
// Timetable group edit page renderer.
const { renderView } = require('../../../view');
const { buildTimetableGroupFormViewModel } = require('./form-view-model');
const { renderView } = require('#src/web/view');
const { buildTimetableGroupFormViewModel } = require('#src/web/routes/data-sources/timetables/form-view-model');
module.exports = function renderTimetableGroupEditPage(timetableGroup, timetableEntries, message, currentUser) {
return renderView('data-sources/timetables/form', buildTimetableGroupFormViewModel(timetableGroup, timetableEntries, message, currentUser, true));
@@ -1,6 +1,6 @@
// Timetable group list page renderer.
const { renderView } = require('../../../view');
const { renderView } = require('#src/web/view');
const { normalizeTimeZone } = require('#src/data/timetables');
function formatDateInTimeZone(value, timeZone) {
@@ -1,10 +1,10 @@
// Timetable route registration.
const { buildPagination } = require('../../../lib/pagination');
const renderTimetableGroupsPage = require('./list');
const renderTimetableGroupAddPage = require('./add');
const renderTimetableGroupEditPage = require('./edit');
const { buildDuplicateTimetableGroupName, buildDuplicateTimetableGroup, buildDuplicateTimetableEntry } = require('./duplicate');
const { buildPagination } = require('#src/web/lib/pagination');
const renderTimetableGroupsPage = require('#src/web/routes/data-sources/timetables/list');
const renderTimetableGroupAddPage = require('#src/web/routes/data-sources/timetables/add');
const renderTimetableGroupEditPage = require('#src/web/routes/data-sources/timetables/edit');
const { buildDuplicateTimetableGroupName, buildDuplicateTimetableGroup, buildDuplicateTimetableEntry } = require('#src/web/routes/data-sources/timetables/duplicate');
async function getDataSourceUsageMaps(pool, common) {
const [slides] = await pool.query('SELECT content_json FROM c_slides WHERE content_json IS NOT NULL');
+7 -7
View File
@@ -1,12 +1,12 @@
// Weather location source CRUD routes.
const { buildPagination } = require('../../lib/pagination');
const renderWeatherLocationsPage = require('./weather/list');
const renderWeatherLocationAddPage = require('./weather/add');
const renderWeatherLocationEditPage = require('./weather/edit');
const { buildDuplicateWeatherLocationName, buildDuplicateWeatherLocation } = require('./weather/duplicate');
const { fetchAppSettings } = require('../../../data/app-settings');
const { buildAuditChanges } = require('../../../data/audit-log');
const { buildPagination } = require('#src/web/lib/pagination');
const renderWeatherLocationsPage = require('#src/web/routes/data-sources/weather/list');
const renderWeatherLocationAddPage = require('#src/web/routes/data-sources/weather/add');
const renderWeatherLocationEditPage = require('#src/web/routes/data-sources/weather/edit');
const { buildDuplicateWeatherLocationName, buildDuplicateWeatherLocation } = require('#src/web/routes/data-sources/weather/duplicate');
const { fetchAppSettings } = require('#src/data/app-settings');
const { buildAuditChanges } = require('#src/data/audit-log');
async function getWeatherLocationUsageIds(pool, common) {
const [slides] = await pool.query('SELECT content_json FROM c_slides WHERE content_json IS NOT NULL');
+2 -2
View File
@@ -1,3 +1,3 @@
const { renderView } = require('../../../view');
const buildWeatherLocationFormViewModel = require('./form-view-model');
const { renderView } = require('#src/web/view');
const buildWeatherLocationFormViewModel = require('#src/web/routes/data-sources/weather/form-view-model');
module.exports = function renderWeatherLocationAddPage(location, message, currentUser, options) { return renderView('data-sources/weather/form', buildWeatherLocationFormViewModel(location, message, currentUser, false, options)); };
+2 -2
View File
@@ -1,3 +1,3 @@
const { renderView } = require('../../../view');
const buildWeatherLocationFormViewModel = require('./form-view-model');
const { renderView } = require('#src/web/view');
const buildWeatherLocationFormViewModel = require('#src/web/routes/data-sources/weather/form-view-model');
module.exports = function renderWeatherLocationEditPage(location, message, currentUser, options) { return renderView('data-sources/weather/form', buildWeatherLocationFormViewModel(location, message, currentUser, true, options)); };
@@ -1,4 +1,4 @@
const { convertWeatherSnapshot } = require('../../../../data/weather-units');
const { convertWeatherSnapshot } = require('#src/data/weather-units');
function buildDefaultWeatherLocation() {
return { id: null, enabled: 1, name: '', location_label: '', latitude: '', longitude: '', timezone: 'Europe/London', provider: 'open-meteo', temperature_unit: 'celsius', wind_unit: 'kmh', precipitation_unit: 'mm', update_interval_value: 30, update_interval_unit: 'minutes' };
+1 -1
View File
@@ -1,4 +1,4 @@
const { renderView } = require('../../../view');
const { renderView } = require('#src/web/view');
function formatInterval(value, unit) {
const amount = Math.max(1, Number(value) || 0);