From 08c2d491ecac83268ad20f05769ef7e1335089e2 Mon Sep 17 00:00:00 2001 From: paragonnov Date: Sat, 24 Feb 2024 02:04:04 +0900 Subject: [PATCH] when adding custom head html, ensure there are no duplicate meta tags (#7510) * fix: remove old element to prevent duplication remove old element before append new meta tag to prevent duplication * fix: unexpected * Update * format * unexpected * unexpected * add changeset * improve * add changeset --------- Co-authored-by: gradio-pr-bot --- .changeset/ninety-bars-thank.md | 6 ++++++ .vscode/settings.json | 5 ++++- js/app/src/Index.svelte | 35 +++++++++++++++++++++++++++------ 3 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 .changeset/ninety-bars-thank.md diff --git a/.changeset/ninety-bars-thank.md b/.changeset/ninety-bars-thank.md new file mode 100644 index 0000000000..ff4b859d93 --- /dev/null +++ b/.changeset/ninety-bars-thank.md @@ -0,0 +1,6 @@ +--- +"@gradio/app": patch +"gradio": patch +--- + +fix:when adding custom head html, ensure there are no duplicate meta tags diff --git a/.vscode/settings.json b/.vscode/settings.json index 73595981ae..e6ea6a28fb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,5 +19,8 @@ "eslint.options": { "overrideConfigFile": "./.config/eslint.config.js" }, - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "i18n-ally.localesPaths": [ + "js/app/src/lang" + ] } diff --git a/js/app/src/Index.svelte b/js/app/src/Index.svelte index 6aae52a817..b0f917390a 100644 --- a/js/app/src/Index.svelte +++ b/js/app/src/Index.svelte @@ -166,12 +166,35 @@ if (parsed_head_html) { for (let head_element of parsed_head_html) { - let newElement = document.createElement(head_element.tagName); - Array.from(head_element.attributes).forEach((attr) => { - newElement.setAttribute(attr.name, attr.value); - }); - newElement.textContent = head_element.textContent; - document.head.appendChild(newElement); + for (let head_element of parsed_head_html) { + let newElement = document.createElement(head_element.tagName); + Array.from(head_element.attributes).forEach((attr) => { + newElement.setAttribute(attr.name, attr.value); + }); + newElement.textContent = head_element.textContent; + + if ( + newElement.tagName == "META" && + newElement.getAttribute("property") + ) { + const domMetaList = Array.from( + document.head.getElementsByTagName("meta") ?? [] + ); + const matched = domMetaList.find((el) => { + return ( + el.getAttribute("property") == + newElement.getAttribute("property") && + !el.isEqualNode(newElement) + ); + }); + if (matched) { + document.head.replaceChild(newElement, matched); + continue; + } + } + + document.head.appendChild(newElement); + } } } }