Vorlage:DialogButton und MediaWiki:Common.js: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
KKeine Bearbeitungszusammenfassung
 
KKeine Bearbeitungszusammenfassung
 
Zeile 1: Zeile 1:
{{DialogButton|Titel=Dialog 1|Inhalt=dialog 1|Link=öffne dialog 1}}
/* Das folgende JavaScript wird für alle Benutzer geladen. */
{{DialogButton|Titel=Dialog 2|Inhalt=dialog 2|Link=öffne dialog 2}}
(function(){
  console.log("initializing zum-toggle");
  const run = function() {
    document.querySelectorAll('[data-zum-toggle-target]').forEach(function (elem) {
      var target = elem.dataset.zumToggleTarget;
      if(!target){ return; }
      elem.addEventListener('click', function (ev) {
        var value = elem.dataset.zumToggleValue !== 'true';
        document.querySelectorAll(target).forEach(function (tElem) {
          tElem.dataset.zumToggleVisible = value;
        });
        elem.dataset.zumToggleValue = String(value);
      });
    });
  };


  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", run);
  } else {
    run();
  }
})();


<onlyinclude><includeonly>{{#widget:Dialog-begin|id=dialog_{{#vardefineecho:dialogbutton|{{#expr:{{#var:dialogbutton}}+1}}}}}}<!--
/*
--><div class="popup-header">{{{Titel|}}}{{#widget:Dialog-header-close}}</div><div class="popup-body">{{{Inhalt|}}}</div>{{#widget:Dialog-end}}<!--
* Dialog Javascript for
--><span class="zum-dialog-opener" data-dialog-opener-id="dialog_{{#var:dialogbutton}}">{{{Link|öffnen}}}</span>{{#varexists:dialogjsloaded
* Vorlage:DialogButton
|
*
| {{#widget:Dialog-js}}
*
}}{{#vardefine:dialogjsloaded}}</includeonly></onlyinclude>
*/
<noinclude>
 
<templatedata>
(function(){
{
  /* add dialog opener event handler */
"params": {
  const run = ()=>{
"Titel": {
    document.querySelectorAll('[data-dialog-opener-id]').forEach((elem) => {
"type": "content"
      if(elem.dataset.dialogOpenerAdded === 'true') { return; }
},
 
"Inhalt": {
 
"type": "content"
      const dialogId = elem.dataset.dialogOpenerId;
},
      const dialog = document.getElementById(dialogId);
"Link": {
 
"type": "content"
      elem.dataset.dialogOpenerAdded = 'true';
}
      elem.addEventListener('click', (ev) => {
}
        dialog.showModal();
        ev.stopPropagation();
        return false;
      });
    });
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();
(function(){
    /* close on click outside of dialog content */
    const run = ()=>{
    document.querySelectorAll('dialog.zum-dialog').forEach((elem) => {
      if(elem.dataset.dialogCloseonBackdropAdded === 'true') { return; }
      elem.dataset.dialogCloseonBackdropAdded = 'true';
 
      elem.addEventListener('mousedown', (ev) => {
        if(ev.target !== elem){return true;}
        const rect = ev.target.getBoundingClientRect();
        if(ev.x >= rect.left
        && ev.x <= rect.right
        && ev.y >= rect.top
        && ev.y <= rect.bottom) { return true; }
 
        ev.target.close();
        ev.stopPropagation();
        return false;
      });
    });
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();
(function(){
  /*cleanup empty p tags, at beginning and end of dialogs created by Vorlage:DialogButton */
  const run = () => {
    document.querySelectorAll('dialog.zum-dialog').forEach((elem) => {
      if(elem.dataset.dialogCleanedup === 'true') { return; }
      elem.dataset.dialogCleanedup = 'true';
      [elem.firstElementChild, elem.lastElementChild]
        .filter((e) => e && e.tagName === 'P' && e.textContent === '')
        .forEach((e) => elem.removeChild(e))
    });
    document.querySelectorAll('[data-dialog-opener-id]').forEach((elem) => {
      if(elem.dataset.dialogCleanedup === 'true') { return; }
      elem.dataset.dialogCleanedup = 'true';
      [elem.firstElementChild, elem.lastElementChild]
        .filter((e) => e && e.tagName === 'P' && e.textContent === '')
        .forEach((e) => elem.removeChild(e))
    });
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();
(function(){
  /* overrule mediawiki default popup-close event handler */
  const run = () => {
    document.querySelectorAll('dialog.zum-dialog')
    .forEach((elem) => elem.querySelectorAll('button.popup-close')
      .forEach((btn) => btn.addEventListener('click', (ev) => {
        ev.stopImmediatePropagation();
      })));
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
}
</templatedata>
})();
</noinclude>

Version vom 18. Februar 2024, 13:43 Uhr

/* Das folgende JavaScript wird für alle Benutzer geladen. */
(function(){
  console.log("initializing zum-toggle");
  const run = function() {
    document.querySelectorAll('[data-zum-toggle-target]').forEach(function (elem) {
      var target = elem.dataset.zumToggleTarget;
      if(!target){ return; }
      elem.addEventListener('click', function (ev) {
        var value = elem.dataset.zumToggleValue !== 'true';
        document.querySelectorAll(target).forEach(function (tElem) {
          tElem.dataset.zumToggleVisible = value;
        });
        elem.dataset.zumToggleValue = String(value);
      });
    });
  };

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", run);
  } else {
    run();
  }
})();

/*
 * Dialog Javascript for
 * Vorlage:DialogButton
 *
 *
 */

(function(){
  /* add dialog opener event handler */
  const run = ()=>{
    document.querySelectorAll('[data-dialog-opener-id]').forEach((elem) => {
      if(elem.dataset.dialogOpenerAdded === 'true') { return; }


      const dialogId = elem.dataset.dialogOpenerId;
      const dialog = document.getElementById(dialogId);

      elem.dataset.dialogOpenerAdded = 'true';
      elem.addEventListener('click', (ev) => {
        dialog.showModal();
        ev.stopPropagation();
        return false;
      });
    });
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();
(function(){
    /* close on click outside of dialog content */
    const run = ()=>{
    document.querySelectorAll('dialog.zum-dialog').forEach((elem) => {
      if(elem.dataset.dialogCloseonBackdropAdded === 'true') { return; }
      elem.dataset.dialogCloseonBackdropAdded = 'true';

      elem.addEventListener('mousedown', (ev) => {
        if(ev.target !== elem){return true;}
        const rect = ev.target.getBoundingClientRect();
        if(ev.x >= rect.left 
        && ev.x <= rect.right 
        && ev.y >= rect.top 
        && ev.y <= rect.bottom) { return true; }

        ev.target.close();
        ev.stopPropagation();
        return false;
      });
    });
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();
(function(){
  /*cleanup empty p tags, at beginning and end of dialogs created by Vorlage:DialogButton */
  const run = () => {
    document.querySelectorAll('dialog.zum-dialog').forEach((elem) => {
      if(elem.dataset.dialogCleanedup === 'true') { return; }
      elem.dataset.dialogCleanedup = 'true';
      [elem.firstElementChild, elem.lastElementChild]
        .filter((e) => e && e.tagName === 'P' && e.textContent === '')
        .forEach((e) => elem.removeChild(e))
    });
    document.querySelectorAll('[data-dialog-opener-id]').forEach((elem) => {
      if(elem.dataset.dialogCleanedup === 'true') { return; }
      elem.dataset.dialogCleanedup = 'true';
      [elem.firstElementChild, elem.lastElementChild]
        .filter((e) => e && e.tagName === 'P' && e.textContent === '')
        .forEach((e) => elem.removeChild(e))
    });
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();
(function(){
  /* overrule mediawiki default popup-close event handler */
  const run = () => {
    document.querySelectorAll('dialog.zum-dialog')
     .forEach((elem) => elem.querySelectorAll('button.popup-close')
       .forEach((btn) => btn.addEventListener('click', (ev) => {
         ev.stopImmediatePropagation();
       })));
  };
if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", run);
} else {
  run();
}
})();