turbowarp mod + recommended games

This commit is contained in:
Sky 2023-08-30 18:48:38 -04:00
parent 917545c951
commit 774fe0042f
643 changed files with 86564 additions and 14088 deletions

View File

@ -2,7 +2,8 @@
{
"name": "ADOFAI",
"directory": "adofai",
"image": "icon.png"
"image": "icon.png",
"recommended": "1"
},
{
"name": "Online Minecraft",
@ -12,12 +13,14 @@
{
"name": "Offline Minecraft",
"directory": "offline-mc",
"image": "logo.png"
"image": "logo.png",
"recommended": "1"
},
{
"name": "Friday Night Funkin",
"directory": "fridaynightfunkin",
"image": "fnf-icon.jpg"
"image": "fnf-icon.jpg",
"recommended": "1"
},
{
"name": "Worlds Hardest Game",
@ -27,12 +30,14 @@
{
"name": "GBA Emulator",
"directory": "gba",
"image": "icon.png"
"image": "icon.png",
"recommended": "1"
},
{
"name": "Celeste",
"directory": "celeste",
"image": "icon.png"
"image": "icon.png",
"recommended": "1"
},
{
"name": "Mario",
@ -247,7 +252,8 @@
{
"name": "Super Mario 64",
"directory": "sm64",
"image": "icon.png"
"image": "icon.png",
"recommended": "1"
},
{
"name": "Gun Mayhem Redux",
@ -274,11 +280,6 @@
"directory": "ltf",
"image": "icon.png"
},
{
"name": "Turbowarp Editor",
"directory": "turbowarp-editor",
"image": "icon.png"
},
{
"name": "Wordle Bot",
"directory": "wordlebot",
@ -377,12 +378,14 @@
{
"name": "Universal Paperclips",
"directory": "universal-paperclips",
"image": "universal-paperclips.png"
"image": "universal-paperclips.png",
"recommended": "1"
},
{
"name": "Windows 11",
"directory": "win11",
"image": "favicon.png"
"image": "favicon.png",
"recommended": "1"
},
{
"name": "Learn to Fly 2",
@ -457,6 +460,7 @@
{
"name": "Game Maker Doodle",
"directory": "gamemaker",
"image": "images.jpeg"
"image": "images.jpeg",
"recommended": "1"
}
]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -86,7 +86,9 @@
<br>
<input type="text" id="gamesearch" placeholder="Type here to search.." />
<button id="random" onclick="selectRandomGame()">Click to play a random game!</button>
<button id="random" onclick="selectRandomGame()">Play random game!</button>
<br />
<button id="recommend" onclick="recommendedGames()">Click to view recommended games!</button>
<br />
<br />

View File

@ -13,16 +13,17 @@ $.getJSON("/games.json", function (data) {
gamelist = data;
for (let i = 0; i < data.length; i++) {
let $element = $("<div>")
.prop({
.attr({
class: "game",
style: "cursor: pointer;",
id: data[i].directory,
recommended: data[i].recommended
})
.data("recommended", data[i].recommended)
.append(
$("<img>").prop({
src: data[i].directory + "/" + data[i].image,
alt: data[i].name + " logo",
onerror: "failedImg($(this));",
})
)
.append($("<h1>").text(data[i].name))
@ -85,7 +86,7 @@ $(document).ready(function () {
$("<img>").prop({
src: pinnedarraynodes[0].src,
alt: pinnedarraynodes[0].alt,
class: "gameicon"
class: "gameicon",
})
)
.append($("<h1>").text(pinnedarraynodes[1].innerHTML))
@ -156,8 +157,7 @@ function selectRandomGame() {
gravity: "top", // `top` or `bottom`
position: "center", // `left`, `center` or `right`
style: {
background:
"linear-gradient(var(--bg-1), var(--bg-2))",
background: "linear-gradient(var(--bg-1), var(--bg-2))",
boxShadow: "0px 0px 5px 5px var(--input-bg-color)",
width: "25%",
},
@ -166,4 +166,23 @@ function selectRandomGame() {
setTimeout(() => {
redirectGame(gamelist[randomgame].directory);
}, 3000);
}
}
let viewrecommended = 0;
function recommendedGames() {
if(viewrecommended == 0) {
$("#games .game").hide();
$("#games .game").each(function () {
if ($(this).attr("recommended")) {
$(this).show();
}
});
$("#recommend").text("Click to view all games again!");
viewrecommended = 1;
} else {
$("#games .game").hide();
$("#games .game").show();
viewrecommended = 0;
$("#recommend").text("Click to view recommended games!");
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,165 +0,0 @@
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-block-palette-icons"],{
/***/ "./node_modules/css-loader/index.js!./src/addons/addons/block-palette-icons/userstyle.css":
/*!***************************************************************************************!*\
!*** ./node_modules/css-loader!./src/addons/addons/block-palette-icons/userstyle.css ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var escape = __webpack_require__(/*! ../../../../node_modules/css-loader/lib/url/escape.js */ "./node_modules/css-loader/lib/url/escape.js");
exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false);
// imports
// module
exports.push([module.i, ".scratchCategoryItemBubble {\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.scratchCategoryId-motion .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/motion_icon.svg */ "./src/addons/addons/block-palette-icons/icons/motion_icon.svg")) + ");\n}\n\n.scratchCategoryId-looks .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/looks_icon.svg */ "./src/addons/addons/block-palette-icons/icons/looks_icon.svg")) + ");\n}\n\n.scratchCategoryId-sound .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/sound_icon.svg */ "./src/addons/addons/block-palette-icons/icons/sound_icon.svg")) + ");\n}\n\n.scratchCategoryId-events .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/events_icon.svg */ "./src/addons/addons/block-palette-icons/icons/events_icon.svg")) + ");\n}\n\n.scratchCategoryId-control .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/control_icon.svg */ "./src/addons/addons/block-palette-icons/icons/control_icon.svg")) + ");\n}\n\n.scratchCategoryId-sensing .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/sensing_icon.svg */ "./src/addons/addons/block-palette-icons/icons/sensing_icon.svg")) + ");\n}\n\n.scratchCategoryId-operators .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/operators_icon.svg */ "./src/addons/addons/block-palette-icons/icons/operators_icon.svg")) + ");\n}\n\n.scratchCategoryId-variables .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/variables_icon.svg */ "./src/addons/addons/block-palette-icons/icons/variables_icon.svg")) + ");\n}\n\n.scratchCategoryId-lists .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/list_icon.svg */ "./src/addons/addons/block-palette-icons/icons/list_icon.svg")) + ");\n}\n\n.scratchCategoryId-myBlocks .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/block_icon.svg */ "./src/addons/addons/block-palette-icons/icons/block_icon.svg")) + ");\n}\n\n.scratchCategoryId-tw .scratchCategoryItemBubble {\n background-image: url(" + escape(__webpack_require__(/*! ./icons/tw_icon.svg */ "./src/addons/addons/block-palette-icons/icons/tw_icon.svg")) + ");\n}\n", ""]);
// exports
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/_runtime_entry.js":
/*!*****************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/_runtime_entry.js ***!
\*****************************************************************/
/*! exports provided: resources */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resources", function() { return resources; });
/* harmony import */ var _css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! css-loader!./userstyle.css */ "./node_modules/css-loader/index.js!./src/addons/addons/block-palette-icons/userstyle.css");
/* harmony import */ var _css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_0__);
/* generated by pull.js */
const resources = {
"userstyle.css": _css_loader_userstyle_css__WEBPACK_IMPORTED_MODULE_0___default.a
};
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/block_icon.svg":
/*!********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/block_icon.svg ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/318e019bdee5ed02903aa5f22a9903f2.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/control_icon.svg":
/*!**********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/control_icon.svg ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/e1249124e702a974df36355af6aa2385.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/events_icon.svg":
/*!*********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/events_icon.svg ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/9d7acb2e5784a9a1d52e564af3d8469b.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/list_icon.svg":
/*!*******************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/list_icon.svg ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/bd6d382729ecbd23c5181cf2b327072f.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/looks_icon.svg":
/*!********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/looks_icon.svg ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/e008ee0cb1202de1137823150da1644a.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/motion_icon.svg":
/*!*********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/motion_icon.svg ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/c088896fb05dc466b45ecaa1d5c4d007.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/operators_icon.svg":
/*!************************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/operators_icon.svg ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/ab2c140af0ffba6b515eebc2156742e2.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/sensing_icon.svg":
/*!**********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/sensing_icon.svg ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/7601fa61034e5d7d542538e1e4338a4e.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/sound_icon.svg":
/*!********************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/sound_icon.svg ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/7b98085c05bdcd97dd0c6d4b34317793.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/tw_icon.svg":
/*!*****************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/tw_icon.svg ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/ce8ffc09dce132288116ec7d5a2d5f56.svg";
/***/ }),
/***/ "./src/addons/addons/block-palette-icons/icons/variables_icon.svg":
/*!************************************************************************!*\
!*** ./src/addons/addons/block-palette-icons/icons/variables_icon.svg ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "static/assets/4bfaa15915bc5fb88b40b3e1a537c3ea.svg";
/***/ })
}]);
//# sourceMappingURL=addon-entry-block-palette-icons.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-block-palette-icons.js","sources":["webpack://GUI/./src/addons/addons/block-palette-icons/userstyle.css","webpack://GUI/./src/addons/addons/block-palette-icons/_runtime_entry.js","webpack://GUI/./src/addons/addons/block-palette-icons/icons/block_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/control_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/events_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/list_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/looks_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/motion_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/operators_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/sensing_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/sound_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/tw_icon.svg","webpack://GUI/./src/addons/addons/block-palette-icons/icons/variables_icon.svg"],"sourcesContent":["var escape = require(\"../../../../node_modules/css-loader/lib/url/escape.js\");\nexports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".scratchCategoryItemBubble {\\n background-position: center;\\n background-repeat: no-repeat;\\n background-size: cover;\\n}\\n\\n.scratchCategoryId-motion .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/motion_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-looks .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/looks_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-sound .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/sound_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-events .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/events_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-control .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/control_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-sensing .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/sensing_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-operators .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/operators_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-variables .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/variables_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-lists .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/list_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-myBlocks .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/block_icon.svg\")) + \");\\n}\\n\\n.scratchCategoryId-tw .scratchCategoryItemBubble {\\n background-image: url(\" + escape(require(\"./icons/tw_icon.svg\")) + \");\\n}\\n\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _css from \"!css-loader!./userstyle.css\";\nexport const resources = {\n \"userstyle.css\": _css,\n};\n","module.exports = __webpack_public_path__ + \"static/assets/318e019bdee5ed02903aa5f22a9903f2.svg\";","module.exports = __webpack_public_path__ + \"static/assets/e1249124e702a974df36355af6aa2385.svg\";","module.exports = __webpack_public_path__ + \"static/assets/9d7acb2e5784a9a1d52e564af3d8469b.svg\";","module.exports = __webpack_public_path__ + \"static/assets/bd6d382729ecbd23c5181cf2b327072f.svg\";","module.exports = __webpack_public_path__ + \"static/assets/e008ee0cb1202de1137823150da1644a.svg\";","module.exports = __webpack_public_path__ + \"static/assets/c088896fb05dc466b45ecaa1d5c4d007.svg\";","module.exports = __webpack_public_path__ + \"static/assets/ab2c140af0ffba6b515eebc2156742e2.svg\";","module.exports = __webpack_public_path__ + \"static/assets/7601fa61034e5d7d542538e1e4338a4e.svg\";","module.exports = __webpack_public_path__ + \"static/assets/7b98085c05bdcd97dd0c6d4b34317793.svg\";","module.exports = __webpack_public_path__ + \"static/assets/ce8ffc09dce132288116ec7d5a2d5f56.svg\";","module.exports = __webpack_public_path__ + \"static/assets/4bfaa15915bc5fb88b40b3e1a537c3ea.svg\";"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACRA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;;;;;;;;;;;ACFA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;A","sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-custom-zoom.js","sources":["webpack://GUI/./src/addons/addons/custom-zoom/style.css","webpack://GUI/./src/addons/addons/custom-zoom/_runtime_entry.js","webpack://GUI/./src/addons/addons/custom-zoom/userscript.js"],"sourcesContent":["exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".sa-custom-zoom-area {\\n position: absolute;\\n bottom: 0;\\n right: 0;\\n width: 60px;\\n height: 148px;\\n pointer-events: none;\\n}\\n.blocklyZoom > * {\\n transition: transform var(--sa-custom-zoom-speed, 0) ease-in-out;\\n}\\n.sa-custom-zoom-hidden > * {\\n transform: translateX(80px);\\n}\\n\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _js from \"./userscript.js\";\nimport _css from \"!css-loader!./style.css\";\nexport const resources = {\n \"userscript.js\": _js,\n \"style.css\": _css,\n};\n","export default async function ({ addon, global, console }) {\n await addon.tab.traps.getBlockly();\n\n let controlsRect;\n let previousIsHovered = false;\n const speeds = {\n none: \"0s\",\n short: \"0.25s\",\n default: \"0.5s\",\n long: \"1s\",\n };\n\n const customZoomAreaElement = document.createElement(\"div\");\n customZoomAreaElement.className = \"sa-custom-zoom-area\";\n\n function update() {\n document.removeEventListener(\"mousemove\", onMouseMove);\n\n if (addon.tab.editorMode !== \"editor\") return;\n\n Blockly.getMainWorkspace().options.zoomOptions.maxScale = addon.settings.get(\"maxZoom\") / 100;\n Blockly.getMainWorkspace().options.zoomOptions.minScale = addon.settings.get(\"minZoom\") / 100;\n Blockly.getMainWorkspace().options.zoomOptions.startScale = addon.settings.get(\"startZoom\") / 100;\n Blockly.getMainWorkspace().options.zoomOptions.scaleSpeed = 1 + 0.2 * (addon.settings.get(\"zoomSpeed\") / 100);\n\n const svgGroup = getZoomControls();\n const autohide = addon.settings.get(\"autohide\");\n if (svgGroup) svgGroup.classList.toggle(\"sa-custom-zoom-hidden\", autohide);\n if (autohide) {\n const injectionDiv = document.querySelector(\".injectionDiv\");\n injectionDiv.appendChild(customZoomAreaElement);\n updateRect();\n document.addEventListener(\"mousemove\", onMouseMove);\n }\n }\n\n function getZoomControls() {\n const zoomControls = Blockly.getMainWorkspace().zoomControls_;\n if (zoomControls) return zoomControls.svgGroup_;\n return null;\n }\n\n function onMouseMove(e) {\n const isHovered =\n e.x > controlsRect.left && e.x < controlsRect.right && e.y > controlsRect.top && e.y < controlsRect.bottom;\n if (isHovered !== previousIsHovered) {\n previousIsHovered = isHovered;\n const svgGroup = getZoomControls();\n if (svgGroup) {\n svgGroup.style.setProperty(\"--sa-custom-zoom-speed\", speeds[addon.settings.get(\"speed\")]);\n svgGroup.classList.toggle(\"sa-custom-zoom-hidden\", !isHovered);\n }\n }\n }\n\n function updateRect() {\n controlsRect = customZoomAreaElement.getBoundingClientRect();\n }\n\n function onResize() {\n if (addon.tab.editorMode === \"editor\" && addon.settings.get(\"autohide\")) {\n updateRect();\n }\n }\n\n await addon.tab.waitForElement(\".blocklyZoom\");\n update();\n addon.tab.addEventListener(\"urlChange\", update);\n addon.settings.addEventListener(\"change\", update);\n window.addEventListener(\"resize\", onResize);\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-editor-colored-context-menus.js","sources":["webpack://GUI/./src/addons/addons/editor-colored-context-menus/userscript.css","webpack://GUI/./src/addons/addons/editor-colored-context-menus/_runtime_entry.js","webpack://GUI/./src/addons/addons/editor-colored-context-menus/userscript.js"],"sourcesContent":["exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".sa-contextmenu-colored .blocklyContextMenu {\\n background-color: var(--sa-contextmenu-bg) !important;\\n border-color: var(--sa-contextmenu-border) !important;\\n}\\n.sa-contextmenu-colored .blocklyContextMenu .goog-menuitem-highlight,\\n.sa-contextmenu-colored .s3dev-mi:hover {\\n background-color: var(--sa-contextmenu-hover) !important;\\n border-color: transparent !important;\\n}\\n.sa-contextmenu-colored .blocklyContextMenu .goog-menuitem[style*=\\\"border-top\\\"] {\\n border-top-color: var(--sa-contextmenu-border) !important;\\n}\\n.sa-contextmenu-colored .blocklyContextMenu .goog-menuitem .goog-menuitem-content {\\n color: var(--sa-contextmenu-text);\\n}\\n\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _js from \"./userscript.js\";\nimport _css from \"!css-loader!./userscript.css\";\nexport const resources = {\n \"userscript.js\": _js,\n \"userscript.css\": _css,\n};\n","export default async function ({ addon, global, console }) {\n const ScratchBlocks = await addon.tab.traps.getBlockly();\n\n const applyContextMenuColor = (block) => {\n const widgetDiv = ScratchBlocks.WidgetDiv.DIV;\n if (!widgetDiv) {\n return;\n }\n const background = block.svgPath_;\n if (!background) {\n return;\n }\n const style = window.getComputedStyle(background);\n const fill = style.getPropertyValue(\"fill\");\n const border = style.getPropertyValue(\"stroke\") || \"#0003\";\n const textColor = style.getPropertyValue(\"--sa-block-text-color\") || \"#fff\";\n const hoverBg = style.getPropertyValue(\"--sa-block-secondary-color\") || \"#0001\";\n widgetDiv.classList.add(\"sa-contextmenu-colored\");\n widgetDiv.style.setProperty(\"--sa-contextmenu-bg\", fill);\n widgetDiv.style.setProperty(\"--sa-contextmenu-border\", border);\n widgetDiv.style.setProperty(\"--sa-contextmenu-text\", textColor);\n widgetDiv.style.setProperty(\"--sa-contextmenu-hover\", hoverBg);\n };\n\n const originalHandleRightClick = ScratchBlocks.Gesture.prototype.handleRightClick;\n ScratchBlocks.Gesture.prototype.handleRightClick = function (...args) {\n const block = this.targetBlock_;\n const ret = originalHandleRightClick.call(this, ...args);\n if (block) {\n applyContextMenuColor(block);\n }\n return ret;\n };\n\n const originalHide = ScratchBlocks.WidgetDiv.hide;\n ScratchBlocks.WidgetDiv.hide = function (...args) {\n if (ScratchBlocks.WidgetDiv.DIV) {\n ScratchBlocks.WidgetDiv.DIV.classList.remove(\"sa-contextmenu-colored\");\n }\n return originalHide.call(this, ...args);\n };\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;A","sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-editor-extra-keys.js","sources":["webpack://GUI/./src/addons/addons/editor-extra-keys/_runtime_entry.js","webpack://GUI/./src/addons/addons/editor-extra-keys/userscript.js"],"sourcesContent":["/* generated by pull.js */\nimport _js from \"./userscript.js\";\nexport const resources = {\n \"userscript.js\": _js,\n};\n","export default async function ({ addon, global, cons, msg }) {\n const ScratchBlocks = await addon.tab.traps.getBlockly();\n\n let defaultKeys = null;\n function appendKeys(keys, enableShiftKeys) {\n if (!defaultKeys) {\n defaultKeys = [...keys];\n }\n if (!addon.self.disabled) {\n keys.push(\n ...[\n [\"-\", \"-\"],\n [\",\", \",\"],\n [\".\", \".\"],\n ]\n );\n keys.splice(5, 0, [msg(\"enter-key\"), \"enter\"]);\n if (addon.settings.get(\"experimentalKeys\")) {\n keys.push(\n ...[\n [\"`\", \"`\"],\n [\"=\", \"=\"],\n [\"[\", \"[\"],\n [\"]\", \"]\"],\n [\"\\\\\", \"\\\\\"],\n [\";\", \";\"],\n [\"'\", \"'\"],\n [\"/\", \"/\"],\n ]\n );\n }\n if (enableShiftKeys && addon.settings.get(\"shiftKeys\")) {\n keys.push(\n ...[\n [\"!\", \"!\"],\n [\"@\", \"@\"],\n [\"#\", \"#\"],\n [\"$\", \"$\"],\n [\"%\", \"%\"],\n [\"^\", \"^\"],\n [\"&\", \"&\"],\n [\"*\", \"*\"],\n [\"(\", \"(\"],\n [\")\", \")\"],\n [\"_\", \"_\"],\n [\"+\", \"+\"],\n [\"{\", \"{\"],\n [\"}\", \"}\"],\n [\"|\", \"|\"],\n [\":\", \":\"],\n ['\"', '\"'],\n [\"?\", \"?\"],\n [\"<\", \"<\"],\n [\">\", \">\"],\n [\"~\", \"~\"],\n ]\n );\n }\n if (addon.settings.get(\"twKeys\")) {\n keys.push(\n ...[\n [\"backspace\", \"backspace\"],\n [\"delete\", \"delete\"],\n [\"shift\", \"shift\"],\n [\"caps lock\", \"caps lock\"],\n [\"scroll lock\", \"scroll lock\"],\n [\"control\", \"control\"],\n [\"escape\", \"escape\"],\n [\"insert\", \"insert\"],\n [\"home\", \"home\"],\n [\"end\", \"end\"],\n [\"page up\", \"page up\"],\n [\"page down\", \"page down\"],\n ]\n );\n }\n }\n return keys;\n }\n\n for (const opcode of [\"sensing_keyoptions\", \"event_whenkeypressed\"]) {\n const block = ScratchBlocks.Blocks[opcode];\n const originalInit = block.init;\n block.init = function (...args) {\n const originalJsonInit = this.jsonInit;\n this.jsonInit = function (obj) {\n appendKeys(obj.args0[0].options, opcode === \"event_whenkeypressed\");\n return originalJsonInit.call(this, obj);\n };\n return originalInit.call(this, ...args);\n };\n }\n\n const updateExistingBlocks = () => {\n const workspace = Blockly.getMainWorkspace();\n const flyout = workspace && workspace.getFlyout();\n if (workspace && flyout) {\n const allBlocks = [...workspace.getAllBlocks(), ...flyout.getWorkspace().getAllBlocks()];\n for (const block of allBlocks) {\n if (block.type !== \"event_whenkeypressed\" && block.type !== \"sensing_keyoptions\") {\n continue;\n }\n const input = block.inputList[0];\n if (!input) {\n continue;\n }\n const field = input.fieldRow.find((i) => i && Array.isArray(i.menuGenerator_));\n if (!field) {\n continue;\n }\n field.menuGenerator_ = appendKeys(\n defaultKeys ? [...defaultKeys] : field.menuGenerator_,\n block.type === \"event_whenkeypressed\"\n );\n }\n }\n };\n\n updateExistingBlocks();\n addon.settings.addEventListener(\"change\", updateExistingBlocks);\n addon.self.addEventListener(\"disabled\", updateExistingBlocks);\n addon.self.addEventListener(\"reenabled\", updateExistingBlocks);\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAOA;AACA;AAAA;AACA;AAYA;AACA;AAAA;AACA;AAyBA;AACA;AAAA;AACA;AAgBA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-editor-sounds.js","sources":["webpack://GUI/./src/addons/addons/editor-sounds/_runtime_entry.js","webpack://GUI/./src/addons/addons/editor-sounds/userscript.js"],"sourcesContent":["/* generated by pull.js */\nimport _js from \"./userscript.js\";\nexport const resources = {\n \"userscript.js\": _js,\n};\n","export default async function ({ addon, global, console }) {\n const ScratchBlocks = await addon.tab.traps.getBlockly();\n const injectCurrent = () => {\n const workspace = Blockly.getMainWorkspace();\n const pathToMedia = workspace.options.pathToMedia;\n ScratchBlocks.inject.loadSounds_(pathToMedia, workspace);\n };\n\n // Add sounds to the current workspace\n injectCurrent();\n\n // Add sounds to all future workspaces\n const originalInit = ScratchBlocks.init_;\n ScratchBlocks.init_ = function (...args) {\n const wksp = args[0];\n wksp.options.hasSounds = true;\n return originalInit.call(this, ...args);\n };\n\n addon.self.addEventListener(\"disabled\", () => {\n const workspace = Blockly.getMainWorkspace();\n const audio = workspace.getAudioManager();\n delete audio.SOUNDS_.click;\n delete audio.SOUNDS_.delete;\n });\n addon.self.addEventListener(\"reenabled\", injectCurrent);\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-editor-stage-left.js","sources":["webpack://GUI/./src/addons/addons/editor-stage-left/stageleft.css","webpack://GUI/./src/addons/addons/editor-stage-left/_runtime_entry.js","webpack://GUI/./src/addons/addons/editor-stage-left/fix-share-the-love.js"],"sourcesContent":["exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"[class^=\\\"stage-header_stage-button-icon\\\"] {\\n transform: scaleX(-1);\\n}\\n[class^=\\\"target-pane_target-pane\\\"] {\\n flex-direction: row-reverse;\\n}\\n[dir=\\\"ltr\\\"] [class^=\\\"target-pane_stage-selector-wrapper\\\"] {\\n margin-left: 0;\\n margin-right: calc(0.5rem / 2);\\n}\\n[dir=\\\"ltr\\\"] [class^=\\\"sprite-selector_sprite-selector\\\"] {\\n margin-left: calc(0.5rem / 2);\\n margin-right: 0;\\n}\\n[dir=\\\"rtl\\\"] [class^=\\\"target-pane_stage-selector-wrapper\\\"] {\\n margin-right: 0;\\n margin-left: calc(0.5rem / 2);\\n}\\n[dir=\\\"rtl\\\"] [class^=\\\"sprite-selector_sprite-selector\\\"] {\\n margin-right: calc(0.5rem / 2);\\n margin-left: 0;\\n}\\n[class^=\\\"gui_flex-wrapper\\\"] {\\n flex-direction: row-reverse;\\n overflow-x: hidden;\\n}\\n\\n[dir=\\\"ltr\\\"] [class^=\\\"backpack_backpack-header\\\"] {\\n border-top-right-radius: 0;\\n border-top-left-radius: 0.5rem;\\n}\\n[dir=\\\"ltr\\\"] [class^=\\\"blocks_blocks_C530M\\\"] .injectionDiv,\\n[dir=\\\"ltr\\\"] [class^=\\\"asset-panel_wrapper\\\"] {\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n border-bottom-left-radius: 0.5rem;\\n}\\n[dir=\\\"ltr\\\"] [class^=\\\"gui_extension-button-container\\\"] {\\n border-bottom-left-radius: 0.5rem;\\n}\\n\\n[dir=\\\"rtl\\\"] [class^=\\\"backpack_backpack-header\\\"] {\\n border-top-left-radius: 0;\\n border-top-right-radius: 0.5rem;\\n}\\n[dir=\\\"rtl\\\"] [class^=\\\"blocks_blocks_C530M\\\"] .injectionDiv,\\n[dir=\\\"rtl\\\"] [class^=\\\"asset-panel_wrapper\\\"] {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border-bottom-right-radius: 0.5rem;\\n}\\n[dir=\\\"rtl\\\"] [class^=\\\"gui_extension-button-container\\\"] {\\n border-bottom-right-radius: 0.5rem;\\n}\\n\\n.Popover {\\n /* See hide-flyout */\\n z-index: 51;\\n}\\n\\n/* hide-stage compatibility */\\n\\n.sa-stage-hidden [class*=\\\"stage-header_stage-size-row\\\"] {\\n right: auto;\\n left: 0.5rem;\\n width: calc(240px + 0.125rem);\\n justify-content: flex-end;\\n}\\n\\n[dir=\\\"rtl\\\"] .sa-stage-hidden [class*=\\\"stage-header_stage-size-row\\\"] {\\n left: auto;\\n right: 0.5rem;\\n}\\n\\n.sa-stage-hidden [class*=\\\"gui_tab-list_\\\"] {\\n padding-inline-start: calc(240px + 1.125rem);\\n}\\n\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _js from \"./fix-share-the-love.js\";\nimport _css from \"!css-loader!./stageleft.css\";\nexport const resources = {\n \"fix-share-the-love.js\": _js,\n \"stageleft.css\": _css,\n};\n","export default async function ({ addon, global, console }) {\n const ScratchBlocks = await addon.tab.traps.getBlockly();\n const resize = () => {\n const workspace = Blockly.getMainWorkspace();\n if (workspace) window.dispatchEvent(new Event(\"resize\"));\n };\n addon.self.addEventListener(\"disabled\", resize);\n addon.self.addEventListener(\"reenabled\", resize);\n const originalGetClientRect = ScratchBlocks.VerticalFlyout.prototype.getClientRect;\n ScratchBlocks.VerticalFlyout.prototype.getClientRect = function () {\n const rect = originalGetClientRect.call(this);\n if (!rect || addon.self.disabled) return rect;\n // undo the effect of BIG_NUM in https://github.com/LLK/scratch-blocks/blob/ab26fa2960643fa38fbc7b91ca2956be66055070/core/flyout_vertical.js#L739\n if (this.toolboxPosition_ === ScratchBlocks.TOOLBOX_AT_LEFT) {\n rect.left += 1000000000;\n }\n rect.width -= 1000000000;\n return rect;\n };\n resize();\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;;;;A","sourceRoot":""}

