Jump to content

MediaWiki:Common.js: Difference between revisions

From Consumer_Action_Taskforce
m testin3
m revert once more
Tags: Mobile edit Mobile web edit
Line 85: Line 85:
     itemsCreateInputPageGrid.push(targetElement);
     itemsCreateInputPageGrid.push(targetElement);
      
      
     onClickOrTap(element,targetElement,toggleGridTarget(element,target));
     //onClickOrTap(element,targetElement,toggleGridTarget(element,target));
      
      
     //element.addEventListener("click", () =>
     element.addEventListener("click", () =>
    //  toggleGridTarget(element, targetElement)
        toggleGridTarget(element, targetElement)
     //);
     );
   }
   }



Revision as of 16:52, 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
    handler(element, target);
  }
  )
  element.addEventListener('click', () => {
    // this will only get triggered on desktop
    // because we call preventDefault for the "touchend" event
    handler(element, target);
  })
}
/* 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,target));
    
     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);
    }
  }
}