diff --git a/website/client/src/components/achievements/contributor.vue b/website/client/src/components/achievements/contributor.vue
index 12be04c49d..270fddcad9 100644
--- a/website/client/src/components/achievements/contributor.vue
+++ b/website/client/src/components/achievements/contributor.vue
@@ -14,6 +14,7 @@
{{ $t('contribLink') }}
diff --git a/website/client/src/components/admin/admin-panel/user-support/subscriptionAndPerks.vue b/website/client/src/components/admin/admin-panel/user-support/subscriptionAndPerks.vue
index 5cd2c13e3b..9c2b6fac8f 100644
--- a/website/client/src/components/admin/admin-panel/user-support/subscriptionAndPerks.vue
+++ b/website/client/src/components/admin/admin-panel/user-support/subscriptionAndPerks.vue
@@ -491,6 +491,7 @@
v-if="hero.purchased.plan.paymentMethod === 'Google'"
class="btn btn-primary btn-sm"
target="_blank"
+ rel="noopener noreferrer"
:href="playOrdersUrl"
>
Play Console
@@ -499,6 +500,7 @@
v-else-if="hero.purchased.plan.paymentMethod === 'Paypal'"
class="btn btn-primary btn-sm"
target="_blank"
+ rel="noopener noreferrer"
:href="'https://www.paypal.com/billing/subscriptions/' + paymentDetails.customerId"
>
PayPal Dashboard
@@ -507,6 +509,7 @@
v-else-if="hero.purchased.plan.paymentMethod === 'Stripe'"
class="btn btn-primary btn-sm"
target="_blank"
+ rel="noopener noreferrer"
:href="'https://dashboard.stripe.com/customers/' + paymentDetails.customerId"
>
Stripe Dashboard
diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue
index d4fc27b261..041d3c50ce 100644
--- a/website/client/src/components/appFooter.vue
+++ b/website/client/src/components/appFooter.vue
@@ -11,6 +11,7 @@
{{ $t('communityInstagram') }}
@@ -190,6 +204,7 @@
class="social-circle mr-2"
href="https://bsky.app/profile/habitica.com"
target="_blank"
+ rel="noopener noreferrer"
>
Bluesky
@@ -208,6 +224,7 @@
class="social-circle mr-2"
href="https://www.facebook.com/Habitica/"
target="_blank"
+ rel="noopener noreferrer"
>
{{ $t('communityFacebook') }}
@@ -226,6 +244,7 @@
class="social-circle mr-2"
href="http://blog.habitrpg.com/"
target="_blank"
+ rel="noopener noreferrer"
>
{{ $t('tumblr') }}
@@ -266,12 +286,14 @@
{{ $t('privacy') }}
{{ $t('terms') }}
@@ -287,12 +309,14 @@
diff --git a/website/client/src/components/challenges/reportChallengeModal.vue b/website/client/src/components/challenges/reportChallengeModal.vue
index 990c354d79..758be66744 100644
--- a/website/client/src/components/challenges/reportChallengeModal.vue
+++ b/website/client/src/components/challenges/reportChallengeModal.vue
@@ -217,8 +217,8 @@ export default {
mixins: [notifications, userStateMixin],
data () {
const abuseFlagModalBody = {
- firstLinkStart: '
',
- secondLinkStart: '',
+ firstLinkStart: '',
+ secondLinkStart: '',
linkEnd: '',
};
diff --git a/website/client/src/components/chat/reportFlagModal.vue b/website/client/src/components/chat/reportFlagModal.vue
index aa06973d9a..bdf31b30bf 100644
--- a/website/client/src/components/chat/reportFlagModal.vue
+++ b/website/client/src/components/chat/reportFlagModal.vue
@@ -208,8 +208,8 @@ export default {
mixins: [notifications, userStateMixin],
data () {
const abuseFlagModalBody = {
- firstLinkStart: '
',
- secondLinkStart: '',
+ firstLinkStart: '',
+ secondLinkStart: '',
linkEnd: '',
};
diff --git a/website/client/src/components/groups/tavern.vue b/website/client/src/components/groups/tavern.vue
index a5b0b51209..6d79578912 100644
--- a/website/client/src/components/groups/tavern.vue
+++ b/website/client/src/components/groups/tavern.vue
@@ -335,6 +335,7 @@
v-once
href="https://habitica.fandom.com/wiki/Habitica_Wiki"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('wiki') }}
@@ -342,12 +343,14 @@
v-once
href="https://tools.habitica.com/"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('dataDisplayTool') }}
{{ $t('reportBug') }}
@@ -358,6 +361,7 @@
v-once
href="https://docs.google.com/forms/d/e/1FAIpQLScPhrwq_7P1C6PTrI3lbvTsvqGyTNnGzp1ugi1Ml0PFee_p5g/viewform?usp=sf_link"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('requestFeature') }}
diff --git a/website/client/src/components/hall/heroes.vue b/website/client/src/components/hall/heroes.vue
index 8812f9c313..e827154467 100644
--- a/website/client/src/components/hall/heroes.vue
+++ b/website/client/src/components/hall/heroes.vue
@@ -68,6 +68,7 @@
More details
@@ -296,6 +297,7 @@
diff --git a/website/client/src/components/header/menu.vue b/website/client/src/components/header/menu.vue
index d2fded1bbf..cc4dc8106e 100644
--- a/website/client/src/components/header/menu.vue
+++ b/website/client/src/components/header/menu.vue
@@ -310,6 +310,7 @@
{{ $t('reportBug') }}
@@ -317,6 +318,7 @@
{{ $t('askQuestion') }}
@@ -325,6 +327,7 @@
class="topbar-dropdown-item dropdown-item"
href="https://docs.google.com/forms/d/e/1FAIpQLScPhrwq_7P1C6PTrI3lbvTsvqGyTNnGzp1ugi1Ml0PFee_p5g/viewform?usp=sf_link"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('requestFeature') }}
@@ -377,6 +380,7 @@
v-if="hasPermission(user, 'news')"
class="topbar-dropdown-item dropdown-item"
target="_blank"
+ rel="noopener noreferrer"
href="https://panel.habitica.com"
>
{{ $t('newsroom') }}
diff --git a/website/client/src/components/members/reportMemberModal.vue b/website/client/src/components/members/reportMemberModal.vue
index bcb4f835df..994c9fb192 100644
--- a/website/client/src/components/members/reportMemberModal.vue
+++ b/website/client/src/components/members/reportMemberModal.vue
@@ -139,8 +139,8 @@ export default {
mixins: [notifications, userStateMixin],
data () {
const abuseFlagModalBody = {
- firstLinkStart: '
',
- secondLinkStart: '',
+ firstLinkStart: '',
+ secondLinkStart: '',
linkEnd: '',
};
diff --git a/website/client/src/components/settings/privacyModal.vue b/website/client/src/components/settings/privacyModal.vue
index 085252db00..9ab1b8db39 100644
--- a/website/client/src/components/settings/privacyModal.vue
+++ b/website/client/src/components/settings/privacyModal.vue
@@ -67,6 +67,7 @@
{{ $t('habiticaPrivacyPolicy') }}
diff --git a/website/client/src/components/shared/inventoryDrawer.vue b/website/client/src/components/shared/inventoryDrawer.vue
index f28abe7dc8..9b8928ff4d 100644
--- a/website/client/src/components/shared/inventoryDrawer.vue
+++ b/website/client/src/components/shared/inventoryDrawer.vue
@@ -33,6 +33,7 @@
class="drawer-help-text"
href="/static/faq#pet-foods"
target="_blank"
+ rel="noopener noreferrer"
>
{{ $t('petLikeToEat') }}
diff --git a/website/client/src/components/static/clearBrowserData.vue b/website/client/src/components/static/clearBrowserData.vue
index 01d1375c65..007c7fbc86 100644
--- a/website/client/src/components/static/clearBrowserData.vue
+++ b/website/client/src/components/static/clearBrowserData.vue
@@ -33,11 +33,11 @@ export default {
data () {
return {
localStorageTryFirst: {
- linkStart: '
',
+ linkStart: '',
linkEnd: '',
},
localStorageTryNext: {
- linkStart: '
',
+ linkStart: '',
linkEnd: '',
},
};
diff --git a/website/client/src/components/static/contact.vue b/website/client/src/components/static/contact.vue
index 6fc56d698d..1cdcc40f13 100644
--- a/website/client/src/components/static/contact.vue
+++ b/website/client/src/components/static/contact.vue
@@ -11,6 +11,7 @@
{{ $t('reportBug') }}
diff --git a/website/client/src/components/static/header.vue b/website/client/src/components/static/header.vue
index 413cf993cd..e01a067a58 100644
--- a/website/client/src/components/static/header.vue
+++ b/website/client/src/components/static/header.vue
@@ -47,6 +47,7 @@
class="nav-link"
href="https://habitica.wordpress.com/"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('companyBlog') }}
@@ -54,6 +55,7 @@
class="nav-link"
href="https://blog.habitrpg.com/"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('tumblr') }}
{{ $t('jsDisabledHeadingFull') }}
- {{ $t('jsDisabledLink') }}
+ {{ $t('jsDisabledLink') }}
diff --git a/website/client/src/components/static/overview.vue b/website/client/src/components/static/overview.vue
index 7363144ccf..9bc3ef1aae 100644
--- a/website/client/src/components/static/overview.vue
+++ b/website/client/src/components/static/overview.vue
@@ -16,6 +16,7 @@
{{ $t('askQuestion') }}
diff --git a/website/client/src/components/static/privacy.vue b/website/client/src/components/static/privacy.vue
index a576c5254a..27ce7353e7 100644
--- a/website/client/src/components/static/privacy.vue
+++ b/website/client/src/components/static/privacy.vue
@@ -100,9 +100,11 @@
We use Google Analytics, a service which uses cookies to collect and analyze data about the use of the Services and report on activities and trends. This service may also collect data about the use of other websites, apps, and online services. You can learn about Google's practices, and opt out of them, by downloading the
Google Analytics opt-out browser add-on.
Controlling Cookies
@@ -687,6 +689,7 @@
Opt - Out of the “ Sale” of Personal Information or Use of Such Information for “Targeted Advertising” or “Profiling”. We engage in common marketing and advertising practices to provide more relevant content and ads to users of our Site and Services. Certain of these practices may involve the “selling” of personal information, or the use of such information for “targeted advertising” or “profiling,” as those terms are defined in the Texas Data Privacy and Security Act (“TDPSA”) and the Nebraska Data Privacy Act. We do not sell personal information under the more commonly understood meaning of that word—i.e., providing personal information to third parties in exchange for money. Nor do we have actual knowledge of selling personal information of minors under the age of 16. To opt-out of the selling of your personal information, or use of that information for targeted advertising or profiling, please submit a request to
privacy@habitica.com. Note: We also treat Global Privacy Control browser signals as opt-out of sale/disclosure for targeted advertising or profiling requests. To opt-out via the Global Privacy Control, please follow the instructions available
here.
@@ -730,12 +733,15 @@
Right to lodge a complaint: Users that reside in the UK, EEA, or Switzerland have the right to seek information and assistance or lodge a complaint about our data collection and processing actions with the supervisory authority where they reside. Contact details for data protection authorities are available here. UK: https://ico.org.uk/ EEA: https://edpb.europa.eu/about-edpb/board/members_en Switzerland: https//www.edoeb.admin.ch/edoeb/en/home/deredoeb/kontakt.html.
diff --git a/website/client/src/components/static/terms.vue b/website/client/src/components/static/terms.vue
index e1e52206d4..2e38efc0e8 100644
--- a/website/client/src/components/static/terms.vue
+++ b/website/client/src/components/static/terms.vue
@@ -10,6 +10,7 @@
Our Service is provided by HabitRPG, Inc. ("HabitRPG"). By accepting these Terms of Service and our Privacy Policy located at: https://habitica.com/static/privacy (collectively, the "Agreement"), using our website, Habitica.com, or our other features or services (collectively, “the Services”), or otherwise manifesting your assent to the Agreement, you acknowledge that you have read, understood, and agree to be legally bound by the Agreement. If you do not agree to (or cannot comply with) the Agreement, you are not permitted to access or use the Service. By accepting or agreeing to this Agreement on behalf of a company or other legal entity, you represent and warrant that you have the authority to bind that company or other legal entity to the Agreement and, in such event, "you" and "your" will refer and apply to that company or other legal entity. You further represent and warrant that your assent to this Agreement constitutes an electronic signature as defined by the Electronic Signatures in Global and National Commerce Act (“E-Sign”) and the Uniform Electronic Transactions Act (“UETA”) and that you have formed, executed, entered into, and accepted the terms of and otherwise authenticated the Agreement and acknowledged and agreed that the Agreement is an electronic record for purposes of E- Sign, UETA, and the Uniform Computer Information Transactions Act and, as such, is completely valid, has legal effect, is enforceable, and is binding on, and non- refutable by, you and/or any entity on whose behalf you are acting.
@@ -164,6 +165,7 @@
FOR ANY CUSTOMER WHO PURCHASED PREMIUM IN APPLE INC.'s APP STORE ("APP STORE"), PLEASE CONTACT APPLE INC.'s SUPPORT TEAM: https://reportaproblem.apple.com. APPLE'S APP STORE DOES NOT ALLOW DEVELOPERS TO ISSUE REFUNDS FOR APP STORE PURCHASES MADE BY CUSTOMERS.
@@ -204,6 +206,7 @@
All disputes will be resolved before a neutral arbitrator selected jointly by the parties, whose decision will be final, except for a limited right of appeal under the FAA. The arbitration shall be commenced and conducted by JAMS pursuant to its then current Comprehensive Arbitration Rules and Procedures and in accordance with the Expedited Procedures in those rules, or, where appropriate, pursuant to JAMS' Streamlined Arbitration Rules and Procedures. All applicable JAMS rules and procedures are available at the JAMS website
www.jamsadr.com. Each party will be responsible for paying any JAMS filing, administrative, and arbitrator fees in accordance with JAMS rules. Judgment on the arbitrator's award may be entered in any court having jurisdiction. This clause shall not preclude parties from seeking provisional remedies in aid of arbitration from a court of appropriate jurisdiction. The arbitration may be conducted in person, through the submission of documents, by phone, or online. If conducted in person, the arbitration shall take place in the United States county where you reside. The parties may litigate in court to compel arbitration, to stay a proceeding pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator. The parties shall cooperate in good faith in the voluntary and informal exchange of all non-privileged documents and other information (including electronically stored information) relevant to the Dispute immediately after commencement of the arbitration. As set forth below, nothing in this Agreement will prevent us from seeking injunctive relief in any court of competent jurisdiction as necessary to protect our proprietary interests.
diff --git a/website/client/src/components/tasks/taskModal.vue b/website/client/src/components/tasks/taskModal.vue
index 2aa41da203..58a4d2a1d6 100644
--- a/website/client/src/components/tasks/taskModal.vue
+++ b/website/client/src/components/tasks/taskModal.vue
@@ -1353,8 +1353,8 @@ export default {
],
calendarHighlights: { dates: [new Date()] },
spiLinkData: {
- firstLink: '',
- secondLink: '',
+ firstLink: '',
+ secondLink: '',
linkClose: '',
},
};
diff --git a/website/client/src/components/world-boss/worldBossInfoModal.vue b/website/client/src/components/world-boss/worldBossInfoModal.vue
index b3206aebf5..6a06f9da90 100644
--- a/website/client/src/components/world-boss/worldBossInfoModal.vue
+++ b/website/client/src/components/world-boss/worldBossInfoModal.vue
@@ -47,6 +47,7 @@
class="footer-link"
href="https://habitica.fandom.com/wiki/World_Bosses"
target="_blank"
+ rel="noopener noreferrer"
>{{ $t('worldBossLink') }}
diff --git a/website/client/src/pages/settings/components/currentPasswordInput.vue b/website/client/src/pages/settings/components/currentPasswordInput.vue
index 8fa2654c2b..d451935b83 100644
--- a/website/client/src/pages/settings/components/currentPasswordInput.vue
+++ b/website/client/src/pages/settings/components/currentPasswordInput.vue
@@ -19,6 +19,7 @@