Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
No edit summary
Tag: Reverted
No edit summary
Line 5: Line 5:
   $(function () {
   $(function () {
     const carousels = document.querySelectorAll('.card-carousel');
     const carousels = document.querySelectorAll('.card-carousel');
    const links = carousel.querySelectorAll('a');
    // Solution: Prevent the click if a drag occurred
    links.forEach(link => {
      link.addEventListener('click', (e) => {
        // If we were dragging, prevent the link from being clicked
        if (isDragging) {
          e.preventDefault();
        }
      });
    });
   


     carousels.forEach((carousel) => {
     carousels.forEach((carousel) => {
       let isDragging = false;
       carousel.addEventListener('mousedown', (e) => {
       let startX;
      isDragging = true;
       let scrollStart;
      carousel.classList.add('dragging');
       let movedEnough = false;
       startX = e.pageX - carousel.offsetLeft;
       scrollLeft = carousel.scrollLeft;
       // Prevent default behavior to avoid triggering link during drag start
      e.preventDefault();
    });


    carousel.addEventListener("pointerdown", function (e) {
    document.addEventListener('mouseup', () => {
      // Skip custom drag if user is clicking on the scrollbar
      isDragging = false;
      const isScrollbarClick = (
      carousel.classList.remove('dragging');
        e.offsetY > carousel.clientHeight ||
    });
        e.offsetY < 0
 
      );
    carousel.addEventListener('mousemove', (e) => {
      if (isScrollbarClick) return;
      if (!isDragging) return;
      e.preventDefault();
      const x = e.pageX - carousel.offsetLeft;
      const walk = (x - startX); // The distance moved
      carousel.scrollLeft = scrollLeft - walk;
    });
 
      //  let isDragging = false;
    //  let startX;
    //  let scrollStart;
    //  let movedEnough = false;
 
    //  carousel.addEventListener("pointerdown", function (e) {
    //    // Skip custom drag if user is clicking on the scrollbar
    //    const isScrollbarClick = (
    //      e.offsetY > carousel.clientHeight ||
    //      e.offsetY < 0
    //    );
    //    if (isScrollbarClick) return;
      
      
      isDragging = true;
    //    isDragging = true;
      movedEnough = false;
    //    movedEnough = false;
      carousel.classList.add("dragging");
    //    carousel.classList.add("dragging");
      startX = e.pageX;
    //    startX = e.pageX;
      scrollStart = carousel.scrollLeft;
    //    scrollStart = carousel.scrollLeft;
      carousel.setPointerCapture(e.pointerId);
    //    carousel.setPointerCapture(e.pointerId);
      e.preventDefault();
    //    e.preventDefault();
    });
    //  });


      carousel.addEventListener("pointermove", function (e) {
    //  carousel.addEventListener("pointermove", function (e) {
        if (!isDragging) return;
    //    if (!isDragging) return;
        const x = e.pageX;
    //    const x = e.pageX;
        const walk = (x - startX) * 0.75;
    //    const walk = (x - startX) * 0.75;
        if (Math.abs(walk) > 5) movedEnough = true;
    //    if (Math.abs(walk) > 5) movedEnough = true;
        carousel.scrollLeft = scrollStart - walk;
    //    carousel.scrollLeft = scrollStart - walk;
        e.preventDefault();
    //    e.preventDefault();
      });
    //  });


      const endDrag = () => {
    //  const endDrag = () => {
        isDragging = false;
    //    isDragging = false;
        carousel.classList.remove("dragging");
    //    carousel.classList.remove("dragging");
      };
    //  };


      carousel.addEventListener("pointerup", endDrag);
    //  carousel.addEventListener("pointerup", endDrag);
      carousel.addEventListener("pointerleave", endDrag);
    //  carousel.addEventListener("pointerleave", endDrag);


      // Block clicks if drag occurred
    //  // Block clicks if drag occurred
      carousel.addEventListener("click", function (e) {
    //  carousel.addEventListener("click", function (e) {
        if (movedEnough) {
    //    if (movedEnough) {
          e.preventDefault();
    //      e.preventDefault();
          e.stopImmediatePropagation();
    //      e.stopImmediatePropagation();
        }
    //    }
      }, true); // useCapture = true
    //  }, true); // useCapture = true
     });
     });
   });
   });
});
});

Revision as of 19:12, 28 March 2026

/* Any JavaScript here will be loaded for all users on every page load. */


mw.loader.using('jquery', function () {
  $(function () {
    const carousels = document.querySelectorAll('.card-carousel');
    const links = carousel.querySelectorAll('a');

    // Solution: Prevent the click if a drag occurred
    links.forEach(link => {
      link.addEventListener('click', (e) => {
        // If we were dragging, prevent the link from being clicked
        if (isDragging) {
          e.preventDefault();
        }
      });
    });

    

    carousels.forEach((carousel) => {
      carousel.addEventListener('mousedown', (e) => {
      isDragging = true;
      carousel.classList.add('dragging');
      startX = e.pageX - carousel.offsetLeft;
      scrollLeft = carousel.scrollLeft;
      // Prevent default behavior to avoid triggering link during drag start
      e.preventDefault(); 
    });

    document.addEventListener('mouseup', () => {
      isDragging = false;
      carousel.classList.remove('dragging');
    });

    carousel.addEventListener('mousemove', (e) => {
      if (!isDragging) return;
      e.preventDefault();
      const x = e.pageX - carousel.offsetLeft;
      const walk = (x - startX); // The distance moved
      carousel.scrollLeft = scrollLeft - walk;
    });

      //   let isDragging = false;
    //   let startX;
    //   let scrollStart;
    //   let movedEnough = false;

    //  carousel.addEventListener("pointerdown", function (e) {
    //    // Skip custom drag if user is clicking on the scrollbar
    //    const isScrollbarClick = (
    //      e.offsetY > carousel.clientHeight ||
    //      e.offsetY < 0
    //    );
    //    if (isScrollbarClick) return;
     
    //    isDragging = true;
    //    movedEnough = false;
    //    carousel.classList.add("dragging");
    //    startX = e.pageX;
    //    scrollStart = carousel.scrollLeft;
    //    carousel.setPointerCapture(e.pointerId);
    //    e.preventDefault();
    //  });

    //   carousel.addEventListener("pointermove", function (e) {
    //     if (!isDragging) return;
    //     const x = e.pageX;
    //     const walk = (x - startX) * 0.75;
    //     if (Math.abs(walk) > 5) movedEnough = true;
    //     carousel.scrollLeft = scrollStart - walk;
    //     e.preventDefault();
    //   });

    //   const endDrag = () => {
    //     isDragging = false;
    //     carousel.classList.remove("dragging");
    //   };

    //   carousel.addEventListener("pointerup", endDrag);
    //   carousel.addEventListener("pointerleave", endDrag);

    //   // Block clicks if drag occurred
    //   carousel.addEventListener("click", function (e) {
    //     if (movedEnough) {
    //       e.preventDefault();
    //       e.stopImmediatePropagation();
    //     }
    //   }, true); // useCapture = true
    });
  });
});