Add onboarding weather and template gradients
This commit is contained in:
+41
-2
@@ -14,6 +14,39 @@ function sanitizeBackgroundColor(value) {
|
||||
return '#111111';
|
||||
}
|
||||
|
||||
function normalizeBackgroundGradient(value) {
|
||||
let gradient = value;
|
||||
if (typeof gradient === 'string') {
|
||||
try {
|
||||
gradient = JSON.parse(gradient);
|
||||
} catch (_error) {
|
||||
gradient = null;
|
||||
}
|
||||
}
|
||||
if (!gradient || typeof gradient !== 'object' || Array.isArray(gradient)) {
|
||||
return null;
|
||||
}
|
||||
const sourceStops = Array.isArray(gradient.stops) && gradient.stops.length
|
||||
? gradient.stops
|
||||
: (Array.isArray(gradient.colors) ? gradient.colors.map((color, index, colors) => ({
|
||||
color,
|
||||
position: colors.length > 1 ? Math.round((index / (colors.length - 1)) * 100) : 0
|
||||
})) : []);
|
||||
const stops = sourceStops.slice(0, 12).map((stop) => ({
|
||||
color: sanitizeBackgroundColor(stop && stop.color),
|
||||
position: Math.max(0, Math.min(100, Number.isFinite(Number(stop && stop.position)) ? Number(stop.position) : 0))
|
||||
}));
|
||||
if (stops.length < 2) {
|
||||
return null;
|
||||
}
|
||||
const angle = Number(gradient.angle);
|
||||
return JSON.stringify({
|
||||
type: 'linear',
|
||||
stops,
|
||||
angle: Number.isFinite(angle) ? Math.max(0, Math.min(360, angle)) : 90
|
||||
});
|
||||
}
|
||||
|
||||
function normalizeTemplateRegionType(value) {
|
||||
const rawType = String(value || 'text').trim();
|
||||
return rawType || 'text';
|
||||
@@ -106,7 +139,7 @@ function ensureUniqueTemplateRegionNames(regions) {
|
||||
|
||||
async function fetchTemplateById(pool, id) {
|
||||
const [templates] = await pool.query(`
|
||||
SELECT st.id, st.name, st.canvas_size_id, st.background_image_path, st.background_color, st.created_at, st.modified_at,
|
||||
SELECT st.id, st.name, st.canvas_size_id, st.background_image_path, st.background_color, st.background_gradient, st.created_at, st.modified_at,
|
||||
cs.name AS canvas_size_name, cs.width AS canvas_size_width, cs.height AS canvas_size_height
|
||||
FROM c_templates st
|
||||
LEFT JOIN c_canvas_sizes cs ON cs.id = st.canvas_size_id
|
||||
@@ -123,7 +156,7 @@ async function fetchTemplateById(pool, id) {
|
||||
|
||||
async function fetchTemplatesData(pool) {
|
||||
const [templates] = await pool.query(`
|
||||
SELECT st.id, st.name, st.canvas_size_id, st.background_image_path, st.background_color, st.created_at, st.modified_at,
|
||||
SELECT st.id, st.name, st.canvas_size_id, st.background_image_path, st.background_color, st.background_gradient, st.created_at, st.modified_at,
|
||||
cs.name AS canvas_size_name, cs.width AS canvas_size_width, cs.height AS canvas_size_height
|
||||
FROM c_templates st
|
||||
LEFT JOIN c_canvas_sizes cs ON cs.id = st.canvas_size_id
|
||||
@@ -212,6 +245,10 @@ async function buildTemplatePayload(pool, req, existingTemplate) {
|
||||
const backgroundImage = filesByField.background_image;
|
||||
const removeBackgroundImage = Boolean(req.body.remove_background_image);
|
||||
const backgroundColor = sanitizeBackgroundColor(req.body.background_color || (existingTemplate && existingTemplate.background_color));
|
||||
const submittedBackgroundGradient = Object.prototype.hasOwnProperty.call(req.body, 'background_gradient')
|
||||
? req.body.background_gradient
|
||||
: existingTemplate && existingTemplate.background_gradient;
|
||||
const backgroundGradient = normalizeBackgroundGradient(submittedBackgroundGradient);
|
||||
const backgroundImagePath = backgroundImage
|
||||
? `/media/uploads/${backgroundImage.filename}`
|
||||
: removeBackgroundImage
|
||||
@@ -256,6 +293,7 @@ async function buildTemplatePayload(pool, req, existingTemplate) {
|
||||
canvasSizeHeight: canvasHeight,
|
||||
backgroundImagePath,
|
||||
backgroundColor,
|
||||
backgroundGradient,
|
||||
regions
|
||||
};
|
||||
}
|
||||
@@ -265,5 +303,6 @@ module.exports = {
|
||||
fetchTemplatesData,
|
||||
extractTemplateRegions,
|
||||
buildTemplatePayload,
|
||||
normalizeBackgroundGradient,
|
||||
parseJsonSafe
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user