105 lines
3.6 KiB
JavaScript
105 lines
3.6 KiB
JavaScript
(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([["addon-entry-block-count"],{
|
|
|
|
/***/ "./src/addons/addons/block-count/_runtime_entry.js":
|
|
/*!*********************************************************!*\
|
|
!*** ./src/addons/addons/block-count/_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 _blockcount_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blockcount.js */ "./src/addons/addons/block-count/blockcount.js");
|
|
/* generated by pull.js */
|
|
|
|
const resources = {
|
|
"blockcount.js": _blockcount_js__WEBPACK_IMPORTED_MODULE_0__["default"]
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/addons/addons/block-count/blockcount.js":
|
|
/*!*****************************************************!*\
|
|
!*** ./src/addons/addons/block-count/blockcount.js ***!
|
|
\*****************************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony default export */ __webpack_exports__["default"] = (async function ({
|
|
addon,
|
|
console,
|
|
msg
|
|
}) {
|
|
const vm = addon.tab.traps.vm;
|
|
|
|
const getBlockCount = () => {
|
|
let blockCount = 0;
|
|
let scriptCount = 0;
|
|
let sprites = new Set(vm.runtime.targets.map(i => i.sprite.blocks._blocks));
|
|
sprites.forEach((sprite, i) => {
|
|
scriptCount += Object.values(sprite).filter(o => !o.parent).length; // Filter blocks that don't have a parent (meaning it's the top of a stack)
|
|
|
|
blockCount += Object.values(sprite).filter(o => !o.shadow).length; // shadow blocks should be filtered out
|
|
});
|
|
return {
|
|
blockCount,
|
|
scriptCount,
|
|
spriteCount: sprites.size - 1 // Backdrop counts as a target so we can subtract it
|
|
|
|
};
|
|
};
|
|
|
|
const addLiveBlockCount = async () => {
|
|
if (vm.editingTarget) {
|
|
let handler = null;
|
|
|
|
while (true) {
|
|
const topBar = await addon.tab.waitForElement("[class^='menu-bar_main-menu']", {
|
|
markAsSeen: true,
|
|
reduxEvents: ["scratch-gui/mode/SET_PLAYER", "fontsLoaded/SET_FONTS_LOADED", "scratch-gui/locales/SELECT_LOCALE"],
|
|
reduxCondition: state => !state.scratchGui.mode.isPlayerOnly
|
|
});
|
|
let display = topBar.appendChild(document.createElement("span"));
|
|
addon.tab.displayNoneWhileDisabled(display);
|
|
display.style.order = 1;
|
|
display.style.padding = "9px";
|
|
display.innerText = msg("blocks", {
|
|
num: getBlockCount().blockCount
|
|
});
|
|
let debounce; // debouncing values because of the way 'PROJECT_CHANGED' works
|
|
|
|
if (handler) {
|
|
vm.off("PROJECT_CHANGED", handler);
|
|
vm.runtime.off("PROJECT_LOADED", handler);
|
|
}
|
|
|
|
handler = async () => {
|
|
clearTimeout(debounce);
|
|
debounce = setTimeout(async () => {
|
|
display.innerText = msg("blocks", {
|
|
num: getBlockCount().blockCount
|
|
});
|
|
}, 1000);
|
|
};
|
|
|
|
vm.on("PROJECT_CHANGED", handler);
|
|
vm.runtime.on("PROJECT_LOADED", handler);
|
|
}
|
|
} else {
|
|
let timeout = setTimeout(function () {
|
|
addLiveBlockCount();
|
|
clearTimeout(timeout);
|
|
}, 1000);
|
|
}
|
|
};
|
|
|
|
addLiveBlockCount();
|
|
});
|
|
|
|
/***/ })
|
|
|
|
}]);
|
|
//# sourceMappingURL=addon-entry-block-count.js.map
|