Skip to content

Commit 0713298

Browse files
committed
feat: broadcast use new ruby to block framework
1 parent 6e4613b commit 0713298

File tree

2 files changed

+48
-36
lines changed

2 files changed

+48
-36
lines changed

src/lib/ruby-to-blocks-converter/event.js

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -77,42 +77,6 @@ const EventConverter = {
7777
}
7878
break;
7979
}
80-
} else if (this._isSelf(receiver) || receiver === Opal.nil) {
81-
switch (name) {
82-
case 'broadcast':
83-
case 'broadcast_and_wait':
84-
if (args.length === 1 && this._isStringOrBlock(args[0]) && !rubyBlock) {
85-
let opcode;
86-
if (name === 'broadcast') {
87-
opcode = 'event_broadcast';
88-
} else {
89-
opcode = 'event_broadcastandwait';
90-
}
91-
const menuBlock = this._createBlock('event_broadcast_menu', 'value', {
92-
shadow: true
93-
});
94-
let broadcastMsg;
95-
let inputBlock;
96-
let shadowBlock;
97-
if (this._isString(args[0])) {
98-
broadcastMsg = this._lookupOrCreateBroadcastMsg(args[0]);
99-
inputBlock = menuBlock;
100-
shadowBlock = menuBlock;
101-
} else {
102-
broadcastMsg = this._defaultBroadcastMsg();
103-
inputBlock = args[0];
104-
shadowBlock = menuBlock;
105-
}
106-
this._addField(menuBlock, 'BROADCAST_OPTION', broadcastMsg.name, {
107-
id: broadcastMsg.id,
108-
variableType: Variable.BROADCAST_MESSAGE_TYPE
109-
});
110-
111-
block = this._createBlock(opcode, 'statement');
112-
this._addInput(block, 'BROADCAST_INPUT', inputBlock, shadowBlock);
113-
}
114-
break;
115-
}
11680
}
11781

11882
return block;
@@ -223,6 +187,42 @@ const EventConverter = {
223187
converter.setParent(rubyBlock, block);
224188
return block;
225189
});
190+
191+
const createBroadcastBlockFunc = (params, opcode) => {
192+
const {args, rubyBlock} = params;
193+
194+
if (!converter.isStringOrBlock(args[0])) return null;
195+
196+
if (rubyBlock) return null;
197+
198+
const menuBlock = converter.createBlock('event_broadcast_menu', 'value', {
199+
shadow: true
200+
});
201+
let broadcastMsg;
202+
let inputBlock;
203+
let shadowBlock;
204+
if (converter.isString(args[0])) {
205+
broadcastMsg = converter.lookupOrCreateBroadcastMsg(args[0]);
206+
inputBlock = menuBlock;
207+
shadowBlock = menuBlock;
208+
} else {
209+
broadcastMsg = converter.defaultBroadcastMsg();
210+
inputBlock = args[0];
211+
shadowBlock = menuBlock;
212+
}
213+
converter.addField(menuBlock, 'BROADCAST_OPTION', broadcastMsg.name, {
214+
id: broadcastMsg.id,
215+
variableType: Variable.BROADCAST_MESSAGE_TYPE
216+
});
217+
218+
const block = converter.createBlock(opcode, 'statement');
219+
converter.addInput(block, 'BROADCAST_INPUT', inputBlock, shadowBlock);
220+
return block;
221+
};
222+
converter.registerCallMethod('self', 'broadcast', 1,
223+
params => createBroadcastBlockFunc(params, 'event_broadcast'));
224+
converter.registerCallMethod('self', 'broadcast_and_wait', 1,
225+
params => createBroadcastBlockFunc(params, 'event_broadcastandwait'));
226226
}
227227
};
228228

src/lib/ruby-to-blocks-converter/index.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,10 @@ class RubyToBlocksConverter {
524524
return this._isNumber(numberOrBlock) || this._isValueBlock(numberOrBlock);
525525
}
526526

527+
isStringOrBlock (stringOrBlock) {
528+
return this._isStringOrBlock(stringOrBlock);
529+
}
530+
527531
_isStringOrBlock (stringOrBlock) {
528532
return this._isString(stringOrBlock) || this._isValueBlock(stringOrBlock);
529533
}
@@ -665,6 +669,10 @@ class RubyToBlocksConverter {
665669
}, attributes);
666670
}
667671

672+
addInput (block, name, inputBlock, shadowBlock) {
673+
return this._addInput(block, name, inputBlock, shadowBlock);
674+
}
675+
668676
_addInput (block, name, inputBlock, shadowBlock) {
669677
if (!name) {
670678
name = inputBlock.id;
@@ -809,6 +817,10 @@ class RubyToBlocksConverter {
809817
return broadcastMsg;
810818
}
811819

820+
defaultBroadcastMsg () {
821+
return this._defaultBroadcastMsg();
822+
}
823+
812824
_defaultBroadcastMsg () {
813825
const defaultName = 'message1';
814826
const keys = Object.keys(this._context.broadcastMsgs);

0 commit comments

Comments
 (0)