View File

@ -1,484 +0,0 @@
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-editor-theme3"],{
/***/ "./node_modules/css-loader/index.js!./src/addons/addons/editor-theme3/theme3.css":
/*!******************************************************************************!*\
!*** ./node_modules/css-loader!./src/addons/addons/editor-theme3/theme3.css ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/lib/css-base.js */ "./node_modules/css-loader/lib/css-base.js")(false);
// imports
// module
exports.push([module.i, "path.blocklyBlockBackground[fill=\"#FF6680\"],\npath.blocklyBlockBackground[fill=\"#5CB1D6\"],\npath.blocklyBlockBackground[fill=\"#FFBF00\"],\npath.blocklyBlockBackground[fill=\"#29beb8\"],\ng[data-category] > path.blocklyBlockBackground {\n stroke: #0003;\n}\ng[data-argument-type=\"dropdown\"] > path,\ng[data-argument-type=\"variable\"] > path,\npath[data-argument-type=\"boolean\"],\ng[data-shapes=\"c-block c-1 hat\"] > g[data-shapes=\"stack\"]:not(.blocklyDraggable) > path /* block preview in define block */ {\n stroke: #0003;\n fill: #0001;\n}\ng[data-argument-type=\"dropdown\"] > rect,\ng[data-argument-type=\"variable\"] > rect {\n stroke: #0003;\n fill: #0000;\n}\ng[data-argument-type*=\"text\"] > path,\n[data-category] g > line {\n stroke: #0002;\n}\n.scratchCategoryItemBubble {\n border-color: #0003 !important;\n}\n\n.fieldTextInput {\n border-color: #0003 !important;\n}\n\n.blocklyBlockBackground[fill=\"#FFFFFF\"] {\n fill: var(--editorTheme3-inputColor);\n}\n.blocklyEditableText > text {\n fill: var(--editorTheme3-inputColor-text);\n}\n.blocklyHtmlInput {\n background-color: var(--editorTheme3-inputColor);\n color: var(--editorTheme3-inputColor-text);\n}\n", ""]);
// exports
/***/ }),
/***/ "./src/addons/addons/editor-theme3/_runtime_entry.js":
/*!***********************************************************!*\
!*** ./src/addons/addons/editor-theme3/_runtime_entry.js ***!
\***********************************************************/
/*! exports provided: resources */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resources", function() { return resources; });
/* harmony import */ var _theme3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./theme3.js */ "./src/addons/addons/editor-theme3/theme3.js");
/* harmony import */ var _css_loader_theme3_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! css-loader!./theme3.css */ "./node_modules/css-loader/index.js!./src/addons/addons/editor-theme3/theme3.css");
/* harmony import */ var _css_loader_theme3_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_theme3_css__WEBPACK_IMPORTED_MODULE_1__);
/* generated by pull.js */
const resources = {
"theme3.js": _theme3_js__WEBPACK_IMPORTED_MODULE_0__["default"],
"theme3.css": _css_loader_theme3_css__WEBPACK_IMPORTED_MODULE_1___default.a
};
/***/ }),
/***/ "./src/addons/addons/editor-theme3/theme3.js":
/*!***************************************************!*\
!*** ./src/addons/addons/editor-theme3/theme3.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../libraries/common/cs/text-color.esm.js */ "./src/addons/libraries/common/cs/text-color.esm.js");
function updateSettings(addon, newStyle) {
document.documentElement.style.setProperty('--editorTheme3-inputColor-text', Object(_libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__["textColor"])(addon.settings.get('input-color')));
var stylesheet = "";
const textMode = addon.settings.get("text");
if (textMode === "black") {
stylesheet += "\n .blocklyText {\n fill: #575e75;\n }\n .blocklyDropdownText {\n fill: #575e75 !important;\n }\n .blocklyDropDownDiv .goog-menuitem,\n #s3devIDD > li {\n color: #575e75;\n }";
}
if (textMode === "colorOnWhite") {
stylesheet += "\n .blocklyDropDownDiv:not([style*=\"rgb(255, 255, 255)\"]) .goog-menuitem {\n color: #575e75;\n }";
}
if (textMode === "colorOnBlack") {
stylesheet += "\n .blocklyDropDownDiv:not([style*=\"rgb(255, 255, 255)\"]) .goog-option-selected .goog-menuitem-checkbox {\n filter: brightness(0) invert(1);\n }\n .u-dropdown-searchbar {\n border-color: rgba(255, 255, 255, 0.15);\n }";
}
var categories = {
motion: {
color: "#4C97FF",
tertiaryColor: "#3373CC"
},
looks: {
color: "#9966FF",
tertiaryColor: "#774DCB"
},
sounds: {
color: "#CF63CF",
tertiaryColor: "#BD42BD",
alt: "sound"
},
events: {
color: "#DE9E2E",
tertiaryColor: "#CC9900"
},
control: {
color: "#FFBF00",
tertiaryColor: "#CF8B17"
},
sensing: {
color: "#5CB1D6",
tertiaryColor: "#2E8EB8"
},
operators: {
color: "#59C059",
tertiaryColor: "#389438"
},
data: {
color: "#FF8C1A",
tertiaryColor: "#DB6E00",
alt: "variables"
},
"data-lists": {
color: "#FF661A",
tertiaryColor: "#E64D00",
alt: "lists",
var: "dataLists"
},
custom: {
color: "#FF6680",
tertiaryColor: "#FF6355",
alt: "myBlocks"
},
Pen: {
// For historical reasons, this is called "Pen".
color: "#0FBD8C",
tertiaryColor: "#0B8E69",
alt: "pen"
},
TurboWarp: {
color: "#ff4c4c",
tertiaryColor: "#e64444",
// TODO fix
alt: "tw",
var: "tw"
},
sa: {
color: "#29beb8",
tertiaryColor: "#3aa8a4",
alt: "a-b"
}
};
for (var prop of Object.keys(categories)) {
var settingName = categories[prop].var ? categories[prop].var : prop;
var propNameForSettings = prop === "TurboWarp" ? "tw" : prop;
if (textMode === "white" || textMode === "black") {
let tertiary = Object(_libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__["multiply"])(addon.settings.get(propNameForSettings + "-color"), {
r: 0.8,
g: 0.8,
b: 0.8
});
stylesheet += "g[data-category=\"".concat(prop, "\"] > path.blocklyBlockBackground {\n fill: var(--editorTheme3-").concat(settingName, "Color);\n ").concat(textMode === "black" ? "--sa-block-text-color: #575e75;" : "", "\n }\n .blocklyBlockBackground[fill=\"").concat(categories[prop].tertiaryColor, "\"] /* open dropdown */ {\n fill: #0003;\n }\n .scratchCategoryId-").concat(categories[prop].alt ? categories[prop].alt : prop, " > .scratchCategoryItemBubble {\n background-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n .blocklyDropDownDiv[data-category=\"").concat(prop, "\"]:not([style*=\"rgb(255, 255, 255)\"]) {\n background-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n border-color: #0003 !important;\n }\n .blocklyBubbleCanvas [stroke=\"").concat(categories[prop].tertiaryColor, "\"] {\n stroke: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.").concat(prop, " {\n background-color: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.").concat(prop, ":hover,\n #s3devIDD > li.").concat(prop, ".sel {\n background-color: ").concat(tertiary, ";\n }\n .sa-debugger-block-preview[data-category=\"").concat(prop, "\"] {\n background-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n ");
if (prop === "custom") {
stylesheet += "path.blocklyBlockBackground[fill=\"#FF6680\"] {\n fill: var(--editorTheme3-".concat(prop, "Color);\n ").concat(textMode === "black" ? "--sa-block-text-color: #575e75;" : "", "\n }\n #s3devIDD > li.null {\n background-color: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.null:hover,\n #s3devIDD > li.null.sel {\n background-color: ").concat(tertiary, ";\n }");
}
if (prop === "sensing") {
stylesheet += "path.blocklyBlockBackground[fill=\"#5CB1D6\"] {\n fill: var(--editorTheme3-".concat(prop, "Color);\n ").concat(textMode === "black" ? "--sa-block-text-color: #575e75;" : "", "\n }");
}
if (prop === "events") {
stylesheet += "path.blocklyBlockBackground[fill=\"#FFBF00\"] {\n fill: var(--editorTheme3-".concat(prop, "Color);\n ").concat(textMode === "black" ? "--sa-block-text-color: #575e75;" : "", "\n }\n .blocklyDropDownDiv[style*=\"rgb(255, 191, 0)\"] {\n background-color: var(--editorTheme3-").concat(prop, "Color) !important;\n border-color: #0003 !important;\n }");
}
if (prop === "Pen") {
stylesheet += "path.blocklyBlockBackground[fill=\"#0FBD8C\"] {\n fill: var(--editorTheme3-".concat(prop, "Color);\n ").concat(textMode === "black" ? "--sa-block-text-color: #575e75;" : "", "\n }\n .blocklyDropDownDiv[style*=\"rgb(15, 189, 140)\"] {\n background-color: var(--editorTheme3-").concat(prop, "Color) !important;\n border-color: #0003 !important;\n }\n #s3devIDD > li.extension {\n background-color: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.extension:hover,\n #s3devIDD > li.extension.sel {\n background-color: ").concat(tertiary, ";\n }");
}
if (prop === "sa") {
stylesheet += "path.blocklyBlockBackground[fill=\"#29beb8\"] {\n fill: var(--editorTheme3-".concat(prop, "Color);\n ").concat(textMode === "black" ? "--sa-block-text-color: #575e75;" : "", "\n }");
}
} else {
let background = {
colorOnWhite: "#fff",
colorOnBlack: "#282828"
}[textMode];
let inputShadow = {
colorOnWhite: "#00000026",
colorOnBlack: "#fff3"
}[textMode];
let secondary = Object(_libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__["multiply"])(addon.settings.get(propNameForSettings + "-color"), {
a: 0.15
});
let secondaryActive = Object(_libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__["multiply"])(addon.settings.get(propNameForSettings + "-color"), {
a: 0.25
});
let menuText = {
colorOnWhite: "#575e75",
colorOnBlack: "#fff"
}[textMode];
stylesheet += "g[data-category=\"".concat(prop, "\"] > path.blocklyBlockBackground,\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"dropdown\"] > rect,\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"variable\"] > rect {\n fill: ").concat(background, ";\n stroke: var(--editorTheme3-").concat(settingName, "Color);\n --sa-block-text-color: ").concat(menuText, ";\n --sa-block-secondary-color: ").concat(secondaryActive, ";\n }\n g[data-category=\"").concat(prop, "\"] > .blocklyText,\n g[data-category=\"").concat(prop, "\"] > g:not([data-id]) > .blocklyText /* variable and list reporters */ {\n fill: var(--editorTheme3-").concat(settingName, "Color);\n }\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"dropdown\"] > .blocklyDropdownText,\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"variable\"] > .blocklyDropdownText,\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"dropdown\"] > g > .blocklyDropdownText {\n fill: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"dropdown\"] > path,\n g[data-category=\"").concat(prop, "\"] > g[data-argument-type=\"variable\"] > path,\n g[data-category=\"").concat(prop, "\"] > path[data-argument-type=\"boolean\"] {\n fill: ").concat(secondary, ";\n stroke: var(--editorTheme3-").concat(settingName, "Color);\n }\n .blocklyBlockBackground[fill=\"").concat(categories[prop].tertiaryColor, "\"] /* open dropdown */ {\n fill: ").concat(secondaryActive, " !important;\n }\n .scratchCategoryId-").concat(categories[prop].alt ? categories[prop].alt : prop, " > .scratchCategoryItemBubble {\n background-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n .blocklyDropDownDiv[data-category=\"").concat(prop, "\"]:not([style*=\"rgb(255, 255, 255)\"]) {\n background-color: ").concat(background, " !important;\n border-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n .blocklyDropDownDiv[data-category=\"").concat(prop, "\"] .goog-menuitem-highlight {\n background-color: ").concat(secondaryActive, ";\n }\n .blocklyBubbleCanvas [stroke=\"").concat(categories[prop].tertiaryColor, "\"],\n g[data-category=").concat(prop, "] > g[data-argument-type*=\"text\"] > path,\n g[data-category=").concat(prop, "] > g > line {\n stroke: var(--editorTheme3-").concat(settingName, "Color);\n }\n .blocklyWidgetDiv.fieldTextInput[style*=\"box-shadow\"] {\n box-shadow: 0 0 0 4px ").concat(inputShadow, " !important;\n }\n #s3devIDD > li.").concat(prop, " {\n background-color: ").concat(secondary, ";\n color: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.").concat(prop, ":hover,\n #s3devIDD > li.").concat(prop, ".sel {\n background-color: ").concat(secondaryActive, ";\n }");
if (prop === "custom") {
stylesheet += "path.blocklyBlockBackground[fill=\"#FF6680\"] {\n fill: ".concat(background, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n --sa-block-text-color: ").concat(menuText, ";\n --sa-block-secondary-color: ").concat(secondaryActive, ";\n }\n path.blocklyBlockBackground[fill=\"#FF6680\"] ~ .blocklyText,\n g[data-shapes=\"c-block c-1 hat\"] > g[data-shapes=\"stack\"]:not(.blocklyDraggable) > .blocklyText,\n .blocklyEditableText > rect[fill=\"#FF3355\"] ~ .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color);\n }\n path.blocklyBlockBackground[fill=\"#FF6680\"] ~ [data-argument-type=\"text\"] > path {\n stroke: var(--editorTheme3-").concat(prop, "Color);\n }\n g[data-shapes=\"c-block c-1 hat\"] > g[data-shapes=\"stack\"]:not(.blocklyDraggable) > path,\n path[data-argument-type=\"boolean\"][fill=\"#FF3355\"] {\n fill: ").concat(secondary, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n }\n .blocklyEditableText > rect[fill=\"#FF3355\"] {\n fill: ").concat(secondary, ";\n }\n #s3devIDD > li.null {\n background-color: ").concat(secondary, ";\n color: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.null:hover,\n #s3devIDD > li.null.sel {\n background-color: ").concat(secondaryActive, ";\n }");
}
if (prop === "sensing") {
stylesheet += "path.blocklyBlockBackground[fill=\"#5CB1D6\"],\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#5CB1D6\"] {\n fill: ".concat(background, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n --sa-block-text-color: ").concat(menuText, ";\n --sa-block-secondary-color: ").concat(secondaryActive, ";\n }\n g[data-argument-type=\"dropdown\"] > path[fill=\"#47A8D1\"] {\n fill: ").concat(secondary, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n }\n path.blocklyBlockBackground[fill=\"#5CB1D6\"] ~ .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color);\n }\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#5CB1D6\"] ~ .blocklyText,\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#2E8EB8\"] ~ .blocklyText,\n g[data-argument-type=\"dropdown\"] > path[fill=\"#47A8D1\"] ~ * > .blocklyText,\n g[data-argument-type=\"dropdown\"] > path[fill=\"#2E8EB8\"] ~ * > .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color) !important;\n }\n .blocklyDropDownDiv[style*=\"rgb(92, 177, 214)\"] {\n background-color: ").concat(background, " !important;\n border-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n .blocklyDropDownDiv[style*=\"rgb(92, 177, 214)\"] .goog-menuitem-highlight {\n background-color: ").concat(secondaryActive, ";\n }");
}
if (prop === "events") {
stylesheet += "path.blocklyBlockBackground[fill=\"#FFBF00\"],\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#FFBF00\"],\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#CC9900\"] {\n fill: ".concat(background, ";\n stroke: var(--editorTheme3-").concat(settingName, "Color);\n --sa-block-text-color: ").concat(menuText, ";\n --sa-block-secondary-color: ").concat(secondaryActive, ";\n }\n path.blocklyBlockBackground[fill=\"#FFBF00\"] ~ .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color);\n }\n path.blocklyBlockBackground[fill=\"#FFBF00\"] ~ g[data-argument-type=\"variable\"] > g > .blocklyDropdownText {\n fill: var(--editorTheme3-").concat(prop, "Color) !important;\n }\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#FFBF00\"] ~ .blocklyText,\n g[data-argument-type=\"dropdown\"] > rect[fill=\"#CC9900\"] ~ .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color) !important;\n }\n .blocklyDropDownDiv[style*=\"rgb(255, 191, 0)\"] {\n background-color: ").concat(background, " !important;\n border-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n .blocklyDropDownDiv[style*=\"rgb(255, 191, 0)\"] .goog-menuitem-highlight {\n background-color: ").concat(secondaryActive, ";\n }");
}
if (prop === "Pen") {
stylesheet += "g[data-category] /* specificity */ > path.blocklyBlockBackground[fill=\"#0FBD8C\"] {\n fill: ".concat(background, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n --sa-block-text-color: ").concat(menuText, ";\n --sa-block-secondary-color: ").concat(secondaryActive, ";\n }\n path.blocklyBlockBackground[fill=\"#0FBD8C\"] ~ .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color);\n }\n path.blocklyBlockBackground[fill=\"#0FBD8C\"] ~ g[data-argument-type=\"dropdown\"] > g > .blocklyDropdownText {\n fill: var(--editorTheme3-").concat(prop, "Color) !important;\n }\n g[data-argument-type=\"dropdown\"] > path[fill=\"#0DA57A\"] {\n fill: ").concat(secondary, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n }\n .blocklyDropDownDiv[style*=\"rgb(15, 189, 140)\"] {\n background-color: ").concat(background, " !important;\n border-color: var(--editorTheme3-").concat(settingName, "Color) !important;\n }\n .blocklyDropDownDiv[style*=\"rgb(15, 189, 140)\"] .goog-menuitem-highlight {\n background-color: ").concat(secondaryActive, ";\n }\n path.blocklyBlockBackground[fill=\"#0FBD8C\"] ~ [data-argument-type=\"text\"] > path,\n path.blocklyBlockBackground[fill=\"#0FBD8C\"] ~ g > line {\n stroke: var(--editorTheme3-").concat(prop, "Color);\n }\n #s3devIDD > li.extension {\n background-color: ").concat(secondary, ";\n color: var(--editorTheme3-").concat(settingName, "Color);\n }\n #s3devIDD > li.extension:hover,\n #s3devIDD > li.extension.sel {\n background-color: ").concat(secondaryActive, ";\n }");
}
if (prop === "sa") {
stylesheet += "path.blocklyBlockBackground[fill=\"#29beb8\"] {\n fill: ".concat(background, ";\n stroke: var(--editorTheme3-").concat(prop, "Color);\n --sa-block-text-color: ").concat(menuText, ";\n --sa-block-secondary-color: ").concat(secondaryActive, ";\n }\n path.blocklyBlockBackground[fill=\"#29beb8\"] ~ .blocklyText {\n fill: var(--editorTheme3-").concat(prop, "Color);\n }\n path.blocklyBlockBackground[fill=\"#29beb8\"] ~ [data-argument-type=\"text\"] > path {\n stroke: var(--editorTheme3-").concat(prop, "Color);\n }");
}
}
}
document.documentElement.style.setProperty("--editorTheme3-inputColor-text", Object(_libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__["textColor"])(addon.settings.get("input-color")));
newStyle.textContent = stylesheet;
}
/* harmony default export */ __webpack_exports__["default"] = (async function ({
addon,
global,
console
}) {
const otherStyle = document.querySelector("[data-addon-id='".concat(addon.self.id, "']"));
const newStyle = document.createElement("style");
updateSettings(addon, newStyle);
addon.settings.addEventListener("change", () => {
updateSettings(addon, newStyle);
});
newStyle.className = "scratch-addons-style";
newStyle.setAttribute("data-addon-id", addon.self.id);
newStyle.setAttribute("data-addon-index", otherStyle.getAttribute("data-addon-index"));
otherStyle.parentElement.insertBefore(newStyle, otherStyle.nextSibling); // Look for reenable event to enable the style. cs.js cannot handle an appended style.
addon.self.addEventListener("reenabled", () => newStyle.disabled = false);
});
/***/ }),
/***/ "./src/addons/libraries/common/cs/text-color.esm.js":
/*!**********************************************************!*\
!*** ./src/addons/libraries/common/cs/text-color.esm.js ***!
\**********************************************************/
/*! exports provided: parseHex, convertToHex, convertFromHsv, convertToHsv, brightness, textColor, multiply, brighten, alphaBlend, makeHsv, recolorFilter */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseHex", function() { return parseHex; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToHex", function() { return convertToHex; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertFromHsv", function() { return convertFromHsv; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToHsv", function() { return convertToHsv; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brightness", function() { return brightness; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "textColor", function() { return textColor; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multiply", function() { return multiply; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brighten", function() { return brighten; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "alphaBlend", function() { return alphaBlend; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeHsv", function() { return makeHsv; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recolorFilter", function() { return recolorFilter; });
function parseHex(hex) {
return {
r: parseInt(hex.substring(1, 3), 16),
g: parseInt(hex.substring(3, 5), 16),
b: parseInt(hex.substring(5, 7), 16),
a: hex.length >= 9 ? parseInt(hex.substring(7, 9), 16) / 255 : 1
};
}
function convertComponentToHex(a) {
a = Math.round(a).toString(16);
if (a.length === 1) return "0".concat(a);
return a;
}
function convertToHex(obj) {
const r = convertComponentToHex(obj.r);
const g = convertComponentToHex(obj.g);
const b = convertComponentToHex(obj.b);
const a = obj.a !== undefined ? convertComponentToHex(255 * obj.a) : "";
return "#".concat(r).concat(g).concat(b).concat(a);
}
function convertFromHsv({
h,
s,
v
}) {
if (s === 0) return {
r: 255 * v,
g: 255 * v,
b: 255 * v
};
const h1 = h / 60;
const hi = Math.floor(h1);
const x = v * (1 - s * (1 - h1 + hi));
const y = v * (1 - s * (h1 - hi));
const z = v * (1 - s);
switch (hi) {
case 0:
return {
r: 255 * v,
g: 255 * x,
b: 255 * z
};
case 1:
return {
r: 255 * y,
g: 255 * v,
b: 255 * z
};
case 2:
return {
r: 255 * z,
g: 255 * v,
b: 255 * x
};
case 3:
return {
r: 255 * z,
g: 255 * y,
b: 255 * v
};
case 4:
return {
r: 255 * x,
g: 255 * z,
b: 255 * v
};
case 5:
return {
r: 255 * v,
g: 255 * z,
b: 255 * y
};
default:
// ???
return {
r: 0,
g: 0,
b: 0
};
}
}
function convertToHsv({
r,
g,
b
}) {
r /= 255;
g /= 255;
b /= 255;
const v = Math.max(r, g, b);
const d = v - Math.min(r, g, b);
if (d === 0) return {
h: 0,
s: 0,
v: v
}; // gray
const s = d / v;
const hr = (v - r) / d;
const hg = (v - g) / d;
const hb = (v - b) / d;
let h1;
if (!hr) h1 = hb - hg;else if (!hg) h1 = 2 + hr - hb;else if (!hb) h1 = 4 + hg - hr;
const h = 60 * h1 % 360;
return {
h,
s,
v
};
}
function brightness(hex) {
const {
r,
g,
b
} = parseHex(hex);
return r * 0.299 + g * 0.587 + b * 0.114;
}
function textColor(hex, black, white, threshold) {
threshold = threshold !== undefined ? threshold : 170;
if (typeof threshold !== "number") threshold = brightness(threshold);
if (brightness(hex) > threshold) {
// https://stackoverflow.com/a/3943023
return black !== undefined ? black : "#575e75";
} else {
return white !== undefined ? white : "#ffffff";
}
}
function multiply(hex, c) {
const {
r,
g,
b,
a
} = parseHex(hex);
if (c.r === undefined) c.r = 1;
if (c.g === undefined) c.g = 1;
if (c.b === undefined) c.b = 1;
if (c.a === undefined) c.a = 1;
return convertToHex({
r: c.r * r,
g: c.g * g,
b: c.b * b,
a: c.a * a
});
}
function brighten(hex, c) {
const {
r,
g,
b,
a
} = parseHex(hex);
if (c.r === undefined) c.r = 1;
if (c.g === undefined) c.g = 1;
if (c.b === undefined) c.b = 1;
if (c.a === undefined) c.a = 1;
return convertToHex({
r: (1 - c.r) * 255 + c.r * r,
g: (1 - c.g) * 255 + c.g * g,
b: (1 - c.b) * 255 + c.b * b,
a: 1 - c.a + c.a * a
});
}
function alphaBlend(opaqueHex, transparentHex) {
const {
r: r1,
g: g1,
b: b1
} = parseHex(opaqueHex);
const {
r: r2,
g: g2,
b: b2,
a
} = parseHex(transparentHex);
return convertToHex({
r: (1 - a) * r1 + a * r2,
g: (1 - a) * g1 + a * g2,
b: (1 - a) * b1 + a * b2
});
}
function makeHsv(hSource, sSource, vSource) {
const h = typeof hSource === "number" ? hSource : convertToHsv(parseHex(hSource)).h;
const s = typeof hSource !== "number" && convertToHsv(parseHex(hSource)).s === 0 ? 0 : typeof sSource === "number" ? sSource : convertToHsv(parseHex(sSource)).s;
const v = typeof vSource === "number" ? vSource : convertToHsv(parseHex(vSource)).v;
return convertToHex(convertFromHsv({
h,
s,
v
}));
}
function recolorFilter(hex) {
const {
r,
g,
b
} = parseHex(hex);
return "url(\"data:image/svg+xml,\n <svg xmlns='http://www.w3.org/2000/svg'>\n <filter id='recolor'>\n <feColorMatrix values='\n 0 0 0 0 ".concat(r / 255, "\n 0 0 0 0 ").concat(g / 255, "\n 0 0 0 0 ").concat(b / 255, "\n 0 0 0 1 0\n '/>\n </filter>\n </svg>#recolor\n \")").split("\n").join("");
}
/***/ })
}]);
//# sourceMappingURL=addon-entry-editor-theme3.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-hide-new-variables.js","sources":["webpack://GUI/./src/addons/addons/hide-new-variables/_runtime_entry.js","webpack://GUI/./src/addons/addons/hide-new-variables/userscript.js"],"sourcesContent":["/* generated by pull.js */\nimport _js from \"./userscript.js\";\nexport const resources = {\n \"userscript.js\": _js,\n};\n","export default async function ({ addon, msg, global, console }) {\n const ScratchBlocks = await addon.tab.traps.getBlockly();\n const originalCreateVariable = ScratchBlocks.Variables.createVariable;\n // https://github.com/LLK/scratch-blocks/blob/893c7e7ad5bfb416eaed75d9a1c93bdce84e36ab/core/variables.js#L277\n ScratchBlocks.Variables.createVariable = function (workspace, opt_callback, opt_type) {\n if (!addon.self.disabled) {\n const originalCallback = opt_callback;\n opt_callback = (variableBlockId) => {\n if (variableBlockId) {\n const flyout = workspace.isFlyout ? workspace : workspace.getFlyout();\n if (flyout.setCheckboxState) {\n flyout.setCheckboxState(variableBlockId, false);\n }\n }\n\n if (originalCallback) {\n originalCallback(variableBlockId);\n }\n };\n }\n return originalCreateVariable.call(this, workspace, opt_callback, opt_type);\n };\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;A","sourceRoot":""}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-load-extensions.js","sources":["webpack://GUI/./src/addons/addons/load-extensions/_runtime_entry.js","webpack://GUI/./src/addons/addons/load-extensions/userscript.js"],"sourcesContent":["/* generated by pull.js */\nimport _js from \"./userscript.js\";\nexport const resources = {\n \"userscript.js\": _js,\n};\n","export default async function ({ addon, global, console }) {\n const vm = addon.tab.traps.vm;\n const loadExtensions = () => {\n if (addon.self.disabled) return;\n // IDs are taken from https://github.com/LLK/scratch-vm/blob/ffa78b91b8645b6a8c80f698a3637bb73abf2931/src/extension-support/extension-manager.js#L11\n const EXTENSIONS = [\"music\", \"pen\", \"text2speech\", \"translate\"];\n for (let ext of EXTENSIONS) {\n // Check if setting enabled and it's not already loaded\n if (addon.settings.get(ext) && !vm.extensionManager.isExtensionLoaded(ext)) {\n vm.extensionManager.loadExtensionIdSync(ext);\n }\n }\n };\n if (vm.editingTarget) {\n loadExtensions();\n } else {\n vm.runtime.once(\"PROJECT_LOADED\", loadExtensions);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-mouse-pos.js","sources":["webpack://GUI/./src/addons/addons/mouse-pos/style.css","webpack://GUI/./src/addons/addons/mouse-pos/_runtime_entry.js","webpack://GUI/./src/addons/addons/mouse-pos/userscript.js"],"sourcesContent":["exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".pos-container-container {\\n display: flex;\\n align-items: center;\\n padding: 0.25rem;\\n user-select: none;\\n width: 45px;\\n justify-content: center;\\n}\\n\\n.pos-container {\\n font-size: 0.6rem;\\n font-weight: bold;\\n font-family: \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif;\\n color: #5cb1d6;\\n white-space: nowrap;\\n}\\n\\n/* Use pseudo elements to avoid firing mutation observers by just moving the cursor */\\n.pos-container > span::after {\\n content: attr(data-content);\\n}\\n\\n.sa-mouse-pos-small .pos-container-container {\\n display: none !important;\\n}\\n\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _js from \"./userscript.js\";\nimport _css from \"!css-loader!./style.css\";\nexport const resources = {\n \"userscript.js\": _js,\n \"style.css\": _css,\n};\n","export default async function ({ addon, global, console }) {\n var posContainerContainer = document.createElement(\"div\");\n addon.tab.displayNoneWhileDisabled(posContainerContainer, { display: \"flex\" });\n\n var posContainer = document.createElement(\"div\");\n var pos = document.createElement(\"span\");\n\n posContainerContainer.className = \"pos-container-container\";\n posContainer.className = \"pos-container\";\n\n posContainerContainer.appendChild(posContainer);\n posContainer.appendChild(pos);\n\n const vm = addon.tab.traps.vm;\n\n vm.runtime.ioDevices.mouse.__scratchX = vm.runtime.ioDevices.mouse._scratchX;\n vm.runtime.ioDevices.mouse.__scratchY = vm.runtime.ioDevices.mouse._scratchY;\n\n var x = vm.runtime.ioDevices.mouse.__scratchX ? vm.runtime.ioDevices.mouse.__scratchX : 0;\n var y = vm.runtime.ioDevices.mouse.__scratchY ? vm.runtime.ioDevices.mouse.__scratchY : 0;\n\n const showUpdatedValue = () => pos.setAttribute(\"data-content\", `${Math.round(x)}, ${Math.round(y)}`);\n\n Object.defineProperty(vm.runtime.ioDevices.mouse, \"_scratchX\", {\n get: function () {\n return this.__scratchX;\n },\n set: function (setx) {\n x = setx;\n showUpdatedValue();\n this.__scratchX = setx;\n },\n });\n\n Object.defineProperty(vm.runtime.ioDevices.mouse, \"_scratchY\", {\n get: function () {\n return this.__scratchY;\n },\n set: function (sety) {\n y = sety;\n showUpdatedValue();\n this.__scratchY = sety;\n },\n });\n\n if (addon.tab.redux.state && addon.tab.redux.state.scratchGui.stageSize.stageSize === \"small\") {\n document.body.classList.add(\"sa-mouse-pos-small\");\n }\n document.addEventListener(\n \"click\",\n (e) => {\n if (e.target.closest(\"[class*='stage-header_stage-button-first']\")) {\n document.body.classList.add(\"sa-mouse-pos-small\");\n } else if (e.target.closest(\"[class*='stage-header_stage-button-last']\")) {\n document.body.classList.remove(\"sa-mouse-pos-small\");\n }\n },\n { capture: true }\n );\n\n while (true) {\n await addon.tab.waitForElement('[class*=\"controls_controls-container\"]', {\n markAsSeen: true,\n reduxEvents: [\"scratch-gui/mode/SET_PLAYER\", \"fontsLoaded/SET_FONTS_LOADED\", \"scratch-gui/locales/SELECT_LOCALE\"],\n });\n\n if (addon.tab.editorMode === \"editor\") {\n addon.tab.appendToSharedSpace({ space: \"afterStopButton\", element: posContainerContainer, order: 1 });\n }\n }\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AACA;AAUA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAFA;AACA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;;;A","sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-script-snap.js","sources":["webpack://GUI/./src/addons/addons/script-snap/_runtime_entry.js","webpack://GUI/./src/addons/addons/script-snap/userscript.js"],"sourcesContent":["/* generated by pull.js */\nimport _js from \"./userscript.js\";\nexport const resources = {\n \"userscript.js\": _js,\n};\n","export default async function ({ addon, global, console }) {\n const Blockly = await addon.tab.traps.getBlockly();\n let workspace = Blockly.getMainWorkspace();\n // Handle future workspaces\n const originalInit = Blockly.init_;\n Blockly.init_ = function (...args) {\n workspace = args[0];\n if (!addon.self.disabled) setGrid(true);\n return originalInit.call(this, ...args);\n };\n\n setGrid(true);\n\n addon.settings.addEventListener(\"change\", () => setGrid(true));\n addon.self.addEventListener(\"disabled\", () => setGrid(false));\n addon.self.addEventListener(\"reenabled\", () => setGrid(true));\n\n function setGrid(enabled) {\n workspace.grid_.snapToGrid_ = enabled;\n if (enabled) workspace.grid_.spacing_ = addon.settings.get(\"grid\");\n else workspace.grid_.spacing_ = 40;\n workspace.grid_.update(workspace.scale);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;A","sourceRoot":""}

