add category info to extension add & update events

This commit is contained in:
Christopher Willis-Ford 2019-04-18 09:45:22 -07:00
parent 833d33355c
commit bd1aaecdf3
3 changed files with 9 additions and 14 deletions

View file

@ -787,11 +787,9 @@ class Runtime extends EventEmitter {
this._fillExtensionCategory(categoryInfo, extensionInfo); this._fillExtensionCategory(categoryInfo, extensionInfo);
const fieldTypeDefinitionsForScratch = [];
for (const fieldTypeName in categoryInfo.customFieldTypes) { for (const fieldTypeName in categoryInfo.customFieldTypes) {
if (extensionInfo.customFieldTypes.hasOwnProperty(fieldTypeName)) { if (extensionInfo.customFieldTypes.hasOwnProperty(fieldTypeName)) {
const fieldTypeInfo = categoryInfo.customFieldTypes[fieldTypeName]; const fieldTypeInfo = categoryInfo.customFieldTypes[fieldTypeName];
fieldTypeDefinitionsForScratch.push(fieldTypeInfo.scratchBlocksDefinition);
// Emit events for custom field types from extension // Emit events for custom field types from extension
this.emit(Runtime.EXTENSION_FIELD_ADDED, { this.emit(Runtime.EXTENSION_FIELD_ADDED, {
@ -801,9 +799,7 @@ class Runtime extends EventEmitter {
} }
} }
const allBlocks = fieldTypeDefinitionsForScratch.concat(categoryInfo.blocks).concat(categoryInfo.menus); this.emit(Runtime.EXTENSION_ADDED, categoryInfo);
this.emit(Runtime.EXTENSION_ADDED, allBlocks);
} }
/** /**
@ -812,18 +808,16 @@ class Runtime extends EventEmitter {
* @private * @private
*/ */
_refreshExtensionPrimitives (extensionInfo) { _refreshExtensionPrimitives (extensionInfo) {
let extensionBlocks = [];
for (const categoryInfo of this._blockInfo) { for (const categoryInfo of this._blockInfo) {
if (extensionInfo.id === categoryInfo.id) { if (extensionInfo.id === categoryInfo.id) {
categoryInfo.name = maybeFormatMessage(extensionInfo.name); categoryInfo.name = maybeFormatMessage(extensionInfo.name);
categoryInfo.blocks = []; categoryInfo.blocks = [];
categoryInfo.menus = []; categoryInfo.menus = [];
this._fillExtensionCategory(categoryInfo, extensionInfo); this._fillExtensionCategory(categoryInfo, extensionInfo);
extensionBlocks = extensionBlocks.concat(categoryInfo.blocks, categoryInfo.menus);
this.emit(Runtime.BLOCKSINFO_UPDATE, categoryInfo);
} }
} }
this.emit(Runtime.BLOCKSINFO_UPDATE, extensionBlocks);
} }
/** /**

View file

@ -109,14 +109,14 @@ class VirtualMachine extends EventEmitter {
this.runtime.on(Runtime.BLOCK_DRAG_END, (blocks, topBlockId) => { this.runtime.on(Runtime.BLOCK_DRAG_END, (blocks, topBlockId) => {
this.emit(Runtime.BLOCK_DRAG_END, blocks, topBlockId); this.emit(Runtime.BLOCK_DRAG_END, blocks, topBlockId);
}); });
this.runtime.on(Runtime.EXTENSION_ADDED, blocksInfo => { this.runtime.on(Runtime.EXTENSION_ADDED, categoryInfo => {
this.emit(Runtime.EXTENSION_ADDED, blocksInfo); this.emit(Runtime.EXTENSION_ADDED, categoryInfo);
}); });
this.runtime.on(Runtime.EXTENSION_FIELD_ADDED, (fieldName, fieldImplementation) => { this.runtime.on(Runtime.EXTENSION_FIELD_ADDED, (fieldName, fieldImplementation) => {
this.emit(Runtime.EXTENSION_FIELD_ADDED, fieldName, fieldImplementation); this.emit(Runtime.EXTENSION_FIELD_ADDED, fieldName, fieldImplementation);
}); });
this.runtime.on(Runtime.BLOCKSINFO_UPDATE, blocksInfo => { this.runtime.on(Runtime.BLOCKSINFO_UPDATE, categoryInfo => {
this.emit(Runtime.BLOCKSINFO_UPDATE, blocksInfo); this.emit(Runtime.BLOCKSINFO_UPDATE, categoryInfo);
}); });
this.runtime.on(Runtime.BLOCKS_NEED_UPDATE, () => { this.runtime.on(Runtime.BLOCKS_NEED_UPDATE, () => {
this.emitWorkspaceUpdate(); this.emitWorkspaceUpdate();

View file

@ -160,7 +160,8 @@ const testLoop = function (t, loop) {
test('registerExtensionPrimitives', t => { test('registerExtensionPrimitives', t => {
const runtime = new Runtime(); const runtime = new Runtime();
runtime.on(Runtime.EXTENSION_ADDED, blocksInfo => { runtime.on(Runtime.EXTENSION_ADDED, categoryInfo => {
const blocksInfo = categoryInfo.blocks;
t.equal(blocksInfo.length, testExtensionInfo.blocks.length); t.equal(blocksInfo.length, testExtensionInfo.blocks.length);
blocksInfo.forEach(blockInfo => { blocksInfo.forEach(blockInfo => {