| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import {isDarkTheme} from '../utils.ts';
-
- export async function initCaptcha() {
- const captchaEl = document.querySelector('#captcha');
- if (!captchaEl) return;
-
- const siteKey = captchaEl.getAttribute('data-sitekey');
- const isDark = isDarkTheme();
-
- const params = {
- sitekey: siteKey,
- theme: isDark ? 'dark' : 'light',
- };
-
- switch (captchaEl.getAttribute('data-captcha-type')) {
- case 'g-recaptcha': {
- if (window.grecaptcha) {
- window.grecaptcha.ready(() => {
- window.grecaptcha.render(captchaEl, params);
- });
- }
- break;
- }
- case 'cf-turnstile': {
- if (window.turnstile) {
- window.turnstile.render(captchaEl, params);
- }
- break;
- }
- case 'h-captcha': {
- if (window.hcaptcha) {
- window.hcaptcha.render(captchaEl, params);
- }
- break;
- }
- case 'm-captcha': {
- const mCaptcha = await import(/* webpackChunkName: "mcaptcha-vanilla-glue" */'@mcaptcha/vanilla-glue');
-
- // FIXME: the mCaptcha code is not right, it's a miracle that the wrong code could run
- // * the "vanilla-glue" has some problems with es6 module.
- // * the INPUT_NAME is a "const", it should not be changed.
- // * the "mCaptcha.default" is actually the "Widget".
-
- // @ts-expect-error TS2540: Cannot assign to 'INPUT_NAME' because it is a read-only property.
- mCaptcha.INPUT_NAME = 'm-captcha-response';
- const instanceURL = captchaEl.getAttribute('data-instance-url');
-
- new mCaptcha.default({
- siteKey: {
- instanceUrl: new URL(instanceURL),
- key: siteKey,
- },
- });
- break;
- }
- default:
- }
- }
|