|
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-editor-colored-context-menus"],{ |
|
|
|
"./node_modules/css-loader/index.js!./src/addons/addons/editor-colored-context-menus/userscript.css": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
exports = module.exports = __webpack_require__( "./node_modules/css-loader/lib/css-base.js")(false); |
|
|
|
|
|
|
|
|
|
exports.push([module.i, ".sa-contextmenu-colored .blocklyContextMenu {\n background: 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: #0001;\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, #fff);\n}", ""]); |
|
|
|
|
|
|
|
|
|
}), |
|
|
|
"./src/addons/addons/editor-colored-context-menus/_runtime_entry.js": |
|
|
|
|
|
|
|
|
|
(function(module, __webpack_exports__, __webpack_require__) { |
|
|
|
"use strict"; |
|
__webpack_require__.r(__webpack_exports__); |
|
__webpack_require__.d(__webpack_exports__, "resources", function() { return resources; }); |
|
var _userscript_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( "./src/addons/addons/editor-colored-context-menus/userscript.js"); |
|
var _css_loader_userscript_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( "./node_modules/css-loader/index.js!./src/addons/addons/editor-colored-context-menus/userscript.css"); |
|
var _css_loader_userscript_css__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_css_loader_userscript_css__WEBPACK_IMPORTED_MODULE_1__); |
|
|
|
|
|
|
|
const resources = { |
|
"userscript.js": _userscript_js__WEBPACK_IMPORTED_MODULE_0__["default"], |
|
"userscript.css": _css_loader_userscript_css__WEBPACK_IMPORTED_MODULE_1___default.a |
|
}; |
|
|
|
}), |
|
|
|
"./src/addons/addons/editor-colored-context-menus/userscript.js": |
|
|
|
|
|
|
|
|
|
(function(module, __webpack_exports__, __webpack_require__) { |
|
|
|
"use strict"; |
|
__webpack_require__.r(__webpack_exports__); |
|
var _libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__( "./src/addons/libraries/common/cs/text-color.esm.js"); |
|
|
|
__webpack_exports__["default"] = (async function (_ref) { |
|
let { |
|
addon, |
|
console |
|
} = _ref; |
|
const ScratchBlocks = await addon.tab.traps.getBlockly(); |
|
const fixupColor = color => { |
|
|
|
if (color.startsWith("url(#")) { |
|
const gradientID = color.substring(5, color.length - 1); |
|
const gradientCode = document.querySelector("svg [id=\"".concat(gradientID, "\"]")); |
|
if (!gradientCode || gradientCode.tagName !== "linearGradient") return "#000000"; |
|
const parseCoord = v => parseFloat(v.replace("%", "")); |
|
const x1 = parseCoord(gradientCode.getAttribute("x1") || "0"); |
|
const y1 = parseCoord(gradientCode.getAttribute("y1") || "0"); |
|
const x2 = parseCoord(gradientCode.getAttribute("x2") || "100"); |
|
const y2 = parseCoord(gradientCode.getAttribute("y2") || "0"); |
|
const dx = x2 - x1, |
|
dy = y2 - y1; |
|
const angleDeg = (Math.atan2(dy, dx) * 180 / Math.PI + 90 + 360) % 360; |
|
const stops = Array.from(gradientCode.querySelectorAll("stop")).map(stop => { |
|
const color = stop.getAttribute("stop-color") || "#000"; |
|
let offset = stop.getAttribute("offset"); |
|
if (!offset) offset = "0%";else if (!offset.endsWith("%")) offset = parseFloat(offset) * 100 + "%"; |
|
return "".concat(color, " ").concat(offset); |
|
}); |
|
return "linear-gradient(".concat(angleDeg.toFixed(2), "deg, ").concat(stops.join(", "), ")"); |
|
} else { |
|
return Object(_libraries_common_cs_text_color_esm_js__WEBPACK_IMPORTED_MODULE_0__["removeAlpha"])(color); |
|
} |
|
}; |
|
const applyContextMenuColor = block => { |
|
var _block$textColour; |
|
const widgetDiv = ScratchBlocks.WidgetDiv.DIV; |
|
if (!widgetDiv) { |
|
return; |
|
} |
|
const background = block.svgPath_; |
|
if (!background) { |
|
return; |
|
} |
|
const fill = fixupColor(background.getAttribute("fill")); |
|
const border = background.getAttribute("stroke") || "#0003"; |
|
widgetDiv.classList.add("sa-contextmenu-colored"); |
|
widgetDiv.style.setProperty("--sa-contextmenu-bg", fill); |
|
widgetDiv.style.setProperty("--sa-contextmenu-border", border); |
|
widgetDiv.style.setProperty("--sa-contextmenu-text", (_block$textColour = block.textColour) !== null && _block$textColour !== void 0 ? _block$textColour : "#fff"); |
|
}; |
|
const originalHandleRightClick = ScratchBlocks.Gesture.prototype.handleRightClick; |
|
ScratchBlocks.Gesture.prototype.handleRightClick = function () { |
|
const block = this.targetBlock_; |
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
|
args[_key] = arguments[_key]; |
|
} |
|
const ret = originalHandleRightClick.call(this, ...args); |
|
if (block) { |
|
applyContextMenuColor(block); |
|
} |
|
return ret; |
|
}; |
|
const originalHide = ScratchBlocks.WidgetDiv.hide; |
|
ScratchBlocks.WidgetDiv.hide = function () { |
|
if (ScratchBlocks.WidgetDiv.DIV) { |
|
ScratchBlocks.WidgetDiv.DIV.classList.remove("sa-contextmenu-colored"); |
|
} |
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { |
|
args[_key2] = arguments[_key2]; |
|
} |
|
return originalHide.call(this, ...args); |
|
}; |
|
}); |
|
|
|
}) |
|
|
|
}]); |
|
|