diff --git a/ui/src/components/application/ApplicationForm.vue b/ui/src/components/application/ApplicationForm.vue index 927d870..5ad43b9 100644 --- a/ui/src/components/application/ApplicationForm.vue +++ b/ui/src/components/application/ApplicationForm.vue @@ -13,7 +13,7 @@ import Input from '@/components/ui/input/Input.vue'; import Textarea from '@/components/ui/textarea/Textarea.vue'; import { toTypedSchema } from '@vee-validate/zod'; import { Form } from 'vee-validate'; -import { nextTick, onMounted, ref } from 'vue'; +import { nextTick, onMounted, ref, watch } from 'vue'; import * as z from 'zod'; import DateInput from '../form/DateInput.vue'; import { ApplicationData } from '@shared/types/application'; @@ -90,15 +90,25 @@ const CoCString = ref(); async function onDialogToggle(state: boolean) { showCoC.value = state; - - if (state) { - await nextTick(); - if (CoCbox.value && CoCString.value) { - CoCbox.value.innerHTML = CoCString.value; - } - } } +function enforceExternalLinks() { + if (!CoCbox.value) return; + + const links = CoCbox.value.querySelectorAll("a"); + links.forEach(a => { + a.setAttribute("target", "_blank"); + a.setAttribute("rel", "noopener noreferrer"); + }); +} + +watch(() => showCoC.value, async () => { + if (showCoC) { + await nextTick(); // wait for v-html to update + enforceExternalLinks(); + } +}); +