MediaWiki:Common.js: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1,293: Line 1,293:
     // Bind ONCE, on the chooser itself (robust to nested elements)
     // Bind ONCE, on the chooser itself (robust to nested elements)
     if (!$chooser.data("swBound")) {
     if (!$chooser.data("swBound")) {
       $chooser.on("click", function (e) {
       function chooserFire(ev, where) {
         var a = e.target && e.target.closest ? e.target.closest("a[id]") : null;
         var a =
         if (!a) return; // clicked outside a link in the chooser
          ev.target && ev.target.closest ? ev.target.closest("a[id]") : null;
         if (!a) return;
         var id = a.getAttribute("id");
         var id = a.getAttribute("id");
         if (id !== "print-with-border" && id !== "print-no-border") return;
         if (id !== "print-with-border" && id !== "print-no-border") return;
        e.preventDefault(); // stop navigation
         try {
         try {
           console.log("[swprint] chooser click ->", id);
           console.log("[swprint] chooser " + where + " ->", id);
         } catch (e2) {}
         } catch (e2) {}
        ev.preventDefault && ev.preventDefault();
        ev.stopImmediatePropagation && ev.stopImmediatePropagation();
        ev.stopPropagation && ev.stopPropagation();
         swHandlePrintChoice(id, jQuery(a));
         swHandlePrintChoice(id, jQuery(a));
       });
        return false;
       }
      $chooser.on(
        "pointerdown",
        chooserFire.bind(null, /*ev*/ null, "pointerdown")
      ); // jQuery will pass ev
      $chooser.on("touchstart", chooserFire.bind(null, null, "touchstart"));
      $chooser.on("mousedown", chooserFire.bind(null, null, "mousedown"));
      $chooser.on("click", chooserFire.bind(null, null, "click"));
 
       $chooser.data("swBound", true);
       $chooser.data("swBound", true);
       try {
       try {
Line 1,783: Line 1,794:


         // bind multiple phases/types to dodge libraries that swallow 'click'
         // bind multiple phases/types to dodge libraries that swallow 'click'
        // add these lines among the other addEventListener calls:
        el.addEventListener(
          "pointerdown",
          function (e) {
            fire(e, "pointerdown(capture)");
          },
          true
        );
        el.addEventListener(
          "touchstart",
          function (e) {
            fire(e, "touchstart(capture)");
          },
          true
        );
        el.addEventListener(
          "mousedown",
          function (e) {
            fire(e, "mousedown(capture)");
          },
          true
        );
         el.addEventListener(
         el.addEventListener(
           "pointerup",
           "pointerup",
Line 1,841: Line 1,874:
     }
     }
   }
   }
  (function () {
    if (window.__swprintEarlyCatcher) return;
    window.__swprintEarlyCatcher = true;
    function routeEarly(ev, where) {
      var t = ev.target;
      if (!t) return;
      var a = t.closest
        ? t.closest("a#print-with-border, a#print-no-border")
        : null;
      if (!a) return;
      try {
        console.log("[swprint] EARLY-CAPTURE " + where + " ->", a.id);
      } catch (e) {}
      ev.preventDefault && ev.preventDefault();
      ev.stopImmediatePropagation && ev.stopImmediatePropagation();
      ev.stopPropagation && ev.stopPropagation();
      swHandlePrintChoice(a.id, (window.jQuery && jQuery(a)) || null);
      return false;
    }
    // Catch before anything else can mutate DOM or swallow events
    window.addEventListener(
      "pointerdown",
      function (e) {
        routeEarly(e, "window:pointerdown");
      },
      true
    );
    window.addEventListener(
      "touchstart",
      function (e) {
        routeEarly(e, "window:touchstart");
      },
      true
    );
    window.addEventListener(
      "mousedown",
      function (e) {
        routeEarly(e, "window:mousedown");
      },
      true
    );
  })();


   (function () {
   (function () {

Navigation menu