Agma.io linesplit controls

Linescript controls for agma.io by Wynell

目前为 2020-06-02 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Agma.io linesplit controls
  3. // @namespace eeWynell#4980
  4. // @version 1.1
  5. // @description Linescript controls for agma.io by Wynell
  6. // @author eeWynell#4980
  7. // @match https://agma.io/
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. let controls = {
  15. getEnabled() {
  16. return localStorage.getItem("linesplit_controls_enabled") == "true";
  17. },
  18. setEnabled(bool) {
  19. localStorage.setItem("linesplit_controls_enabled", bool)
  20. },
  21. generatePoint(x, y) {
  22. let div = document.createElement("DIV");
  23. div.style.border = "2px solid white";
  24. div.style.width = "10px";
  25. div.style.height = "10px";
  26. div.style.transform = "translate(-50%, -50%)";
  27. div.style.position = "fixed";
  28. div.style.borderRadius = "50%";
  29. div.style.left = `${x}px`;
  30. div.style.top = `${y}px`;
  31. div.style.zIndex = 10 ** 6;
  32. return div;
  33. },
  34. generateWrapper(points) {
  35. let div = document.createElement("DIV");
  36. div.id = "linesplit-controls";
  37. div.style.display = this.getEnabled() ? "block" : "none";
  38. for (let point of points) div.appendChild(point);
  39. return div;
  40. },
  41. getPoints() {
  42. let [w, h] = [window.innerWidth, window.innerHeight];
  43. return [
  44. this.generatePoint(w / 2, 0),
  45. this.generatePoint(w, h / 2),
  46. this.generatePoint(w / 2, h),
  47. this.generatePoint(0, h / 2)
  48. ];
  49. },
  50. generateSetting(name, on_change) {
  51. let div = document.createElement("DIV");
  52. div.className = "role-setting";
  53. div.id = "linesplit-controls-enabled";
  54. let label = document.createElement("LABEL");
  55. let checkbox = document.createElement("INPUT");
  56. checkbox.type = "checkbox";
  57. checkbox.onchange = on_change;
  58. let span = document.createElement("SPAN");
  59. span.innerHTML = ` ${name}`;
  60. let br = document.createElement("BR");
  61. label.appendChild(checkbox);
  62. label.appendChild(span);
  63. div.appendChild(label);
  64. div.appendChild(br);
  65. return div;
  66. },
  67. updateControls() {
  68. let points = this.getPoints();
  69. let wrapper = document.getElementById("linesplit-controls");
  70. console.log(wrapper);
  71. document.body.replaceChild(this.generateWrapper(points), wrapper);
  72. },
  73. checkboxHandler({ target: { checked } }) {
  74. this.setEnabled(checked);
  75. let wrapper = document.getElementById("linesplit-controls");
  76. wrapper.style.display = checked ? "block" : "none";
  77. },
  78. showRoleSettings() {
  79. if (document.getElementById("linesplit-controls-enabled")) return;
  80. let role_settings = document.getElementById("roleSettings");
  81. role_settings.style.display = "block";
  82. role_settings.appendChild(this.generateSetting("Linesplit controls", this.checkboxHandler.bind(this)));
  83. },
  84. createControls() {
  85. let points = this.getPoints();
  86. document.body.appendChild(this.generateWrapper(points));
  87. let [settings_tab] = document.getElementsByClassName("dash-tab-settings");
  88. settings_tab.addEventListener("click", this.showRoleSettings.bind(this));
  89. }
  90. };
  91.  
  92. window.addEventListener("resize", controls.updateControls.bind(controls));
  93. controls.createControls();
  94.  
  95.  
  96. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址