also scan custom blocks for message sends

pull/95/head
jmoenig 2020-09-01 17:45:27 +02:00
rodzic 72888f8cb5
commit 51a8b9e05b
3 zmienionych plików z 50 dodań i 37 usunięć

Wyświetl plik

@ -14,6 +14,7 @@
* gui, blocks: fixed a bunch of typos and UI strings, thanks, Brian Broll!
* colors library update, thanks, Brian H.!
* German translation update
* objects: also scan custom blocks for message sends
### 2020-08-31
* Catalan translation update, thanks, Joan!

Wyświetl plik

@ -10,7 +10,7 @@
<script src="src/widgets.js?version=2020-07-27"></script>
<script src="src/blocks.js?version=2020-09-01"></script>
<script src="src/threads.js?version=2020-08-05"></script>
<script src="src/objects.js?version=2020-08-07"></script>
<script src="src/objects.js?version=2020-09-01"></script>
<script src="src/gui.js?version=2020-09-01"></script>
<script src="src/paint.js?version=2020-05-17"></script>
<script src="src/lists.js?version=2020-07-01"></script>

Wyświetl plik

@ -84,7 +84,7 @@ BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, BooleanSlotMorph,
localize, TableMorph, TableFrameMorph, normalizeCanvas, VectorPaintEditorMorph,
HandleMorph, AlignmentMorph, Process, XML_Element, WorldMap, copyCanvas*/
modules.objects = '2020-August-07';
modules.objects = '2020-September-01';
var SpriteMorph;
var StageMorph;
@ -5753,23 +5753,8 @@ SpriteMorph.prototype.yBottom = function () {
// SpriteMorph message broadcasting
SpriteMorph.prototype.allMessageNames = function () {
var msgs = [],
all = this.scripts.children.slice();
this.customBlocks.forEach(def => {
if (def.body) {
all.push(def.body.expression);
}
def.scripts.forEach(scr => all.push(scr));
});
if (this.globalBlocks) {
this.globalBlocks.forEach(def => {
if (def.body) {
all.push(def.body.expression);
}
def.scripts.forEach(scr => all.push(scr));
});
}
all.forEach(script => {
var msgs = [];
this.allScripts().forEach(script => {
script.allChildren().forEach(morph => {
var txt;
if (morph instanceof InputSlotMorph && morph.choices && contains(
@ -5789,25 +5774,30 @@ SpriteMorph.prototype.allMessageNames = function () {
};
SpriteMorph.prototype.allSendersOf = function (message, receiverName) {
if (typeof message === 'number') {message = message.toString(); }
return this.scripts.allChildren().filter(morph => {
var event, eventReceiver;
if ((morph.selector) &&
contains(
['doBroadcast', 'doBroadcastAndWait', 'doSend'],
morph.selector)
) {
event = morph.inputs()[0].evaluate();
if (morph.selector === 'doSend') {
eventReceiver = morph.inputs()[1].evaluate();
if (typeof message === 'number') {
message = message.toString();
}
return this.allScripts().filter(script =>
script.allChildren().some(morph => {
var event, eventReceiver;
if ((morph.selector) &&
contains(
['doBroadcast', 'doBroadcastAndWait', 'doSend'],
morph.selector)
) {
event = morph.inputs()[0].evaluate();
if (morph.selector === 'doSend') {
eventReceiver = morph.inputs()[1].evaluate();
}
return ((morph.selector !== 'doSend') ||
(receiverName === eventReceiver)) &&
((event === message) ||
(message instanceof Array &&
message[0] === 'any message'));
}
return ((morph.selector !== 'doSend') ||
(receiverName === eventReceiver)) &&
((event === message) ||
(message instanceof Array && message[0] === 'any message'));
}
return false;
});
return false;
})
);
};
SpriteMorph.prototype.allHatBlocksFor = function (message) {
@ -5865,6 +5855,25 @@ SpriteMorph.prototype.allGenericHatBlocks = function () {
});
};
SpriteMorph.prototype.allScripts = function () {
var all = this.scripts.children.slice();
this.customBlocks.forEach(def => {
if (def.body) {
all.push(def.body.expression);
}
def.scripts.forEach(scr => all.push(scr));
});
if (this.globalBlocks) {
this.globalBlocks.forEach(def => {
if (def.body) {
all.push(def.body.expression);
}
def.scripts.forEach(scr => all.push(scr));
});
}
return all;
};
// SpriteMorph events
SpriteMorph.prototype.mouseClickLeft = function () {
@ -9210,6 +9219,9 @@ StageMorph.prototype.allHatBlocksForInteraction
StageMorph.prototype.allGenericHatBlocks
= SpriteMorph.prototype.allGenericHatBlocks;
StageMorph.prototype.allScripts
= SpriteMorph.prototype.allScripts;
// StageMorph events
StageMorph.prototype.mouseClickLeft