您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
none
// ==UserScript== // @name scratch extesion: input by rssaromeo // @version 3 // @description none // @run-at document-start // @author rssaromeo // @license GPLv3 // @tag lib // @match *://*/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAgMAAADXB5lNAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAxQTFRFAAAAGO3tDoeH////Ea+F+gAAAAR0Uk5TAP///7MtQIgAAAFySURBVHicjZMxbsMwDEXFwXOX+jQuUPcENVDrlPKgDp2jS/QUWrp7cPk/KUcpUiBCYEfPIr+kT0rAGGd9HBv+Ch7DQrznBrjAlwDIGmzUYkAjZMVnxABErgFJBDpjEg3QnyDCVRJiBBquUouGKYjIMEwFWZICWREBoNNaRFMggmDPexZNEYODYzs2BW9rAyEBMKeDWpJYTgd7rgq4iyswEQfHtouJONCsQhF5/5q+aw8+PqcxQeYiVJU1vzwTFIlUjT/haaOMA1XinQOY6sIbVl0HmiiFHoRovl3BOOUGuNG205AaaOMf4Ize3QWn++lBMM7DwnPgZTsdFp5D1keB+vDKk4ZIs6MbE4K7H906A3rJakMPLnfAHDugznU5zew/oLaCOZO0krKBkroFl62VpV8IqrDLqiIZoOsolLZOW0xi8ev07Eprj3H2mFqsgfQ7l+js7DlmSbQOXQnZiK9d355GWavHdrRw2/v0T8K5hAvCLxHq4ydmN9O+AAAAAElFTkSuQmCC // @grant unsafeWindow // @namespace https://greasyfork.org/users/1184528 // ==/UserScript== // fix +=+up=up -> + in list ;(async () => { await loadlib("libloader").waitforlib("scratchextesnsionmanager") const { newext, newmenu, newblock, bt, inp, gettarget, totype, scratch_math, projectid, canvas, scratchvar, scratchlist, } = loadlib("scratchextesnsionmanager") var a = loadlib("newallfuncs") var vm loadlib("libloader") .waitforlib("scratch") .then(() => (vm = loadlib("scratch").vm)) var mousestate = { left: false, center: false, right: false, } newext( "input", "rssaromeo", class { getmouse({ button }) { button = totype(button, "string", 1) if (button == "any") return Object.values(mousestate).includes(true) if (mousestate?.[button] !== undefined) return mousestate[button] else return false } press({ key }) { if (key == " ") key = "space" if (/^[a-z]$/.test(key)) key = key.toUpperCase() var index = vm.runtime.ioDevices.keyboard._keysPressed.indexOf(key) if (index !== -1) { vm.runtime.ioDevices.keyboard._keysPressed.splice(index, 1) } vm.runtime.ioDevices.keyboard._keysPressed.push(key) } unpress({ key }) { key = totype(key, "string") if (key == " ") key = "space" if (/^[a-z]$/.test(key)) key = key.toUpperCase() var index = vm.runtime.ioDevices.keyboard._keysPressed.indexOf(key) if (index !== -1) { vm.runtime.ioDevices.keyboard._keysPressed.splice(index, 1) } } keypressed({ key }) { if (key == "any") return !!vm.runtime.ioDevices.keyboard._keysPressed.length return !!vm.runtime.ioDevices.keyboard._keysPressed.includes( key ) } }, [ newblock(bt.bool, "getmouse", "mouse [button] pressed?", [ newmenu("getmouse", { items: ["left", "right", "center", "any"], defaultValue: "right", }), ]), newblock(bt.cmd, "press", "press [key]", [ newmenu("fullkeylist", { defaultValue: "escape", }), ]), newblock(bt.cmd, "unpress", "unpress [key]", [ newmenu("fullkeylist", { defaultValue: "escape", }), ]), newblock(bt.bool, "keypressed", "key [key] pressed?", [ newmenu("fullkeylistandany", { defaultValue: "any", }), ]), ], "12B3B3", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAgMAAADXB5lNAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAxQTFRFAAAAGO3tDoeH////Ea+F+gAAAAR0Uk5TAP///7MtQIgAAAFySURBVHicjZMxbsMwDEXFwXOX+jQuUPcENVDrlPKgDp2jS/QUWrp7cPk/KUcpUiBCYEfPIr+kT0rAGGd9HBv+Ch7DQrznBrjAlwDIGmzUYkAjZMVnxABErgFJBDpjEg3QnyDCVRJiBBquUouGKYjIMEwFWZICWREBoNNaRFMggmDPexZNEYODYzs2BW9rAyEBMKeDWpJYTgd7rgq4iyswEQfHtouJONCsQhF5/5q+aw8+PqcxQeYiVJU1vzwTFIlUjT/haaOMA1XinQOY6sIbVl0HmiiFHoRovl3BOOUGuNG205AaaOMf4Ize3QWn++lBMM7DwnPgZTsdFp5D1keB+vDKk4ZIs6MbE4K7H906A3rJakMPLnfAHDugznU5zew/oLaCOZO0krKBkroFl62VpV8IqrDLqiIZoOsolLZOW0xi8ev07Eprj3H2mFqsgfQ7l+js7DlmSbQOXQnZiK9d355GWavHdrRw2/v0T8K5hAvCLxHq4ydmN9O+AAAAAElFTkSuQmCC" ) await loadlib("libloader").waitforlib("scratch") await a.waituntil(canvas) // unsafeWindow.vm = loadlib("scratch").vm function fkey(key) { if (key == " ") key = "space" key = key.replace(/arrow(up|down|left|right)/i, "$1 arrow") if (/^[a-z]$/.test(key)) key = key.toUpperCase() else key = key.toLowerCase() return key } // setInterval(() => { function isinselfmenu() { if (document.querySelector(".blocklyDropDownArrow.arrowTop")) { var rect = document .querySelector(".blocklyDropDownArrow.arrowTop") .getBoundingClientRect() var arr = document.elementsFromPoint(rect.x, rect.y - 20) } else if ( document.querySelector(".blocklyDropDownArrow.arrowBottom") ) { var rect = document .querySelector(".blocklyDropDownArrow.arrowBottom") .getBoundingClientRect() var arr = document.elementsFromPoint(rect.x, rect.y + 20) } else return false return arr .filter((e) => e.tagName.toLowerCase() == "path") .map((e) => e.parentElement.dataset.id) .join("|") .includes("inputcreatedbyrssaromeo") } window.onkeydown = (e) => { // log(e.target) if (e.target == document.querySelector(".u-dropdown-searchbar")) { if (!isinselfmenu()) return e.stopImmediatePropagation() e.stopPropagation() e.preventDefault() return } if (e.target !== document.body) return var key = fkey(e.key) if (key.length == 1) return e.preventDefault() var index = vm.runtime.ioDevices.keyboard._keysPressed.indexOf(key) if (index !== -1) { vm.runtime.ioDevices.keyboard._keysPressed.splice(index, 1) } vm.runtime.ioDevices.keyboard._keysPressed.push(key) } window.onkeyup = (e) => { if (e.target == document.querySelector(".u-dropdown-searchbar")) { if (!isinselfmenu()) return e.stopImmediatePropagation() e.stopPropagation() e.preventDefault() log(e.target, e.key, fkey(e.key)) e.target.value = fkey(e.key) e.target.dispatchEvent( new Event("input", { bubbles: true, cancelable: true, }) ) e.target.dispatchEvent( new KeyboardEvent("keydown", { key: "Enter", code: "Enter", keyCode: 13, bubbles: true, }) ) // --editorTheme3-hoveredItem: #224b4b; return } e.preventDefault() var key = fkey(e.key) var index = vm.runtime.ioDevices.keyboard._keysPressed.indexOf(key) if (index !== -1) { vm.runtime.ioDevices.keyboard._keysPressed.splice(index, 1) } } window.onblur = () => (vm.runtime.ioDevices.keyboard._keysPressed = []) canvas().onmousedown = canvas().onmouseup = function (e) { e.preventDefault() switch (e.buttons) { case 0: mousestate = { left: false, center: false, right: false, } break case 1: mousestate = { left: true, center: false, right: false, } break case 2: mousestate = { left: false, center: false, right: true, } break case 3: mousestate = { left: true, center: false, right: true, } break case 4: mousestate = { left: false, center: true, right: false, } break case 5: mousestate = { left: true, center: true, right: false, } break case 6: mousestate = { left: false, center: true, right: true, } break case 7: mousestate = { left: true, center: true, right: true, } break } } // }) })()