//
// SPDX-License-Identifier: AGPL-3.0
-export const getTagValue = (document: Document | Element, tagName: string, defaultValue: string) => {
+import { customDecodeURI } from "./url";
+
+export const getTagValue = (document: Document | Element, tagName: string, defaultValue: string, skipDecoding: boolean = false) => {
const [el] = Array.from(document.getElementsByTagName(tagName));
- return decodeURI(el ? el.innerHTML : defaultValue);
+ const URI = el ? htmlDecode(el.innerHTML) : defaultValue;
+
+ if (!skipDecoding) {
+ try {
+ return customDecodeURI(URI);
+ } catch(e) {}
+ }
+
+ return URI;
+};
+
+const htmlDecode = (input: string) => {
+ const out = input.split(' ').map((i) => {
+ const doc = new DOMParser().parseFromString(i, "text/html");
+ if (doc.documentElement !== null) {
+ return doc.documentElement.textContent || '';
+ }
+ return '';
+ });
+ return out.join(' ');
};