diff --git a/AGENTS.md b/AGENTS.md index 9f2d329a58..28af8bee96 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -179,6 +179,7 @@ src/ - ESLint enforced: `neostandard` + `pluginVue.configs['flat/vue2-recommended']` + `pluginRegexp` + `@vue/eslint-config-typescript` - `.editorconfig` rules: 2 spaces, LF line endings, UTF-8, trim trailing whitespace, max line 100 (code) - camelCase for variables/methods, PascalCase for components +- Any link opening a new tab (`target="_blank"`) **must** also set `rel="noopener noreferrer"` — applies to ``, ``/`` with `:href`, and any HTML strings rendered via `v-safe-html` (e.g. `src/util/link-external-urls.ts`) - Use `consola` for logging, not `console.log` (configured in `src/setupConsola.ts` — warn in prod, verbose in dev) - Type imports: `import type { ... }` for types only (`verbatimModuleSyntax: true`) - `satisfies` keyword for store module type checking diff --git a/src/components/common/Login.vue b/src/components/common/Login.vue index 31e81e8fba..83cad6d37c 100644 --- a/src/components/common/Login.vue +++ b/src/components/common/Login.vue @@ -84,6 +84,7 @@ class="custom-transform-class text-none" :href="$globals.DOCS_AUTH_LOST_PASSWORD" target="_blank" + rel="noopener noreferrer" > {{ $t('app.general.btn.forgot_password') }} @@ -93,6 +94,7 @@ class="custom-transform-class text-none" :href="$globals.DOCS_AUTH" target="_blank" + rel="noopener noreferrer" > {{ $t('app.general.btn.auth_unsure') }} diff --git a/src/components/layout/AppNotificationMenu.vue b/src/components/layout/AppNotificationMenu.vue index a1544e5f20..3ce4b3b5b0 100644 --- a/src/components/layout/AppNotificationMenu.vue +++ b/src/components/layout/AppNotificationMenu.vue @@ -109,6 +109,7 @@ x-small :href="n.to" target="_blank" + rel="noopener noreferrer" class="mr-1" @click="menu = false" /> diff --git a/src/components/settings/VersionInformationDialog.vue b/src/components/settings/VersionInformationDialog.vue index 40cc229bec..4db93c05be 100644 --- a/src/components/settings/VersionInformationDialog.vue +++ b/src/components/settings/VersionInformationDialog.vue @@ -48,6 +48,7 @@ class="secondary--text" :href="`${baseUrl}/commits/${component.branch}`" target="_blank" + rel="noopener noreferrer" > {{ commit.author }} @@ -71,6 +72,7 @@ color="secondary" :href="`${baseUrl}/commit/${commit.sha}`" target="_blank" + rel="noopener noreferrer" > {{ commit.sha.substring(0, 7) }} diff --git a/src/components/settings/VersionSettings.vue b/src/components/settings/VersionSettings.vue index e341ac575f..913cb72a00 100644 --- a/src/components/settings/VersionSettings.vue +++ b/src/components/settings/VersionSettings.vue @@ -68,6 +68,7 @@ v-bind="attrs" :href="component.remote_url" target="_blank" + rel="noopener noreferrer" v-on="on" > diff --git a/src/components/widgets/camera/CameraItem.vue b/src/components/widgets/camera/CameraItem.vue index 8bab1df6c8..987a01a463 100644 --- a/src/components/widgets/camera/CameraItem.vue +++ b/src/components/widgets/camera/CameraItem.vue @@ -103,6 +103,7 @@ $openInNew diff --git a/src/components/widgets/filesystem/FileEditorDialog.vue b/src/components/widgets/filesystem/FileEditorDialog.vue index 4fb83be992..7bb721ac86 100644 --- a/src/components/widgets/filesystem/FileEditorDialog.vue +++ b/src/components/widgets/filesystem/FileEditorDialog.vue @@ -76,6 +76,7 @@ v-if="!printerPrinting && configMap?.link" :href="configMap.link" target="_blank" + rel="noopener noreferrer" >