Save worktree changes

This commit is contained in:
2026-07-25 02:29:19 +01:00
parent 8d3b7d557b
commit db9d718cd8
170 changed files with 11719 additions and 3414 deletions
+55
View File
@@ -0,0 +1,55 @@
const { renderView } = require('../../../view');
function buildDefaultTemplate() {
return {
id: null,
name: '',
canvas_size_id: null,
canvas_size_width: 1920,
canvas_size_height: 1080,
background_color: '#111111',
background_image_path: '',
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 || []);
return renderView(isEdit ? 'templates/edit' : 'templates/add', {
title: isEdit ? 'Edit template' : 'Create Template',
active: 'templates',
message: message,
currentUser: currentUser || null,
template: current,
canvasSizes: canvasSizes || [],
scripts: ['js/templates/template-designer-utils.js', 'js/templates/template-designer.js']
});
};
+5
View File
@@ -0,0 +1,5 @@
const renderTemplateFormPage = require('./add');
module.exports = function renderTemplateEditPage(template, data, message, currentUser) {
return renderTemplateFormPage(template, 'edit', message, data && data.canvasSizes ? data.canvasSizes : [], currentUser);
};
+19
View File
@@ -0,0 +1,19 @@
const { renderView } = require('../../../view');
module.exports = function renderTemplatesPage(data, message, currentUser) {
const templates = (data.templates || []).map((template) => ({
id: template.id,
name: template.name,
canvas_size_width: template.canvas_size_width,
canvas_size_height: template.canvas_size_height,
regionCount: (data.templateRegions || []).filter((region) => region.template_id === template.id).length
}));
return renderView('templates/list', {
title: 'Slide templates',
active: 'templates',
message: message,
currentUser: currentUser || null,
templates: templates
});
};
@@ -0,0 +1,16 @@
module.exports = function registerTemplatesRoutes(app, deps) {
const pages = deps.pages;
const common = deps.common;
const pool = deps.pool;
const requirePermission = deps.requirePermission;
app.get('/templates', requirePermission('templates.read'), async function (req, res, next) {
try {
const data = await common.fetchTemplatesData(pool);
res.send(pages.renderTemplatesPage(data, req.query.message ? String(req.query.message) : '', req.currentUser));
} catch (error) {
next(error);
}
});
};