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);
});
});