function getRssFeedById(feedId) { var feeds = Array.isArray(initialData && initialData.rssFeeds) ? initialData.rssFeeds : []; var normalizedId = Number(feedId || 0); return feeds.find(function (feed) { return Number(feed.id) === normalizedId; }) || null; } function getRssFeedItem(feedId, itemNumber) { var feed = getRssFeedById(feedId); var items = feed && Array.isArray(feed.items) ? feed.items : []; var parsedItemNumber = Math.max(1, Number(itemNumber || 1)); var index = Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber - 1 : 0; return items[index] || null; } function resolveRssPath(value, path) { var current = value; if (!path) { return current; } String(path).split('.').forEach(function (segment) { if (current === undefined || current === null) { current = ''; return; } current = current[segment]; }); return current === undefined || current === null ? '' : current; } function substituteRssVariables(html, item) { var source = String(html || ''); return source.replace(/\{\{\s*([a-zA-Z0-9_]+)(?:\.([a-zA-Z0-9_.]+))?\s*\}\}/g, function (_match, tokenName, tokenPath) { if (!item || typeof item !== 'object') { return ''; } var key = tokenName === 'item' && tokenPath ? tokenPath : tokenName; return escapeHtml(resolveRssPath(item, key || '')); }); } function renderRssRegion(region, regionContent) { var content = regionContent && regionContent.value !== undefined ? regionContent.value : ''; var feedId = regionContent && regionContent.feed_id !== undefined ? regionContent.feed_id : null; var itemNumber = regionContent && regionContent.item_number !== undefined ? regionContent.item_number : 1; var fontFamily = sanitizeFontFamily(regionContent.font_family || region.fontFamily); var fontSize = sanitizeFontSize(regionContent.font_size || region.fontSize); var fontColor = sanitizeTextColor(regionContent.font_color || region.fontColor); var item = getRssFeedItem(feedId, itemNumber); var body = item ? substituteRssVariables(content, item) : ''; if (!body && item) { var summaryParts = []; if (item.title) { summaryParts.push('

' + escapeHtml(item.title) + '

'); } if (item.description) { summaryParts.push('
' + sanitizeRichText(item.description) + '
'); } body = summaryParts.join(''); } var contentStyle = 'width:' + region.pixelWidth + 'px;height:' + region.pixelHeight + 'px;transform:scale(' + region.canvasScale + ');transform-origin:top left;' + (fontFamily ? 'font-family:' + escapeHtml(fontFamily) + ';' : '') + 'font-size:' + fontSize + 'px;color:' + escapeHtml(fontColor) + ';'; var renderedBody = body ? renderEditorJsContent(body) : '
RSS item
'; return '
' + renderedBody + '
'; }