MediaWiki:Common.js: Difference between revisions
Appearance
m remove redundand js |
m super special considerations for iPad...(I hope) |
||
| Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
/ | function onClickOrTap(element, target, 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', () => { | |||
// 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 | |||
toggleGridTarget(element, targetElement); | |||
} | |||
) | |||
element.addEventListener('click', () => { | |||
// this will only get triggered on desktop | |||
// because we call preventDefault for the "touchend" event | |||
toggleGridTarget(element, targetElement); | |||
}) | |||
} | |||
/* Create Page */ | /* Create Page */ | ||
const createPageTargetIdDataSetString = "[data-create-page-target-id]"; | const createPageTargetIdDataSetString = "[data-create-page-target-id]"; | ||
| Line 58: | Line 84: | ||
itemsCreatePageGrid.push(element); | itemsCreatePageGrid.push(element); | ||
itemsCreateInputPageGrid.push(targetElement); | itemsCreateInputPageGrid.push(targetElement); | ||
element.addEventListener("click", () => | onClickOrTap(element,targetElement,toggleGridTarget(element, targetElement)); | ||
); | // element.addEventListener("click", () => | ||
// toggleGridTarget(element, targetElement) | |||
// ); | |||
} | } | ||
Revision as of 16:27, 4 February 2025
/* Any JavaScript here will be loaded for all users on every page load. */
function onClickOrTap(element, target, 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', () => {
// 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
toggleGridTarget(element, targetElement);
}
)
element.addEventListener('click', () => {
// this will only get triggered on desktop
// because we call preventDefault for the "touchend" event
toggleGridTarget(element, targetElement);
})
}
/* 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,targetElement,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);
}
}
}