|
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-columns"],{ |
|
|
|
"./node_modules/css-loader/index.js!./src/addons/addons/columns/style.css": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
exports = module.exports = __webpack_require__( "./node_modules/css-loader/lib/css-base.js")(false); |
|
|
|
|
|
|
|
|
|
exports.push([module.i, "[class*=\"blocks_blocks_\"] .blocklyToolboxDiv {\n width: 310px;\n height: auto !important;\n}\n\n.scratchCategoryMenu {\n width: 100%;\n columns: 2;\n column-gap: 0.5rem;\n padding: 0.25rem;\n}\n\n.scratchCategorySecondMenu {\n columns: 1;\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n padding-bottom: 2.25rem;\n}\n\n.scratchCategorySecondMenu:empty {\n padding-top: 0;\n padding-bottom: 2rem;\n}\n\n.scratchCategoryMenuItem {\n display: inline-flex; /* inline so that it isn't split between both columns */\n width: 100%;\n padding: 0.25rem;\n border-radius: 0.875rem;\n}\n\n.scratchCategoryItemBubble,\n.scratchCategoryItemIcon {\n margin: 0;\n margin-inline-end: 0.5rem;\n}\n\n.scratchCategoryMenuItemLabel {\n flex: 1;\n display: flex;\n align-items: center;\n}\n\n[class*=\"gui_extension-button-container_\"] {\n top: var(--sa-add-extension-button-y);\n bottom: auto;\n margin-inline-start: 0.5rem;\n width: calc(308px - 1rem);\n height: calc(1.75rem - 2px);\n background-color: transparent;\n border-color: var(--ui-black-transparent, rgba(0, 0, 0, 0.15));\n}\n\n/* [dir] is for specificity to override editor-stage-left */\n[dir] [class*=\"gui_extension-button-container_\"] {\n border-radius: 0.25rem;\n}\n\n[class*=\"gui_extension-button-container_\"]:hover {\n background-color: var(--ui-tertiary, white);\n}\n\n[class*=\"gui_extension-button-container_\"]::before {\n display: none;\n}\n\n[class*=\"gui_extension-button_\"] {\n display: flex;\n align-items: center;\n padding-inline: 0;\n}\n\n[class*=\"gui_extension-button-icon_\"] {\n filter: var(--editorDarkMode-categoryMenu-invertedFilter, brightness(0.4));\n}\n\n[class*=\"gui_extension-button-container_\"]:hover [class*=\"gui_extension-button-icon_\"] {\n filter: var(--editorDarkMode-accent-invertedFilter, brightness(0.4));\n}\n[theme=\"dark\"] [class*=\"gui_extension-button-icon_\"] {\n filter: none !important;\n}\n\n.sa-add-extension-label {\n color: var(--text-primary, #575e75);\n font-size: 0.65rem;\n}\n\n[class*=\"gui_extension-button-container_\"]:hover .sa-add-extension-label {\n color: var(--text-primary, #575e75);\n font-size: 0.65rem;\n}\n\n/* hide-flyout compatibility */\n\n[class*=\"gui_tabs_\"] {\n --sa-flyout-width: 310px;\n --sa-category-width: 0;\n}\n\n.sa-flyout-placeHolder {\n top: calc(var(--sa-flyout-y));\n}\n", ""]); |
|
|
|
|
|
|
|
|
|
}), |
|
|
|
"./src/addons/addons/columns/_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/columns/userscript.js"); |
|
var _css_loader_style_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__( "./node_modules/css-loader/index.js!./src/addons/addons/columns/style.css"); |
|
var _css_loader_style_css__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_css_loader_style_css__WEBPACK_IMPORTED_MODULE_1__); |
|
|
|
|
|
|
|
const resources = { |
|
"userscript.js": _userscript_js__WEBPACK_IMPORTED_MODULE_0__["default"], |
|
"style.css": _css_loader_style_css__WEBPACK_IMPORTED_MODULE_1___default.a |
|
}; |
|
|
|
}), |
|
|
|
"./src/addons/addons/columns/userscript.js": |
|
|
|
|
|
|
|
|
|
(function(module, __webpack_exports__, __webpack_require__) { |
|
|
|
"use strict"; |
|
__webpack_require__.r(__webpack_exports__); |
|
__webpack_exports__["default"] = (async function (_ref) { |
|
let { |
|
addon, |
|
msg, |
|
console |
|
} = _ref; |
|
const Blockly = await addon.tab.traps.getBlockly(); |
|
|
|
|
|
const _ToolboxPosition = Blockly.Toolbox.prototype.position; |
|
Blockly.Toolbox.prototype.position = function () { |
|
_ToolboxPosition.call(this); |
|
|
|
|
|
if (this.HtmlDiv && !this.HtmlDiv._observer) { |
|
this.HtmlDiv._observer = new ResizeObserver(() => { |
|
this.flyout_.position(); |
|
}); |
|
this.HtmlDiv._observer.observe(this.HtmlDiv); |
|
} |
|
}; |
|
|
|
|
|
const _VerticalFlyoutPosition = Blockly.VerticalFlyout.prototype.position; |
|
Blockly.VerticalFlyout.prototype.position = function () { |
|
_VerticalFlyoutPosition.call(this); |
|
if (addon.self.disabled || !this.isVisible()) { |
|
return; |
|
} |
|
var targetWorkspaceMetrics = this.targetWorkspace_.getMetrics(); |
|
if (!targetWorkspaceMetrics) { |
|
|
|
return; |
|
} |
|
|
|
|
|
|
|
var x = this.toolboxPosition_ === Blockly.TOOLBOX_AT_RIGHT ? targetWorkspaceMetrics.viewWidth - 3 : 0; |
|
var y = this.parentToolbox_.HtmlDiv.offsetHeight; |
|
|
|
|
|
this.width_ = this.parentToolbox_.getWidth(); |
|
this.height_ = Math.max(0, targetWorkspaceMetrics.viewHeight - y); |
|
this.setBackgroundPath_(this.width_, this.height_); |
|
this.svgGroup_.setAttribute("width", this.width_); |
|
this.svgGroup_.setAttribute("height", this.height_); |
|
var transform = "translate(" + x + "px," + y + "px)"; |
|
Blockly.utils.setCssTransform(this.svgGroup_, transform); |
|
|
|
|
|
if (this.scrollbar_) { |
|
|
|
this.scrollbar_.setOrigin(x + (this.toolboxPosition_ === Blockly.TOOLBOX_AT_RIGHT ? 0 : this.width_ - this.getWidth()), y); |
|
this.scrollbar_.resize(); |
|
} |
|
|
|
|
|
const container = this.svgGroup_.closest("[class*='gui_tab-panel_']"); |
|
container.style.setProperty("--sa-add-extension-button-y", "".concat(y - 33, "px")); |
|
container.parentElement.style.setProperty("--sa-flyout-y", "".concat(y, "px")); |
|
}; |
|
|
|
|
|
const _VerticalFlyoutGetWidth = Blockly.VerticalFlyout.prototype.getWidth; |
|
Blockly.VerticalFlyout.prototype.getWidth = function () { |
|
|
|
let width = _VerticalFlyoutGetWidth.call(this); |
|
if (!addon.self.disabled) width += 60; |
|
return width; |
|
}; |
|
|
|
|
|
const _CategoryMenuCreateDom = Blockly.Toolbox.CategoryMenu.prototype.createDom; |
|
Blockly.Toolbox.CategoryMenu.prototype.createDom = function () { |
|
_CategoryMenuCreateDom.call(this); |
|
if (addon.self.disabled) return; |
|
this.secondTable = document.createElement("div"); |
|
this.secondTable.className = "scratchCategorySecondMenu " + (this.parent_.horizontalLayout_ ? "scratchCategoryMenuHorizontal" : "scratchCategoryMenu"); |
|
this.parentHtml_.appendChild(this.secondTable); |
|
}; |
|
|
|
|
|
const _CategoryMenuPopulate = Blockly.Toolbox.CategoryMenu.prototype.populate; |
|
Blockly.Toolbox.CategoryMenu.prototype.populate = function (domTree) { |
|
if (!domTree) return; |
|
const Categories = ["motion", "looks", "sound", "events", "control", "sensing", "operators", "variables", "lists", "myBlocks"]; |
|
const extensionsNodes = []; |
|
const extensionTree = domTree.cloneNode(true); |
|
if (!addon.self.disabled) { |
|
extensionTree.childNodes.forEach(child => { |
|
if (child.tagName === "category" && !Categories.includes(child.id)) { |
|
extensionsNodes.push(child.cloneNode(true)); |
|
child.remove(); |
|
} |
|
}); |
|
} |
|
_CategoryMenuPopulate.call(this, extensionTree); |
|
for (const child of extensionsNodes) { |
|
const row = document.createElement("div"); |
|
row.className = "scratchCategoryMenuRow"; |
|
this.secondTable.appendChild(row); |
|
if (child) { |
|
this.categories_.push(new Blockly.Toolbox.Category(this, row, child)); |
|
} |
|
} |
|
if (!addon.self.disabled) { |
|
this.height_ = this.table.offsetHeight + this.secondTable.offsetHeight; |
|
} |
|
}; |
|
|
|
|
|
const _CategoryMenuDispose = Blockly.Toolbox.CategoryMenu.prototype.dispose; |
|
Blockly.Toolbox.CategoryMenu.prototype.dispose = function () { |
|
_CategoryMenuDispose.call(this); |
|
if (this.secondTable) { |
|
this.secondTable.remove(); |
|
this.secondTable = null; |
|
} |
|
}; |
|
function updateToolbox() { |
|
const workspace = Blockly.getMainWorkspace(); |
|
const toolbox = workspace.getToolbox(); |
|
if (!toolbox) return; |
|
const categoryMenu = toolbox.categoryMenu_; |
|
if (!categoryMenu) return; |
|
|
|
|
|
if (categoryMenu.secondTable && !addon.self.disabled) return; |
|
|
|
categoryMenu.dispose(); |
|
categoryMenu.createDom(); |
|
|
|
toolbox.populate_(workspace.options.languageTree); |
|
|
|
toolbox.position(); |
|
} |
|
updateToolbox(); |
|
addon.self.addEventListener("disabled", updateToolbox); |
|
addon.self.addEventListener("reenabled", updateToolbox); |
|
while (true) { |
|
const addExtensionButton = await addon.tab.waitForElement("[class*='gui_extension-button_']", { |
|
markAsSeen: true, |
|
reduxEvents: ["scratch-gui/mode/SET_PLAYER", "fontsLoaded/SET_FONTS_LOADED", "scratch-gui/locales/SELECT_LOCALE"], |
|
condition: () => !addon.tab.redux.state.scratchGui.mode.isPlayerOnly |
|
}); |
|
const addExtensionLabel = Object.assign(document.createElement("span"), { |
|
className: "sa-add-extension-label", |
|
innerText: addon.tab.scratchMessage("gui.gui.addExtension") |
|
}); |
|
addon.tab.displayNoneWhileDisabled(addExtensionLabel); |
|
addExtensionButton.appendChild(addExtensionLabel); |
|
addExtensionButton.removeAttribute("title"); |
|
} |
|
}); |
|
|
|
}) |
|
|
|
}]); |
|
|