View File

@ -1 +0,0 @@
{"version":3,"file":"js/addon-entry-search-sprites.js","sources":["webpack://GUI/./src/addons/addons/search-sprites/search-bar.css","webpack://GUI/./src/addons/addons/search-sprites/_runtime_entry.js","webpack://GUI/./src/addons/addons/search-sprites/userscript.js"],"sourcesContent":["exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".sa-search-sprites-container {\\n position: relative;\\n display: flex;\\n align-items: center;\\n}\\n\\ninput.sa-search-sprites-box {\\n width: 100%;\\n box-sizing: border-box;\\n background-color: transparent;\\n border: 0px;\\n border-bottom: 1px solid hsla(0, 0%, 1%, 0.15);\\n outline: none;\\n padding: 5px 20px 5px 10px;\\n}\\n\\n.sa-search-sprites-reset {\\n display: none;\\n margin: 0;\\n padding: 0;\\n background: none;\\n border: none;\\n outline: none;\\n cursor: pointer;\\n position: absolute;\\n right: 0;\\n padding-right: 5px;\\n font-size: 25px;\\n}\\n\\n.sa-search-sprites-box:not(:placeholder-shown) ~ .sa-search-sprites-reset {\\n display: block;\\n}\\n\", \"\"]);\n\n// exports\n","/* generated by pull.js */\nimport _js from \"./userscript.js\";\nimport _css from \"!css-loader!./search-bar.css\";\nexport const resources = {\n \"userscript.js\": _js,\n \"search-bar.css\": _css,\n};\n","export default async function ({ addon, global, console, msg }) {\n let spritesContainer;\n let spriteSelectorContainer;\n\n const container = document.createElement(\"div\");\n container.className = \"sa-search-sprites-container\";\n addon.tab.displayNoneWhileDisabled(container, {\n display: \"flex\",\n });\n\n const searchBox = document.createElement(\"input\");\n searchBox.className = \"sa-search-sprites-box\";\n searchBox.placeholder = msg(\"placeholder\");\n searchBox.autocomplete = \"off\";\n // search might make more sense, but browsers treat them special in ways that this addon does not handle,\n // so just leave it as a text input. Also note that Scratch uses type=text for its own search inputs in\n // the libraries, so this fits right in.\n searchBox.type = \"text\";\n\n const search = (query) => {\n if (!spritesContainer) return;\n\n query = query.toLowerCase();\n const containsQuery = (str) => str.toLowerCase().includes(query);\n\n for (const sprite of spritesContainer.children) {\n const visible =\n !query ||\n containsQuery(sprite.children[0].children[1].innerText) ||\n (containsQuery(sprite.children[0].children[2].children[0].innerText) &&\n sprite.children[0].classList.contains(\"sa-folders-folder\"));\n sprite.style.display = visible ? \"\" : \"none\";\n }\n };\n\n searchBox.addEventListener(\"input\", (e) => {\n search(e.target.value);\n });\n\n const reset = () => {\n search(\"\");\n searchBox.value = \"\";\n };\n\n const resetButton = document.createElement(\"button\");\n resetButton.className = \"sa-search-sprites-reset\";\n resetButton.addEventListener(\"click\", reset);\n resetButton.textContent = \"×\";\n addon.self.addEventListener(\"disabled\", reset);\n\n container.appendChild(searchBox);\n container.appendChild(resetButton);\n\n while (true) {\n await addon.tab.waitForElement(\"div[class^='sprite-selector_items-wrapper']\", {\n markAsSeen: true,\n reduxEvents: [\"scratch-gui/mode/SET_PLAYER\", \"fontsLoaded/SET_FONTS_LOADED\", \"scratch-gui/locales/SELECT_LOCALE\"],\n reduxCondition: (state) => !state.scratchGui.mode.isPlayerOnly,\n });\n\n spritesContainer = document.querySelector('[class^=\"sprite-selector_items-wrapper\"]');\n spriteSelectorContainer = document.querySelector('[class^=\"sprite-selector_scroll-wrapper\"]');\n spriteSelectorContainer.insertBefore(container, spritesContainer);\n reset(); // Clear search box after going outside then inside\n }\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AADA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,15 +0,0 @@
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-l10n-zh-tw"],{
/***/ "./src/addons/addons-l10n/zh-tw.json":
/*!*******************************************!*\
!*** ./src/addons/addons-l10n/zh-tw.json ***!
\*******************************************/
/*! exports provided: default */
/***/ (function(module) {
module.exports = JSON.parse("{}");
/***/ })
}]);
//# sourceMappingURL=addon-l10n-zh-tw.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,52 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Privacy Policy</title>
<meta charset="utf8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: 0; padding: 0;
}
header {
background-color: hsla(0, 100%, 65%, 1);
color: white;
text-align: center;
padding: 20px 0;
}
main {
max-width: 600px;
margin: auto;
}
@media (prefers-color-scheme: dark) {
body { background: #111; color: #eee; }
a { color: #4af; }
}
</style>
</head>
<body>
<header>
<h1>TurboWarp Privacy Policy</h1>
</header>
<main>
<!-- UPDATE THIS WHEN MAKING CONTENT CHANGES -->
<p><i>Updated September 29th, 2021</i></p>
<p>This document applies to https://turbowarp.org, https://experiments.turbowarp.org, and https://staging.turbowarp.org.</p>
<p>We may log anonymous aggregated data such as how many people use the site, how often a feature is used, what operating system and browser is used, and diagnostic information such as cache hit ratios.</p>
<p>When using cloud variables, the project ID and your username may be logged for up to 14 days.</p>
<p>Your randomly generated or chosen username is stored in your browser's local storage. To mitigate the potential to track users with this feature, all randomly generated usernames are anonymized before the server receives them. However, usernames explicitly set by a user may be logged to help prevent abuse.</p>
<p>Scratch extensions that require Wi-Fi (such as Translate, Text to Speech, LEGO, micro:bit, etc.) may connect to the Scratch API to implement these features. <a href="https://scratch.mit.edu/privacy_policy/">Refer to the Scratch privacy policy for more information</a>. The Translate extension may instead make requests to a TurboWarp API, which may then forward your request to the Scratch API and log the message being translated and the result for caching and performance.</p>
<p>In rare circumstances, connections that are appear to be spam may have their IP logged for up to 24 hours. This happens very infrequently and only in cases of extreme abuse.</p>
<p>This document does not apply to third-parties, including other users or bots connected to cloud variables, links to external websites, custom extensions, or some advanced URL parameters.</p>
<h2>Contact</h2>
<p>Any concerns related to privacy or any other matter should be sent to: <a href="mailto:contact@turbowarp.org">contact@turbowarp.org</a></p>
</main>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="600"
height="372"
version="1.1"
viewBox="0 0 600 372"
id="svg6">
<rect
width="600"
height="372"
fill="#0fbd8c"
id="rect2"
style="fill:#ff4c4c;fill-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 508 B

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="600" height="372" version="1.1" viewBox="0 0 600 372" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!-- Based on https://github.com/jesseweed/seti-ui/blob/master/icons/json.svg -->
<rect width="600" height="372" fill="#0fbd8c"/>
<path d="m194.14 174.17c18.681 0 21.172-9.9635 21.172-18.682 0-7.4726-1.2454-13.7-1.2454-21.172s-1.2454-14.945-1.2454-21.172c0-26.154 16.191-37.363 42.345-37.363h9.9635v23.663h-4.9817c-12.454 0-16.191 7.4726-16.191 19.927 0 4.9817 1.2454 9.9635 1.2454 16.191 0 4.9817 1.2454 11.209 1.2454 18.682 0 21.172-8.718 28.645-23.663 32.381 14.945 3.7363 23.663 11.209 23.663 32.381 0 7.4726-1.2454 13.7-1.2454 18.681 0 4.9817-1.2454 11.209-1.2454 14.945 0 12.454 3.7363 19.927 16.191 19.927h4.9817v23.663h-9.9635c-24.909 0-41.099-9.9635-41.099-37.363 0-7.4726 0-13.7 1.2454-21.172s1.2454-14.945 1.2454-21.172c0-7.4726-2.4909-18.682-21.172-18.682zm211.72 21.172c-18.681 0-21.172 11.209-21.172 18.681 0 7.4726 1.2454 13.7 1.2454 21.172 1.2454 7.4726 1.2454 14.945 1.2454 21.172 0 27.4-17.436 37.363-42.345 37.363h-9.9635v-21.172h4.9817c12.454 0 16.191-7.4726 16.191-19.927 0-4.9817 0-9.9635-1.2454-14.945 0-6.2272-1.2454-12.454-1.2454-18.681 0-21.172 8.718-28.645 23.663-32.381-14.945-3.7363-23.663-11.209-23.663-32.381 0-7.4726 1.2454-13.7 1.2454-18.682 1.2454-6.2272 1.2454-11.209 1.2454-16.191 0-12.454-4.9817-18.682-16.191-19.927h-4.9817v-23.663h9.9635c26.154 0 42.345 11.209 42.345 37.363 0 7.4726-1.2454 13.7-1.2454 21.172-1.2454 7.4726-1.2454 14.945-1.2454 21.172 0 8.718 2.4909 18.682 21.172 18.682z" fill="#fff" stroke-width="12.454"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135.46666 135.46667" height="512" width="512"><path style="line-height:1.25;-inkscape-font-specification:'Black boys on mopeds'" d="M121.2258 14.400876q-1.5653 6.848173-2.34795 14.870317-.19566 2.152281.39132 5.478537.58698 3.913242.58698 5.478537 0 5.087214-6.65249 5.087214-4.30458 0-5.67421-2.543607-.19567-4.304565.19566-11.739722.39132-8.804792.39132-11.739724-.19565 0-.58698-.391324-18.196568.782649-34.240852 2.347945-.391331 2.543606 0 6.261186l.782638 7.043833q-.782638 6.065524-.782638 18.000911.586986 5.087212.586986 43.63264v14.283331q0 3.32625.978303 4.69589h12.131056q7.435148-.97832 7.435148 6.26117 0 4.30458-4.108893 6.06553-2.543618.97833-9.000465.39134-3.913241-.39134-9.196117-.19566-7.239497.9783-17.609585 1.56528-10.565739.587-12.913689-2.93492-1.565297-2.34795 0-4.89157 2.739268-4.30455 14.283325-4.30455 6.065527 0 6.065527-3.32626 0-1.76095-.195666-3.32625 0-4.89156.195666-8.60914.586986-10.565749 0-29.740628-.78265-27.784012.586986-49.893822l-.586986-.586988q-6.065527.391324-22.696797-.195661-.782648 0-11.935385.782649 2.739268 18.783556 3.130593 26.8057l-.391325 5.282877q-.195661 2.934929-4.891553 2.934929-3.717577 0-6.261184-14.087667-1.173973-8.413469-2.347945-17.022598 0-1.369634-1.369634-4.69589-1.173973-3.521918-1.173973-5.282876 0-4.891551 7.435159-6.065523.586985 0 1.956619.195661 1.369634.195664 1.956622.195664h48.524193q18.000904-.7826491 34.827836-3.1305928 1.17398-.5869876 3.52192-1.1739729 4.1089-.3913255 7.04383 1.9566193 2.93493 2.1522824 1.95663 6.2611854z" font-weight="400" font-size="148.867" font-family="Black boys on mopeds" letter-spacing="0" word-spacing="0" fill="#fff"/><text y="117.92857" x="-103.37649" style="line-height:1.25" font-weight="400" font-size="10.5833" font-family="sans-serif" letter-spacing="0" word-spacing="0" stroke-width=".264583"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because one or more lines are too long

View File

@ -3,8 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Scratch - Imagine, Program, Share</title>
<script src="/js/all.js"></script>
<title>Addon Settings - TurboWarp</title>
<style>
body[splash-theme="dark"]:not(.tw-loaded) {
background: #111;

View File

@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf8">
<title>August 2023 Scratch Maintenance - TurboWarp</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: 0;
border-top: 4px solid #ff4c4c;
padding: 0 4px;
}
main {
max-width: 600px;
margin: auto;
}
.quote {
padding: 12px 20px;
border: 1px solid #ccc;
background-color: #f7f7f7;
}
.quote p {
font-weight: bold;
margin: 0;
}
.quote ul {
margin: 0.5rem 0 0 0;
padding: 0 0 0 1.2rem;
}
h2 {
font-size: 1.2em;
}
</style>
</head>
<body>
<main>
<h1>August 2023 Scratch Maintenance</h1>
<p>The Scratch Team <a href="https://scratch.mit.edu/discuss/topic/702112/">announced</a> that Scratch may be temporarily down for maintenance in the near future:</p>
<div class="quote">
<p>ScratchCat wrote:</p>
<ul>
<li>August 11 at 8 PM ET - August 13 at 1159 PM ET: scratch.mit.edu will be in maintenance mode during portions of this weekend, and you may not be able to access Scratch. If you want to use Scratch during this time, make sure to download the Scratch App to your device.</li>
<li>August 18, 8 PM ET - August 20, 1159 ET: Translation extension blocks, Text-To-Speech extension blocks, and access to projects and assets will be temporarily unavailable during portions of the weekend. The rest of the site should be working normally during this time.</li>
<li>August 25, 8 PM ET - August 27, 1159 ET: The Backpack tool, Cloud Data, and thumbnail updates will be temporarily unavailable during portions of the weekend. The rest of the site should be working normally during this time.</li>
</ul>
</div>
<p>Parts of this maintenance will impact TurboWarp and other tools that use the Scratch API. <s>We're assuming this maintenance is mostly internal stuff and that there won't be significant outwards changes.</s></p>
<!-- https://crt.sh/?q=scratch.org -->
<p><b>Update:</b> Based on public logs, we speculate that Scratch could make larger changes than we initially anticipated. We are already preparing if they do (which seems unlikely), but it could result in parts of TurboWarp being unavailable for longer than originally anticipated.</p>
<h2>What won't be affected</h2>
<p>All of the TurboWarp websites will be up. You will still be able to load projects saved to your computer using the <a href="https://turbowarp.org/editor">website</a>, <a href="https://desktop.turbowarp.org/">desktop app</a>, or <a href="https://forkphorus.github.io/">packager</a>. Packaged projects will still load. TurboWarp's backpack and restore points will be unaffected. Our cloud variable server should still work, and almost all custom extensions will not be affected.</p>
<h2>August 11 at 8 PM ET &ndash; August 13 at 11:59 PM ET</h2>
<p>Loading projects from the Scratch website <b>may not</b> work. (Forum post is a bit vague)</p>
<h2>August 18 at 8 PM ET &ndash; August 20 at 11:59 PM ET</h2>
<p>Loading projects from the Scratch website <b>may not</b> work anywhere. Translate blocks, text-to-speech blocks, and extensions that use the Scratch API <b>may not</b> work in any project. (We cache translate requests, so some common translations may still work)</p>
<h2>August 25 at 8 PM ET &ndash; August 27 at 11:59 PM ET</h2>
<p>No effect anticipated.</p>
<h2>If Scratch does make significant changes</h2>
<p>It will take a bit longer, but we will get everything working again shortly.</p>
</main>
</body>
</html>

View File

@ -193,6 +193,11 @@ const startNextFetch = ([resolve, url, options]) => {
checkStartNextFetch();
return buffer;
}).catch(error => {
if (error === 403) {
// Retrying this request will not help, so return an error now.
throw error;
}
console.warn("Attempt to fetch ".concat(url, " failed"), error);
if (!firstError) {
@ -229,4 +234,4 @@ module.exports = saferFetchAsArrayBuffer;
/***/ })
/******/ });
//# sourceMappingURL=6a555f2a5bb975f06653.worker.js.map
//# sourceMappingURL=ebb29433c3000ca9948a.worker.js.map

