From 14ed7647aa5733b02d8e41a4f3ba3c1d4e5ba1a5 Mon Sep 17 00:00:00 2001 From: Peter Kappelt Date: Mon, 17 Apr 2023 20:24:29 +0200 Subject: [PATCH] Newsfeed: Convert HTML entities to characters --- CHANGELOG.md | 1 + modules/default/newsfeed/newsfeed.js | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16e47bbd93..9c23e40c8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ _This release is scheduled to be released on 2023-07-01._ - Use node v19 in github workflow (replacing v14) - Refactor formatTime into common util function for default modules - Refactor some calendar methods into own class and added tests for them +- Properly convert newsfeed titles ### Fixed diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 320c5a5dc8..ddc661b02f 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -215,6 +215,11 @@ Module.register("newsfeed", { return true; }, this); } + + // HTML entity conversion: dummy textarea for conversion and regex for safe matching + const entity_regex = /&(?:#x[a-f0-9]+|#[0-9]+|[a-z0-9]+);?/gi; + const entity_converter = document.createElement("textarea"); + newsItems.forEach((item) => { //Remove selected tags from the beginning of rss feed items (title or description) if (this.config.removeStartTags === "title" || this.config.removeStartTags === "both") { @@ -251,6 +256,12 @@ Module.register("newsfeed", { } } } + + //Convert HTML entities to characters + item.title = item.title.replace(entity_regex, (t) => { + entity_converter.innerHTML = t; + return entity_converter.textContent; + }); }); // get updated news items and broadcast them