CoCoClick

CoCo点击方式添加控件!

  1. /*
  2. * ============================================================================== *
  3. ******************************* CoCoClick v1.0.2 *******************************
  4. ****************** Copyright (C) 2023 xiaohong2022 *****************
  5. * ============================================================================== *
  6. */
  7.  
  8. // ==UserScript==
  9. // @name CoCoClick
  10. // @namespace http://tampermonkey.net/
  11. // @version 1.0.2
  12. // @description CoCo点击方式添加控件!
  13. // @author 小宏XeLa
  14. // @match *://coco.codemao.cn/editor/*
  15. // @icon https://coco.codemao.cn/favicon.ico
  16. // @grant GM_addStyle
  17. // @license GPL-3.0
  18. // @run-at document-start
  19. // ==/UserScript==
  20.  
  21. (function () {
  22. "use strict";
  23. var dataTransfer = {
  24. setData(n, v) {
  25. this[n] = v;
  26. },
  27. getData(n) {
  28. return this[n];
  29. }
  30. };
  31. setInterval(() => {
  32. document.querySelectorAll(`*[class*="WidgetList_widgetItem"]`).forEach((e) => {
  33. if (e.cococlick) return;
  34. e.cococlick = true;
  35. e.draggable = false;
  36. e.style.cursor = "pointer";
  37. e.addEventListener("click", function () {
  38. var sen = document.querySelector(`*[class*="PreviewArea_main"]`);
  39. var x = sen.offsetLeft + sen.offsetWidth / 2;
  40. var y = sen.offsetTop + sen.offsetHeight / 2;
  41. var keys = Object.keys(e);
  42. var key = keys.find((e) => e.startsWith("__reactEventHandlers"));
  43. e[key].onDragStart({
  44. target: e,
  45. dataTransfer,
  46. persist:() => true,
  47. clientX: x,
  48. clientY: y,
  49. x: x + 100,
  50. y
  51. });
  52. var stage = document.querySelector(`*[class*="PreviewArea_stage"]`);
  53. stage[key].onDragOver({ preventDefault() { } });
  54. stage[key].onDrop({
  55. dataTransfer,
  56. persist:() => true,
  57. clientX: x + 142,
  58. clientY: y - 3,
  59. x: x + 100,
  60. y
  61. });
  62. if (e.dataset.widgetType == "BRUSH_WIDGET" || e.dataset.widgetType == "ACTOR_WIDGET") {
  63. document.querySelectorAll(`*[data-widget-type="CANVAS_WIDGET"][id*="CANVAS_WIDGET"]`).forEach((en, _, array) => {
  64. function click(ew) {
  65. en[key].onDragEnter({
  66. dataTransfer,
  67. persist: () => true,
  68. stopPropagation: () => true,
  69. });
  70. stage[key].onDragOver({ preventDefault() { } });
  71. en[key].onDrop({
  72. dataTransfer,
  73. persist: () => true,
  74. stopPropagation: () => true,
  75. clientX: ew.clientX,
  76. clientY: ew.clientY,
  77. x: ew.x,
  78. y: ew.y
  79. });
  80. stage[key].onDrop({
  81. dataTransfer,
  82. persist: () => true,
  83. });
  84. array.forEach(e => e.removeEventListener("click", e.cococlickfunc, false));
  85. e[key].onDragEnd();
  86. }
  87. en.cococlickfunc = click;
  88. en.addEventListener("click", click, false);
  89. });
  90. } else {
  91. e[key].onDragEnd();
  92. }
  93. });
  94. });
  95. }, 100);
  96. })();