From b77deb28b47f144e603f1e115179a0fb3c506c8a Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Wed, 8 Mar 2023 12:01:50 -0500 Subject: [PATCH 01/60] initial commit --- website/client/src/components/appFooter.vue | 5 +++++ website/client/src/components/externalLinkModal.vue | 0 2 files changed, 5 insertions(+) create mode 100644 website/client/src/components/externalLinkModal.vue diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index 371abef107..e5e878fb65 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -365,6 +365,11 @@ class="btn btn-secondary" @click="makeAdmin()" >Make Admin + + External Link Modal + diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue new file mode 100644 index 0000000000..e69de29bb2 From d0941810a793e26324c5603297729217414fcc1b Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Wed, 8 Mar 2023 12:52:22 -0500 Subject: [PATCH 02/60] trying to make a modal --- website/client/src/components/appFooter.vue | 4 + .../src/components/externalLinkModal.vue | 128 ++++++++++++++++++ 2 files changed, 132 insertions(+) diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index e5e878fb65..26ad8aca60 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -367,6 +367,7 @@ >Make Admin External Link Modal @@ -914,6 +915,9 @@ export default { donate () { this.$root.$emit('bv::show::modal', 'buy-gems', { alreadyTracked: true }); }, + externalLinkModal () { + this.$root.$emit('bv::show::modal', 'external-link-modal'); + }, }, }; diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index e69de29bb2..48f4570c59 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -0,0 +1,128 @@ + + + + + From 65f12ac9ea1c85a1e22f18aef9b11e4390807a92 Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Wed, 8 Mar 2023 12:55:58 -0500 Subject: [PATCH 03/60] adding console log messages --- website/client/src/components/appFooter.vue | 1 + website/client/src/components/externalLinkModal.vue | 1 + 2 files changed, 2 insertions(+) diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index 26ad8aca60..e63f93d1d4 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -917,6 +917,7 @@ export default { }, externalLinkModal () { this.$root.$emit('bv::show::modal', 'external-link-modal'); + console.log('Hi!'); }, }, }; diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index 48f4570c59..e0aea90077 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -122,6 +122,7 @@ export default { methods: { close () { this.$root.$emit('bv::hide::modal', 'external-link-modal'); + console.log('Bye!'); } }, }; From 3f3e0e2ae8c857a267dcdb264883fea87389f7f7 Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Wed, 8 Mar 2023 15:17:15 -0500 Subject: [PATCH 04/60] modal essentially complete but for scripts --- website/client/src/app.vue | 3 + .../src/components/externalLinkModal.vue | 93 ++++++++++++------- website/common/locales/en/generic.json | 4 +- 3 files changed, 65 insertions(+), 35 deletions(-) diff --git a/website/client/src/app.vue b/website/client/src/app.vue index ede7eb8c9c..95cb2ba425 100644 --- a/website/client/src/app.vue +++ b/website/client/src/app.vue @@ -35,6 +35,7 @@ + @@ -175,6 +176,7 @@ import amazonPaymentsModal from '@/components/payments/amazonModal'; import paymentsSuccessModal from '@/components/payments/successModal'; import subCancelModalConfirm from '@/components/payments/cancelModalConfirm'; import subCanceledModal from '@/components/payments/canceledModal'; +import externalLinkModal from '@/components/externalLinkModal.vue'; import spellsMixin from '@/mixins/spells'; import { @@ -210,6 +212,7 @@ export default { subCanceledModal, bugReportModal, bugReportSuccessModal, + externalLinkModal, }, mixins: [notifications, spellsMixin], data () { diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index e0aea90077..1ff7ca2c54 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -22,21 +22,26 @@ v-html="icons.exclamation" > -

You are about to leave Habitica.com

+

+ {{ $t('leaveHabitica') }} +

-
- Habitica is not responsible for the content of any linked - website that is not owned or operated by HabitRPG. - Please note that these websites' practices may differ - from Habitica’s community guidelines. + + +
+ +
@@ -44,7 +49,32 @@ diff --git a/website/common/locales/en/generic.json b/website/common/locales/en/generic.json index 67b27d5633..d360bed360 100644 --- a/website/common/locales/en/generic.json +++ b/website/common/locales/en/generic.json @@ -212,5 +212,7 @@ "contactForm": "Contact the Moderation Team", "loadEarlierMessages": "Load Earlier Messages", "askQuestion": "Ask a Question", - "emptyReportBugMessage": "Report Bug Message missing" + "emptyReportBugMessage": "Report Bug Message missing", + "leaveHabitica": "You are about to leave Habitica.com", + "leaveHabiticaText": "Habitica is not responsible for the content of any linked website that is not owned or operated by HabitRPG.
Please note that these websites' practices may differ from Habitica’s community guidelines." } From a210ab57b08251d5aff14e6572b82b09b02af363 Mon Sep 17 00:00:00 2001 From: SabreCat Date: Fri, 10 Mar 2023 13:33:51 -0600 Subject: [PATCH 05/60] WIP(external-link): hacky attempt number one --- website/client/src/directives/markdown.js | 2 ++ website/client/src/router/index.js | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/website/client/src/directives/markdown.js b/website/client/src/directives/markdown.js index 99237ee1c8..f4da7164f2 100644 --- a/website/client/src/directives/markdown.js +++ b/website/client/src/directives/markdown.js @@ -8,6 +8,8 @@ export default function markdown (el, { value, oldValue }) { } else { el.innerHTML = ''; } + // This is a hack, but it's one idea for how we might do things + el.innerHTML = el.innerHTML.replace('href="h', 'href="/external?link=h'); el.classList.add('markdown'); } diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js index 09727c789e..4ea5092447 100644 --- a/website/client/src/router/index.js +++ b/website/client/src/router/index.js @@ -377,6 +377,8 @@ const router = new VueRouter({ ], }, + { name: 'externalLink', path: '/external' }, + // Only used to handle some redirects // See router.beforeEach { path: '/redirect/:redirect', name: 'redirect' }, @@ -393,6 +395,11 @@ router.beforeEach(async (to, from, next) => { if (to.name === 'redirect') return handleRedirect(to, from, next); + if (to.name === 'externalLink') { + setTimeout(() => router.app.$emit('bv::show::modal', 'external-link-modal'), 500); + return null; + } + if (!isUserLoggedIn && routeRequiresLogin) { // Redirect to the login page unless the user is trying to reach the // root of the website, in which case show the home page. From e39b3bdd35aa9a31637213bfb3c51e389a221269 Mon Sep 17 00:00:00 2001 From: negue Date: Sat, 11 Mar 2023 00:40:05 +0100 Subject: [PATCH 06/60] open the modal by click override --- website/client/src/directives/markdown.js | 18 ++++++++++++++++-- website/client/src/main.js | 8 +++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/website/client/src/directives/markdown.js b/website/client/src/directives/markdown.js index f4da7164f2..1d0abcf8f6 100644 --- a/website/client/src/directives/markdown.js +++ b/website/client/src/directives/markdown.js @@ -8,8 +8,22 @@ export default function markdown (el, { value, oldValue }) { } else { el.innerHTML = ''; } - // This is a hack, but it's one idea for how we might do things - el.innerHTML = el.innerHTML.replace('href="h', 'href="/external?link=h'); + + const allLinks = el.getElementsByTagName('a'); + + for (let i = 0; i < allLinks.length; i++) { + const link = allLinks[i]; + + // todo middleclick or ctrl+click to open it in a new tab + // todo? should a normal click leave the current page or also open it in a new tab? + // ... hopefully this wont create memory leaks + link.addEventListener('click', e => { + e.stopPropagation(); + e.preventDefault(); + + window.externalLink(link.href); + }); + } el.classList.add('markdown'); } diff --git a/website/client/src/main.js b/website/client/src/main.js index f3587c5c12..d52f73f0ee 100644 --- a/website/client/src/main.js +++ b/website/client/src/main.js @@ -33,9 +33,15 @@ setUpLogging(); setupAnalytics(); // just create queues for analytics, no scripts loaded at this time const store = getStore(); -export default new Vue({ +const vueInstance = new Vue({ el: '#app', router, store, render: h => h(AppComponent), }); + +export default vueInstance; + +window.externalLink = url => { + vueInstance.$root.$emit('bv::show::modal', 'external-link-modal', url); +}; From 83f5c92ff199e509265cc988932ad5ccc4e69ecd Mon Sep 17 00:00:00 2001 From: SabreCat Date: Mon, 13 Mar 2023 18:36:14 -0500 Subject: [PATCH 07/60] fix(lint): loop no likey ++ --- website/client/src/directives/markdown.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/client/src/directives/markdown.js b/website/client/src/directives/markdown.js index 1d0abcf8f6..2c210f5e74 100644 --- a/website/client/src/directives/markdown.js +++ b/website/client/src/directives/markdown.js @@ -11,7 +11,7 @@ export default function markdown (el, { value, oldValue }) { const allLinks = el.getElementsByTagName('a'); - for (let i = 0; i < allLinks.length; i++) { + for (let i = 0; i < allLinks.length; i += 1) { const link = allLinks[i]; // todo middleclick or ctrl+click to open it in a new tab From 971b124b057307e927b4e07f348481cf8c324794 Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Wed, 15 Mar 2023 11:21:25 -0400 Subject: [PATCH 08/60] apply correct opacity to close icon --- website/client/src/components/externalLinkModal.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index 1ff7ca2c54..e6988229a7 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -68,9 +68,11 @@ & svg { fill: $yellow-1; + opacity: 0.75; } & :hover { fill: $yellow-1; + opacity: 1; } } } From 8cd706fd95e69c61019f419efc0615ecdb07a528 Mon Sep 17 00:00:00 2001 From: SabreCat Date: Fri, 17 Mar 2023 16:37:16 -0500 Subject: [PATCH 09/60] feat(links): route to selected link --- website/client/src/components/appFooter.vue | 10 --------- .../src/components/externalLinkModal.vue | 22 +++++++++++++++++-- website/client/src/directives/markdown.js | 6 ++--- website/client/src/main.js | 2 +- website/client/src/router/index.js | 7 ------ 5 files changed, 24 insertions(+), 23 deletions(-) diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index 186470c6e2..69ec6b0e2f 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -366,12 +366,6 @@ class="btn btn-secondary" @click="makeAdmin()" >Make Admin - - External Link Modal -
@@ -903,10 +897,6 @@ export default { donate () { this.$root.$emit('bv::show::modal', 'buy-gems', { alreadyTracked: true }); }, - externalLinkModal () { - this.$root.$emit('bv::show::modal', 'external-link-modal'); - console.log('Hi!'); - }, }, }; diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index 1ff7ca2c54..4d332f8d12 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -39,7 +39,7 @@ @@ -51,9 +51,14 @@ @import '~@/assets/scss/colors.scss'; #external-link-modal { + &.modal { + display: flex !important; + } + .modal-md { max-width: 448px; min-width: 330px; + margin: auto; .modal-close { position: absolute; @@ -142,12 +147,25 @@ export default { close: closeIcon, exclamation: exclamationIcon, }), + url: '', }; }, + mounted () { + this.$root.$on('habitica:external-link', url => { + this.url = url; + this.$root.$emit('bv::show::modal', 'external-link-modal'); + }); + }, + beforeDestroy () { + this.$root.$off('habitica:external-link'); + }, methods: { close () { this.$root.$emit('bv::hide::modal', 'external-link-modal'); - console.log('Bye!'); + }, + proceed () { + window.open(this.url, '_blank').focus(); + this.close(); }, }, }; diff --git a/website/client/src/directives/markdown.js b/website/client/src/directives/markdown.js index 2c210f5e74..7756a6221b 100644 --- a/website/client/src/directives/markdown.js +++ b/website/client/src/directives/markdown.js @@ -14,10 +14,10 @@ export default function markdown (el, { value, oldValue }) { for (let i = 0; i < allLinks.length; i += 1) { const link = allLinks[i]; - // todo middleclick or ctrl+click to open it in a new tab - // todo? should a normal click leave the current page or also open it in a new tab? - // ... hopefully this wont create memory leaks link.addEventListener('click', e => { + if (e.ctrlKey) { + return; + } e.stopPropagation(); e.preventDefault(); diff --git a/website/client/src/main.js b/website/client/src/main.js index d52f73f0ee..7a9e39a2f3 100644 --- a/website/client/src/main.js +++ b/website/client/src/main.js @@ -43,5 +43,5 @@ const vueInstance = new Vue({ export default vueInstance; window.externalLink = url => { - vueInstance.$root.$emit('bv::show::modal', 'external-link-modal', url); + vueInstance.$root.$emit('habitica:external-link', url); }; diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js index 4ea5092447..09727c789e 100644 --- a/website/client/src/router/index.js +++ b/website/client/src/router/index.js @@ -377,8 +377,6 @@ const router = new VueRouter({ ], }, - { name: 'externalLink', path: '/external' }, - // Only used to handle some redirects // See router.beforeEach { path: '/redirect/:redirect', name: 'redirect' }, @@ -395,11 +393,6 @@ router.beforeEach(async (to, from, next) => { if (to.name === 'redirect') return handleRedirect(to, from, next); - if (to.name === 'externalLink') { - setTimeout(() => router.app.$emit('bv::show::modal', 'external-link-modal'), 500); - return null; - } - if (!isUserLoggedIn && routeRequiresLogin) { // Redirect to the login page unless the user is trying to reach the // root of the website, in which case show the home page. From c726208d6e609393fe0439fa48700b53ffca240a Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Tue, 21 Mar 2023 13:00:15 -0400 Subject: [PATCH 10/60] add cancel option --- .../client/src/components/externalLinkModal.vue | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index e6988229a7..47fe67af41 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -43,6 +43,13 @@ > {{ $t('continue') }} + @@ -129,6 +136,15 @@ border-top: none; padding-top: 0; } + .close-link { + color: $purple-300; + line-height: 1.71; + font-size: 0.875rem; + cursor: pointer; + padding-top:16px; + padding-bottom: 8px; + text-align: center; + } } } From b264e539f4d0fe629cd6235632a533d1c277367d Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Tue, 21 Mar 2023 14:49:43 -0400 Subject: [PATCH 11/60] add crtl/cmd instructions to skip modal --- .../src/components/externalLinkModal.vue | 31 ++++++++++++++----- website/common/locales/en/generic.json | 3 +- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index 47fe67af41..2d64dfd536 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -33,6 +33,11 @@ v-html="$t('leaveHabiticaText')" > +
+ {{ $t('skipExternalLinkModal') }} +
@@ -64,13 +69,13 @@ .modal-close { position: absolute; - right: 16px; - top: 16px; + right: 12px; + top: 12px; cursor: pointer; .icon-close { - width: 18px; - height: 18px; + width: 16px; + height: 16px; vertical-align: middle; & svg { @@ -90,7 +95,7 @@ .modal-header { justify-content: center; - padding-top: 24px; + padding-top: 32px; padding-bottom: 0px; background: $yellow-100; border-top-right-radius: 8px; @@ -113,7 +118,7 @@ h2 { color: $yellow-1; - // font-size: 1.25rem; + margin-bottom: 16px; } } @@ -125,6 +130,16 @@ font-size: 0.875rem; line-height: 1.71; text-align: center; + margin-top:24px; + } + + .skip-modal { + color: $gray-100; + font-size: 0.75rem; + text-align: center; + line-height: 1.33; + margin-top: 16px; + // padding-bottom: 24px; } } @@ -141,8 +156,8 @@ line-height: 1.71; font-size: 0.875rem; cursor: pointer; - padding-top:16px; - padding-bottom: 8px; + margin-top:16px; + margin-bottom: 8px; text-align: center; } } diff --git a/website/common/locales/en/generic.json b/website/common/locales/en/generic.json index d360bed360..26a51eaf7b 100644 --- a/website/common/locales/en/generic.json +++ b/website/common/locales/en/generic.json @@ -214,5 +214,6 @@ "askQuestion": "Ask a Question", "emptyReportBugMessage": "Report Bug Message missing", "leaveHabitica": "You are about to leave Habitica.com", - "leaveHabiticaText": "Habitica is not responsible for the content of any linked website that is not owned or operated by HabitRPG.
Please note that these websites' practices may differ from Habitica’s community guidelines." + "leaveHabiticaText": "Habitica is not responsible for the content of any linked website that is not owned or operated by HabitRPG.
Please note that these websites' practices may differ from Habitica’s community guidelines.", + "skipExternalLinkModal": "Hold CTRL (Windows) or Command (Mac) when clicking a link to skip this modal." } From 786b1ec67035ed2f33409d80fbfa71411255c252 Mon Sep 17 00:00:00 2001 From: CuriousMagpie Date: Tue, 21 Mar 2023 17:07:40 -0400 Subject: [PATCH 12/60] add underline to cancel link --- website/client/src/components/externalLinkModal.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/website/client/src/components/externalLinkModal.vue b/website/client/src/components/externalLinkModal.vue index 2d64dfd536..e662595d23 100644 --- a/website/client/src/components/externalLinkModal.vue +++ b/website/client/src/components/externalLinkModal.vue @@ -159,6 +159,10 @@ margin-top:16px; margin-bottom: 8px; text-align: center; + + &:hover { + text-decoration: underline; + } } } } From ca1200b689ac87a123339d037512a7e90f7534af Mon Sep 17 00:00:00 2001 From: SabreCat Date: Wed, 22 Mar 2023 18:06:53 -0500 Subject: [PATCH 13/60] feat(links): new external link implementation --- .../components/challenges/challengeDetail.vue | 7 +++- .../components/challenges/findChallenges.vue | 7 +++- .../components/challenges/groupChallenges.vue | 7 ++++ .../components/challenges/myChallenges.vue | 7 +++- website/client/src/components/groups/chat.vue | 6 +++ .../client/src/components/tasks/column.vue | 7 +++- website/client/src/directives/markdown.js | 16 -------- website/client/src/mixins/externalLinks.js | 38 +++++++++++++++++++ 8 files changed, 75 insertions(+), 20 deletions(-) create mode 100644 website/client/src/mixins/externalLinks.js diff --git a/website/client/src/components/challenges/challengeDetail.vue b/website/client/src/components/challenges/challengeDetail.vue index bacd28c6fc..b86a2c28de 100644 --- a/website/client/src/components/challenges/challengeDetail.vue +++ b/website/client/src/components/challenges/challengeDetail.vue @@ -322,6 +322,7 @@ import omit from 'lodash/omit'; import { v4 as uuid } from 'uuid'; import { userStateMixin } from '../../mixins/userState'; +import externalLinks from '../../mixins/externalLinks'; import memberSearchDropdown from '@/components/members/memberSearchDropdown'; import closeChallengeModal from './closeChallengeModal'; import Column from '../tasks/column'; @@ -358,7 +359,7 @@ export default { userLink, groupLink, }, - mixins: [challengeMemberSearchMixin, userStateMixin], + mixins: [challengeMemberSearchMixin, externalLinks, userStateMixin], props: ['challengeId'], data () { return { @@ -414,6 +415,10 @@ export default { mounted () { if (!this.searchId) this.searchId = this.challengeId; if (!this.challenge._id) this.loadChallenge(); + this.handleExternalLinks(); + }, + updated () { + this.handleExternalLinks(); }, async beforeRouteUpdate (to, from, next) { this.searchId = to.params.challengeId; diff --git a/website/client/src/components/challenges/findChallenges.vue b/website/client/src/components/challenges/findChallenges.vue index e8b3d08907..6093b405f8 100644 --- a/website/client/src/components/challenges/findChallenges.vue +++ b/website/client/src/components/challenges/findChallenges.vue @@ -120,6 +120,7 @@ import { mapState } from '@/libs/store'; import Sidebar from './sidebar'; import ChallengeItem from './challengeItem'; import challengeModal from './challengeModal'; +import externalLinks from '@/mixins/externalLinks'; import challengeUtilities from '@/mixins/challengeUtilities'; import positiveIcon from '@/assets/svg/positive.svg'; @@ -131,7 +132,7 @@ export default { challengeModal, MugenScroll, }, - mixins: [challengeUtilities], + mixins: [challengeUtilities, externalLinks], data () { return { loading: true, @@ -177,6 +178,10 @@ export default { section: this.$t('challenges'), }); this.loadChallenges(); + this.handleExternalLinks(); + }, + updated () { + this.handleExternalLinks(); }, methods: { updateSearch (eventData) { diff --git a/website/client/src/components/challenges/groupChallenges.vue b/website/client/src/components/challenges/groupChallenges.vue index fc370700c8..7afa34e7f7 100644 --- a/website/client/src/components/challenges/groupChallenges.vue +++ b/website/client/src/components/challenges/groupChallenges.vue @@ -81,6 +81,8 @@ import challengeModal from './challengeModal'; import { mapState } from '@/libs/store'; import markdownDirective from '@/directives/markdown'; +import externalLinks from '../../mixins/externalLinks'; + import challengeItem from './challengeItem'; import challengeIcon from '@/assets/svg/challenge.svg'; @@ -92,6 +94,7 @@ export default { directives: { markdown: markdownDirective, }, + mixins: [externalLinks], props: ['group'], data () { return { @@ -118,6 +121,10 @@ export default { }, mounted () { this.loadChallenges(); + this.handleExternalLinks(); + }, + updated () { + this.handleExternalLinks(); }, methods: { async loadChallenges () { diff --git a/website/client/src/components/challenges/myChallenges.vue b/website/client/src/components/challenges/myChallenges.vue index 8f31154ca3..c37c3d2416 100644 --- a/website/client/src/components/challenges/myChallenges.vue +++ b/website/client/src/components/challenges/myChallenges.vue @@ -145,6 +145,7 @@ import Sidebar from './sidebar'; import ChallengeItem from './challengeItem'; import challengeModal from './challengeModal'; import challengeUtilities from '@/mixins/challengeUtilities'; +import externalLinks from '@/mixins/externalLinks'; import challengeIcon from '@/assets/svg/challenge.svg'; import positiveIcon from '@/assets/svg/positive.svg'; @@ -156,7 +157,7 @@ export default { challengeModal, MugenScroll, }, - mixins: [challengeUtilities], + mixins: [challengeUtilities, externalLinks], data () { return { icons: Object.freeze({ @@ -203,6 +204,10 @@ export default { section: this.$t('challenges'), }); this.loadChallenges(); + this.handleExternalLinks(); + }, + updated () { + this.handleExternalLinks(); }, methods: { updateSearch (eventData) { diff --git a/website/client/src/components/groups/chat.vue b/website/client/src/components/groups/chat.vue index e2c341b525..69038946b8 100644 --- a/website/client/src/components/groups/chat.vue +++ b/website/client/src/components/groups/chat.vue @@ -87,6 +87,8 @@ diff --git a/website/client/src/components/groups/group.vue b/website/client/src/components/groups/group.vue index 85dbf296af..a238ef5664 100644 --- a/website/client/src/components/groups/group.vue +++ b/website/client/src/components/groups/group.vue @@ -542,7 +542,8 @@ export default { await this.$store.dispatch('guilds:leave', data); if (this.isParty) { - this.$router.push({ name: 'tasks' }); + await this.$router.push({ name: 'tasks' }); + window.location.reload(true); } }, upgradeGroup () { diff --git a/website/client/src/components/groups/lookingForParty.vue b/website/client/src/components/groups/lookingForParty.vue new file mode 100644 index 0000000000..eda06f5759 --- /dev/null +++ b/website/client/src/components/groups/lookingForParty.vue @@ -0,0 +1,351 @@ + + + + + diff --git a/website/client/src/components/groups/rightSidebar.vue b/website/client/src/components/groups/rightSidebar.vue index f5eafdcaf6..cab95cea2e 100644 --- a/website/client/src/components/groups/rightSidebar.vue +++ b/website/client/src/components/groups/rightSidebar.vue @@ -2,7 +2,7 @@