MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary Tag: Manual revert |
Captcha testing Tag: Reverted |
||
Line 107: | Line 107: | ||
} | } | ||
} | } | ||
mw.loader.using('mediawiki.util', function () { | |||
$(document).on('focus', '.ext-discussiontools-init-replyLink', function () { | |||
setTimeout(function () { | |||
if (!$('#custom-hcaptcha').length) { | |||
const hCaptchaDiv = $('<div>', { | |||
id: 'custom-hcaptcha', | |||
class: 'h-captcha', | |||
'data-sitekey': 'YOUR_SITE_KEY' // ← Replace this | |||
}); | |||
$('.ext-discussiontools-ui-replyWidget-captcha').html(hCaptchaDiv); | |||
const script = document.createElement('script'); | |||
script.src = 'https://js.hcaptcha.com/1/api.js'; | |||
script.async = true; | |||
script.defer = true; | |||
document.body.appendChild(script); | |||
} | |||
}, 500); | |||
}); | |||
}); |
Revision as of 18:00, 30 June 2025
/* Any JavaScript here will be loaded for all users on every page load. */ // stolen from Lajos Mészáros on this post https://stackoverflow.com/questions/13358292/capture-tap-event-with-pure-javascript const onClickOrTap = (element, handler) => { let touchMoveHappened = false; element.addEventListener('touchstart', () => { // on mobile this is the 1st event that happens touchMoveHappened = false; }); element.addEventListener('touchmove', () => { // on mobile this might get triggered in which case the // click or tap will get cancelled // we'll keep a track of it touchMoveHappened = true; }); element.addEventListener('touchend', (e) => { // happens after touchstart, but before click // if touch happened then we'll exit if (touchMoveHappened) { return; } // calling preventDefault() will make sure the // subsequent click will not get triggered e.preventDefault(); // at this point we are ready to call our original handler handler(e); }); element.addEventListener('click', (e) => { // this will only get triggered on desktop // because we call preventDefault for the "touchend" event handler(e); }); } /* Create Page */ const createPageTargetIdDataSetString = "[data-create-page-target-id]"; if (document.querySelector(createPageTargetIdDataSetString)) { /** * @type {HTMLElement[]} */ let itemsCreateInputPageGrid = []; let itemsCreatePageGrid = []; const createPageTargetId = "createPageTargetId"; const createPageInputHiddenClass = "hidden"; const createPageInputActiveClass = "pageInputActive"; /** * @param {HTMLElement} element */ function getGridTarget(element) { const targetId = element.dataset[createPageTargetId]; return document.getElementById(targetId); } /** * @this {HTMLDivElement} */ function toggleGridTarget(element, targetElement) { for (let index = 0; index < itemsCreateInputPageGrid.length; index += 1) { const target = itemsCreateInputPageGrid[index]; target.classList.add(createPageInputHiddenClass); if (target === targetElement) { target.classList.remove(createPageInputHiddenClass); } const clickedElement = itemsCreatePageGrid[index]; clickedElement.classList.remove(createPageInputActiveClass); if (clickedElement === element) { clickedElement.classList.add(createPageInputActiveClass); } } } /** * @param {HTMLElement} element * @param {HTMLElement} targetElement */ function addToggleGridTargetEvent(element, targetElement) { itemsCreatePageGrid.push(element); itemsCreateInputPageGrid.push(targetElement); onClickOrTap(element, (e) => { toggleGridTarget(element, targetElement) }); //element.addEventListener("click", () => // toggleGridTarget(element, targetElement) //); } const createPageTargetElements = document.querySelectorAll( createPageTargetIdDataSetString ); for (let index = 0; index < createPageTargetElements.length; index += 1) { const element = createPageTargetElements[index]; const targetElement = getGridTarget(element); if (targetElement) { addToggleGridTargetEvent(element, targetElement); } } } mw.loader.using('mediawiki.util', function () { $(document).on('focus', '.ext-discussiontools-init-replyLink', function () { setTimeout(function () { if (!$('#custom-hcaptcha').length) { const hCaptchaDiv = $('<div>', { id: 'custom-hcaptcha', class: 'h-captcha', 'data-sitekey': 'YOUR_SITE_KEY' // ← Replace this }); $('.ext-discussiontools-ui-replyWidget-captcha').html(hCaptchaDiv); const script = document.createElement('script'); script.src = 'https://js.hcaptcha.com/1/api.js'; script.async = true; script.defer = true; document.body.appendChild(script); } }, 500); }); });