View File

@ -1,14 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<script src="/js/all.js"></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="google" value="notranslate">
<meta name="description" content="TurboWarp is a Scratch mod with a compiler to run projects faster, dark mode for your eyes, a bunch of addons to improve the editor, and more." />
<title>Scratch - Imagine, Program, Share</title>
<title>TurboWarp - Run Scratch projects faster</title>
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="manifest" href="manifest.webmanifest">
@ -31,9 +28,6 @@
100% { transform: rotate(360deg); }
}
</style>
<link rel="dns-prefetch" href="https://trampoline.turbowarp.org/">
<link rel="dns-prefetch" href="https://projects.scratch.mit.edu/">
<link rel="dns-prefetch" href="https://assets.scratch.mit.edu/">
</head>
<body>
<div id="splash" aria-hidden="true">

View File

@ -28,9 +28,6 @@
100% { transform: rotate(360deg); }
}
</style>
<link rel="dns-prefetch" href="https://trampoline.turbowarp.org/">
<link rel="dns-prefetch" href="https://projects.scratch.mit.edu/">
<link rel="dns-prefetch" href="https://assets.scratch.mit.edu/">
</head>
<body>
<div id="splash" aria-hidden="true">

BIN
turbowarp/main/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -28,9 +28,6 @@
100% { transform: rotate(360deg); }
}
</style>
<link rel="dns-prefetch" href="https://trampoline.turbowarp.org/">
<link rel="dns-prefetch" href="https://projects.scratch.mit.edu/">
<link rel="dns-prefetch" href="https://assets.scratch.mit.edu/">
</head>
<body>
<div id="splash" aria-hidden="true">

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

