CoCoClick

CoCo点击方式添加控件!

当前为 2023-08-17 提交的版本,查看 最新版本

  1. /*
  2. * ============================================================================== *
  3. ******************************* CoCoClick v1.0.1 *******************************
  4. ****************** Copyright (C) 2023 xiaohong2022 *****************
  5. * ============================================================================== *
  6. */
  7.  
  8. // ==UserScript==
  9. // @name CoCoClick
  10. // @namespace http://tampermonkey.net/
  11. // @version 1.0.1
  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() {
  47. return true;
  48. },
  49. clientX: x,
  50. clientY: y,
  51. x: x + 100,
  52. y
  53. });
  54. var stage = document.querySelector(`*[class*="PreviewArea_stage"]`);
  55. stage[key].onDragOver({ preventDefault() { } });
  56. stage[key].onDrop({
  57. dataTransfer,
  58. persist() {
  59. return true;
  60. },
  61. clientX: x + 142,
  62. clientY: y - 3,
  63. x: x + 100,
  64. y
  65. });
  66. if (e.dataset.widgetType == "BRUSH_WIDGET" || e.dataset.widgetType == "ACTOR_WIDGET") {
  67. document.querySelectorAll(`*[data-widget-type="CANVAS_WIDGET"][id*="CANVAS_WIDGET"]`).forEach((en, _, array) => {
  68. function click(ew) {
  69. en[key].onDragEnter({
  70. dataTransfer,
  71. persist: () => true,
  72. stopPropagation: () => true,
  73. });
  74. stage[key].onDragOver({ preventDefault() { } });
  75. en[key].onDrop({
  76. dataTransfer,
  77. persist: () => true,
  78. stopPropagation: () => true,
  79. clientX: ew.clientX,
  80. clientY: ew.clientY,
  81. x: ew.x,
  82. y: ew.y
  83. });
  84. stage[key].onDrop({
  85. dataTransfer,
  86. persist: () => true,
  87. });
  88. array.forEach(e => e.removeEventListener("click", e.cococlickfunc, false));
  89. e[key].onDragEnd();
  90. }
  91. en.cococlickfunc = click;
  92. en.addEventListener("click", click, false);
  93. });
  94. } else {
  95. e[key].onDragEnd();
  96. }
  97. });
  98. });
  99. }, 100);
  100. GM_addStyle(`[class*=WidgetList_widgetItem]:before{top:-16px;padding:3px 7px;width:auto;border-radius:5px;background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.33);content:"点击导入";transform:translateX(-50%)}[class*=WidgetList_widgetItem]:after,[class*=WidgetList_widgetItem]:before{position:absolute;left:50%;z-index:1e+27;color:#000;font-size:12px;opacity:0;transition:.1s}[class*=WidgetList_widgetItem]:after{top:5px;border-color:transparent transparent #fff;border-style:solid;border-width:0 5px 8px;content:"";transform:translateX(-50%) rotate(180deg)}[class*=WidgetList_widgetItem]{position:relative;z-index:1e+27}[class*=WidgetList_widgetItem]:hover:before{top:-28px;opacity:1}[class*=WidgetList_widgetItem]:hover:after{top:-6px;opacity:1}[class*=WidgetList_widgetItem]:hover{box-shadow:none!important;-webkit-transform:none!important;transform:none!important}`);
  101. })();