mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-28 23:42:58 -04:00
52 lines
1.3 KiB
Vue
52 lines
1.3 KiB
Vue
<template>
|
|
<div style="height: 73px" @click="render"></div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import dark from '../plugins/dark.ts';
|
|
|
|
interface Turnstile {
|
|
render(
|
|
element: Element,
|
|
config: { sitekey: string, theme: 'dark' | 'light', language: string, callback: (token: string) => void },
|
|
): void;
|
|
}
|
|
|
|
declare global {
|
|
interface Window {
|
|
turnstile?: Turnstile;
|
|
}
|
|
}
|
|
|
|
export default dark.extend({
|
|
props: {
|
|
value: {},
|
|
},
|
|
async mounted() {
|
|
await this.$loadScript(
|
|
'turnstile',
|
|
`https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit&language=${this.$config.locale}`,
|
|
);
|
|
setTimeout(() => {
|
|
this.render();
|
|
}, 500);
|
|
},
|
|
methods: {
|
|
render() {
|
|
if (!window.turnstile || this.$el.innerHTML.length) {
|
|
return;
|
|
}
|
|
window.turnstile.render(this.$el, {
|
|
sitekey: process.env.TURNSTILE_SITEKEY!,
|
|
theme: this.detectDark() ? 'dark' : 'light',
|
|
language: this.$config.locale,
|
|
callback: this.solved,
|
|
});
|
|
},
|
|
solved(token: string) {
|
|
this.$emit('input', token);
|
|
},
|
|
},
|
|
});
|
|
</script>
|