52
turbowarp/main/index.html Normal file
View File

@ -0,0 +1,52 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="google" value="notranslate">
<meta name="description" content="TurboWarp is a Scratch mod with a compiler to run projects faster, dark mode for your eyes, a bunch of addons to improve the editor, and more." />
<title>TurboWarp - Run Scratch projects faster</title>
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="manifest" href="manifest.webmanifest">
<style>
#splash {
position: absolute; width: 100%; height: 100%; top: 0; left: 0;
display: flex; align-items: center; justify-content: center;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; color: #ff4c4c;
}
.tw-loaded #splash, #splash-content { display: none; }
#splash[splash-theme="dark"] { background-color: #333; color: #fff; }
#splash-spinner:after {
content: " "; display: block; width: 64px; height: 64px;
border-radius: 50%; border: 6px solid; border-color: currentColor transparent currentColor transparent;
animation: splash-spinner 1.2s linear infinite;
}
@keyframes splash-spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
</head>
<body>
<div id="splash" aria-hidden="true">
<noscript>
<h1>Enable JavaScript</h1>
</noscript>
<div id="splash-content">
<div id="splash-spinner"></div>
</div>
</div>
<script>
(function() {
document.querySelector('#splash-content').style.display = 'block';
try {var localTheme = localStorage.getItem('tw:theme');} catch (e) {}
if (localTheme ? localTheme === 'dark' : window.matchMedia('(prefers-color-scheme: dark)').matches) document.querySelector('#splash').setAttribute('splash-theme', 'dark');
})();
</script>
<div id="app"></div>
<script src="js/vendors~addon-settings~credits~editor~embed~fullscreen~player.js"></script><script src="js/vendors~editor~embed~fullscreen~player.js"></script><script src="js/addon-settings~addons~editor~fullscreen~player.js"></script><script src="js/editor~embed~fullscreen~player.js"></script><script src="js/player.js"></script></body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More