* Solidarprinzip

Fügt einen Button zum schnellen Teilen der eigenen Einsätze aus der Einsatzliste hinzu.

目前为 2024-01-11 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name * Solidarprinzip
  3. // @namespace bos-ernie.leitstellenspiel.de
  4. // @version 1.0.3
  5. // @license BSD-3-Clause
  6. // @author BOS-Ernie
  7. // @description Fügt einen Button zum schnellen Teilen der eigenen Einsätze aus der Einsatzliste hinzu.
  8. // @match https://www.leitstellenspiel.de/
  9. // @match https://polizei.leitstellenspiel.de/
  10. // @icon https://www.google.com/s2/favicons?sz=64&domain=leitstellenspiel.de
  11. // @run-at document-idle
  12. // @grant none
  13. // @resource https://forum.leitstellenspiel.de/index.php?thread/23842-script-solidarprinzip-by-bos-ernie/
  14. // ==/UserScript==
  15.  
  16. /* global missionMarkerAdd */
  17.  
  18. (function () {
  19. function addShareButtonToMissionList() {
  20. document.querySelectorAll("#mission_list .missionSideBarEntry:not(.mission_deleted)").forEach(mission => {
  21. if (mission.querySelector(".panel-success")) {
  22. return;
  23. }
  24.  
  25. const missionId = mission.id.replace(/\D+/g, "");
  26.  
  27. addShareButtonToMission(missionId);
  28. });
  29. }
  30.  
  31. function addShareButtonToNewMissions() {
  32. let originalMissionMarkerAdd = missionMarkerAdd;
  33.  
  34. missionMarkerAdd = e => {
  35. originalMissionMarkerAdd(e);
  36.  
  37. if (e.alliance_id) {
  38. const shareButton = document.querySelector(`#share-button-${e.id}`);
  39.  
  40. if (shareButton) {
  41. shareButton.remove();
  42. }
  43. }
  44.  
  45. if (e.user_id !== user_id || e.kt === true || e.alliance_id || document.querySelector(`#share-button-${e.id}`)) {
  46. return;
  47. }
  48.  
  49. addShareButtonToMission(e.id);
  50. };
  51. }
  52.  
  53. function addShareButtonToMission(missionId) {
  54. const mission = document.querySelector(`#mission_list #mission_${missionId}`);
  55.  
  56. if (!mission) {
  57. console.warn(`Mission ${missionId} not found`);
  58. return;
  59. }
  60.  
  61. mission.querySelector("#alarm_button_" + missionId).insertAdjacentHTML(
  62. "afterend",
  63. `<a id="share-button-${missionId}" class="btn btn-default btn-xs" data-mission-id="${missionId}" title="Im Verband freigeben">
  64. <span class="glyphicon glyphicon-bullhorn"></span>
  65. </a>`,
  66. );
  67. }
  68.  
  69. function addShareButtonEventListener() {
  70. document.addEventListener("click", async event => {
  71. const element = event.target;
  72. const parent = element.parentElement;
  73.  
  74. if (!element.id.startsWith("share-button-") && !parent.id.startsWith("share-button-")) {
  75. return;
  76. }
  77.  
  78. event.preventDefault();
  79.  
  80. if (element.id.startsWith("share-button-")) {
  81. await share(element.dataset.missionId).then(() => {
  82. element.remove();
  83. });
  84. } else if (parent.id.startsWith("share-button-")) {
  85. await share(parent.dataset.missionId).then(() => {
  86. parent.remove();
  87. });
  88. }
  89. });
  90. }
  91.  
  92. async function share(missionId) {
  93. await fetch(`/missions/${missionId}/alliance`);
  94. }
  95.  
  96. function main() {
  97. addShareButtonToMissionList();
  98. addShareButtonToNewMissions();
  99. addShareButtonEventListener();
  100. }
  101.  
  102. main();
  103. })();