From 0ee0db7ea5d0bd8c24a5d0cbcccdba67844b898b Mon Sep 17 00:00:00 2001 From: Agate Date: Wed, 6 May 2020 00:23:42 +0200 Subject: [PATCH 1/2] Fix #1107: Fix HTML not including instance name in some situations --- api/funkwhale_api/common/middleware.py | 10 ++++++++++ api/tests/common/test_middleware.py | 11 +++++++---- changes/changelog.d/1107.enhancement | 1 + front/src/App.vue | 4 ++-- 4 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 changes/changelog.d/1107.enhancement diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index 1143255e3..de06fd1d4 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -39,6 +39,9 @@ def serve_spa(request): settings.FUNKWHALE_SPA_REWRITE_MANIFEST_URL or federation_utils.full_url(urls.reverse("api:v1:instance:spa-manifest")) ) + title = preferences.get("instance__name") + if title: + head = replace_title(head, title) head = replace_manifest_url(head, new_url) if not preferences.get("common__api_authentication_required"): @@ -82,6 +85,7 @@ def serve_spa(request): MANIFEST_LINK_REGEX = re.compile(r"<link [^>]*rel=(?:'|\")?manifest(?:'|\")?[^>]*>") +TITLE_REGEX = re.compile(r"<title>.*") def replace_manifest_url(head, new_url): @@ -90,6 +94,12 @@ def replace_manifest_url(head, new_url): return head +def replace_title(head, new_title): + replacement = "{}".format(html.escape(new_title)) + head = TITLE_REGEX.sub(replacement, head) + return head + + def get_spa_html(spa_url): return get_spa_file(spa_url, "index.html") diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 40ff279cb..8f04ba318 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -1,6 +1,6 @@ +import html import time import pytest - from django.http import HttpResponse from django.urls import reverse @@ -55,10 +55,12 @@ def test_should_fallback(path, expected, mocker): def test_serve_spa_from_cache(mocker, settings, preferences, no_api_auth): - + preferences["instance__name"] = 'Best Funkwhale "pod"' request = mocker.Mock(path="/") get_spa_html = mocker.patch.object( - middleware, "get_spa_html", return_value="" + middleware, + "get_spa_html", + return_value="Funkwhale", ) mocker.patch.object( middleware, @@ -84,7 +86,8 @@ def test_serve_spa_from_cache(mocker, settings, preferences, no_api_auth): assert response.status_code == 200 expected = [ - "", + "" + "{}".format(html.escape(preferences["instance__name"])), '', '', '', diff --git a/changes/changelog.d/1107.enhancement b/changes/changelog.d/1107.enhancement new file mode 100644 index 000000000..2b4ff8863 --- /dev/null +++ b/changes/changelog.d/1107.enhancement @@ -0,0 +1 @@ +Fix HTML not including instance name in some situations (#1107) diff --git a/front/src/App.vue b/front/src/App.vue index f85d8e920..0cfbb5bdc 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -66,6 +66,7 @@ export default { instanceUrl: null, showShortcutsModal: false, showSetInstanceModal: false, + initialTitle: document.title, } }, async created () { @@ -147,7 +148,6 @@ export default { }, mounted () { let self = this - // slight hack to allow use to have internal links in <translate> tags // while preserving router behaviour document.documentElement.addEventListener('click', function (event) { @@ -281,7 +281,7 @@ export default { if (this.$store.state.ui.pageTitle) { parts.push(this.$store.state.ui.pageTitle) } - parts.push(this.$store.state.instance.settings.instance.name.value || 'Funkwhale') + parts.push(this.initialTitle || 'Funkwhale') document.title = parts.join(' – ') }, From be251ac37eb8a3e9bcaa757733724f4b3f863ee5 Mon Sep 17 00:00:00 2001 From: Agate <me@agate.blue> Date: Wed, 6 May 2020 00:26:23 +0200 Subject: [PATCH 2/2] Fixed espacing issue in instance name in footer --- front/src/components/Footer.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/components/Footer.vue b/front/src/components/Footer.vue index 3b2442831..6e9f76167 100644 --- a/front/src/components/Footer.vue +++ b/front/src/components/Footer.vue @@ -4,10 +4,10 @@ <div class="ui stackable equal height stackable grid"> <section class="four wide column"> <h4 v-if="podName" class="ui header ellipsis"> - <translate translate-context="Footer/About/Title" :translate-params="{instanceName: podName}" >About %{instanceName}</translate> + <span v-translate="{instanceName: podName}" translate-context="Footer/About/Title">About %{instanceName}</span> </h4> <h4 v-else class="ui header ellipsis"> - <translate translate-context="Footer/About/Title" :translate-params="{instanceUrl: instanceHostname}" >About %{instanceUrl}</translate> + <span v-translate="{instanceUrl: instanceHostname}" translate-context="Footer/About/Title">About %{instanceUrl}</span> </h4> <div class="ui link list"> <router-link class="item" to="/about">