diff --git a/js/activity.js b/js/activity.js index 67b3c35fa0..a071d90b8c 100644 --- a/js/activity.js +++ b/js/activity.js @@ -7513,7 +7513,6 @@ class Activity { this.toolbar.renderJavaScriptIcon(toggleJSWindow); this.toolbar.renderLanguageSelectIcon(this.languageBox); this.toolbar.renderWrapIcon(); - initPalettes(this.palettes); if (this.planet !== undefined) { @@ -7524,7 +7523,7 @@ class Activity { window.saveLocally = this.saveLocally; - initBasicProtoBlocks(this); + initCoreProtoBlocks(this); // Load any macros saved in local storage. // this.storage.macros = null; @@ -7541,6 +7540,15 @@ class Activity { processPluginData(this, this.pluginData, "localStorage:plugins") ); } + if ("requestIdleCallback" in window) { + requestIdleCallback(() => { + initAdvancedProtoBlocks(this); + }); + } else { + setTimeout(() => { + initAdvancedProtoBlocks(this); + }, 100); + } // Load custom mode saved in local storage. const custommodeData = this.storage.custommode; @@ -8191,7 +8199,8 @@ class Activity { // Reinitialize blocks if (this.blocks) { - initBasicProtoBlocks(this); + initCoreProtoBlocks(this); + initAdvancedProtoBlocks(this); } // Restore palette positions diff --git a/js/basicblocks.js b/js/basicblocks.js index 9e550facee..cb8d058090 100644 --- a/js/basicblocks.js +++ b/js/basicblocks.js @@ -81,8 +81,28 @@ const BACKWARDCOMPATIBILIYDICT = { * @param {Object} blocks * @returns {void} */ -const initBasicProtoBlocks = activity => { +const initCoreProtoBlocks = activity => { activity.blocks.palettes = activity.palettes; + setupFlowBlocks(activity); + setupNumberBlocks(activity); + setupActionBlocks(activity); + setupBoxesBlocks(activity); + setupBooleanBlocks(activity); + + // Push protoblocks onto their palettes. + for (const protoblock in activity.blocks.protoBlockDict) { + if (activity.blocks.protoBlockDict[protoblock].palette != null) { + activity.blocks.protoBlockDict[protoblock].palette.add( + activity.blocks.protoBlockDict[protoblock] + ); + } + } +}; + +/** + * Initialize advanced / heavy blocks (deferred). + */ +const initAdvancedProtoBlocks = activity => { setupRhythmBlockPaletteBlocks(activity); setupRhythmBlocks(activity); setupMeterBlocks(activity); @@ -93,11 +113,6 @@ const initBasicProtoBlocks = activity => { setupVolumeBlocks(activity); setupDrumBlocks(activity); setupWidgetBlocks(activity); - setupFlowBlocks(activity); - setupNumberBlocks(activity); - setupActionBlocks(activity); - setupBoxesBlocks(activity); - setupBooleanBlocks(activity); setupHeapBlocks(activity); setupDictBlocks(activity); setupExtrasBlocks(activity); @@ -108,7 +123,7 @@ const initBasicProtoBlocks = activity => { setupSensorsBlocks(activity); setupEnsembleBlocks(activity); - // Push protoblocks onto their palettes. + // Push newly added protoblocks onto palettes for (const protoblock in activity.blocks.protoBlockDict) { if (activity.blocks.protoBlockDict[protoblock].palette != null) { activity.blocks.protoBlockDict[protoblock].palette.add( @@ -117,9 +132,17 @@ const initBasicProtoBlocks = activity => { } } }; + +const initBasicProtoBlocks = activity => { + initCoreProtoBlocks(activity); + initAdvancedProtoBlocks(activity); +}; + if (typeof module !== "undefined" && module.exports) { module.exports = { initBasicProtoBlocks, + initCoreProtoBlocks, + initAdvancedProtoBlocks, BACKWARDCOMPATIBILIYDICT }; } diff --git a/package.json b/package.json index eb72cd3afa..eb7811b58b 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,6 @@ "http-server": "^14.1.1", "i18next": "^25.3.2", "i18next-http-backend": "^3.0.2", - "node": "^24.2.0", "postcss": "^8.5.6", "sass": "^1.97.2", "tone": "^15.1.22"