kopia lustrzana https://github.com/backface/turtlestitch
block-assembly support, experimental
rodzic
f49c3253b6
commit
2b11c7430e
|
@ -68,6 +68,9 @@
|
||||||
* Chinese, thanks, Simon!
|
* Chinese, thanks, Simon!
|
||||||
* Brazilian Portuguese, thank you, Cassiano D'Andrea!
|
* Brazilian Portuguese, thank you, Cassiano D'Andrea!
|
||||||
|
|
||||||
|
### 2021-11-30
|
||||||
|
* blocks, threads: block-assembly support, experimental
|
||||||
|
|
||||||
### 2021-11-29
|
### 2021-11-29
|
||||||
* renamed "r-g-b-a" option to "RGBA" and "r-g-b(-a)" to "RGB(A)"
|
* renamed "r-g-b-a" option to "RGBA" and "r-g-b(-a)" to "RGB(A)"
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
<script src="src/morphic.js?version=2021-07-09"></script>
|
<script src="src/morphic.js?version=2021-07-09"></script>
|
||||||
<script src="src/symbols.js?version=2021-03-03"></script>
|
<script src="src/symbols.js?version=2021-03-03"></script>
|
||||||
<script src="src/widgets.js?version=2021-17-09"></script>
|
<script src="src/widgets.js?version=2021-17-09"></script>
|
||||||
<script src="src/blocks.js?version=2021-11-27"></script>
|
<script src="src/blocks.js?version=2021-11-29"></script>
|
||||||
<script src="src/threads.js?version=2021-11-27"></script>
|
<script src="src/threads.js?version=2021-11-29"></script>
|
||||||
<script src="src/objects.js?version=2021-11-26"></script>
|
<script src="src/objects.js?version=2021-11-26"></script>
|
||||||
<script src="src/scenes.js?version=2021-11-24"></script>
|
<script src="src/scenes.js?version=2021-11-24"></script>
|
||||||
<script src="src/gui.js?version=2021-11-27"></script>
|
<script src="src/gui.js?version=2021-11-27"></script>
|
||||||
|
|
107
src/blocks.js
107
src/blocks.js
|
@ -153,14 +153,14 @@ radians, useBlurredShadows, SpeechBubbleMorph, modules, StageMorph, SymbolMorph,
|
||||||
fontHeight, TableFrameMorph, SpriteMorph, Context, ListWatcherMorph, Rectangle,
|
fontHeight, TableFrameMorph, SpriteMorph, Context, ListWatcherMorph, Rectangle,
|
||||||
DialogBoxMorph, BlockInputFragmentMorph, PrototypeHatBlockMorph, WHITE, BLACK,
|
DialogBoxMorph, BlockInputFragmentMorph, PrototypeHatBlockMorph, WHITE, BLACK,
|
||||||
Costume, IDE_Morph, BlockDialogMorph, BlockEditorMorph, localize, CLEAR, Point,
|
Costume, IDE_Morph, BlockDialogMorph, BlockEditorMorph, localize, CLEAR, Point,
|
||||||
isSnapObject, PushButtonMorph, SpriteIconMorph, Process, AlignmentMorph,
|
isSnapObject, PushButtonMorph, SpriteIconMorph, Process, AlignmentMorph, List,
|
||||||
CustomCommandBlockMorph, ToggleButtonMorph, DialMorph, SnapExtensions*/
|
CustomCommandBlockMorph, ToggleButtonMorph, DialMorph, SnapExtensions*/
|
||||||
|
|
||||||
/*jshint esversion: 6*/
|
/*jshint esversion: 6*/
|
||||||
|
|
||||||
// Global stuff ////////////////////////////////////////////////////////
|
// Global stuff ////////////////////////////////////////////////////////
|
||||||
|
|
||||||
modules.blocks = '2021-November-27';
|
modules.blocks = '2021-November-30';
|
||||||
|
|
||||||
var SyntaxElementMorph;
|
var SyntaxElementMorph;
|
||||||
var BlockMorph;
|
var BlockMorph;
|
||||||
|
@ -3614,6 +3614,8 @@ BlockMorph.prototype.restoreInputs = function (oldInputs, offset = 0) {
|
||||||
return leftOver;
|
return leftOver;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// BlockMorph helpscreens
|
||||||
|
|
||||||
BlockMorph.prototype.showHelp = function () {
|
BlockMorph.prototype.showHelp = function () {
|
||||||
var myself = this,
|
var myself = this,
|
||||||
ide = this.parentThatIsA(IDE_Morph),
|
ide = this.parentThatIsA(IDE_Morph),
|
||||||
|
@ -3702,6 +3704,41 @@ BlockMorph.prototype.exportResultPic = function () {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// BlockMorph components - EXPERIMENTAL
|
||||||
|
|
||||||
|
BlockMorph.prototype.components = function () { // +++
|
||||||
|
throw new Error('subclass responsility');
|
||||||
|
};
|
||||||
|
|
||||||
|
BlockMorph.prototype.copyWithInputs = function (inputs) {
|
||||||
|
var cpy = this.fullCopy(),
|
||||||
|
slots = cpy.inputs(),
|
||||||
|
dta = inputs.itemsArray().map(inp =>
|
||||||
|
inp instanceof Context ? inp.expression : inp
|
||||||
|
);
|
||||||
|
slots.forEach(slt => {
|
||||||
|
if (slt instanceof BlockMorph) {
|
||||||
|
cpy.revertToDefaultInput(slt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dta.forEach((inp, i) => {
|
||||||
|
if (inp instanceof BlockMorph) {
|
||||||
|
if (inp instanceof CommandBlockMorph && slots[i].nestedBlock) {
|
||||||
|
slots[i].nestedBlock(inp);
|
||||||
|
} else {
|
||||||
|
cpy.replaceInput(slots[i], inp);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (inp instanceof List && inp.length() === 0) {
|
||||||
|
nop(); // ignore, i.e. leave slot as is
|
||||||
|
} else {
|
||||||
|
slots[i].setContents(inp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return cpy;
|
||||||
|
};
|
||||||
|
|
||||||
// BlockMorph code mapping
|
// BlockMorph code mapping
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -5417,6 +5454,46 @@ CommandBlockMorph.prototype.extract = function () {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// CommandBlockMorph components - EXPERIMENTAL
|
||||||
|
|
||||||
|
CommandBlockMorph.prototype.components = function () { // +++
|
||||||
|
var seq = new List(this.blockSequence()).map(block => {
|
||||||
|
var expr = block.fullCopy(),
|
||||||
|
nb = expr.nextBlock(),
|
||||||
|
inputs, parts;
|
||||||
|
if (nb) {
|
||||||
|
nb.destroy();
|
||||||
|
}
|
||||||
|
expr.fixBlockColor(null, true);
|
||||||
|
inputs = expr.inputs();
|
||||||
|
if (!inputs.length) {
|
||||||
|
return expr;
|
||||||
|
}
|
||||||
|
parts = new List([expr]);
|
||||||
|
inputs.forEach(inp => {
|
||||||
|
var val;
|
||||||
|
if (inp instanceof BlockMorph) {
|
||||||
|
parts.add(inp.components());
|
||||||
|
} else {
|
||||||
|
val = inp.evaluate();
|
||||||
|
parts.add(val instanceof BlockMorph ? val.components() : val);
|
||||||
|
|
||||||
|
}
|
||||||
|
expr.revertToDefaultInput(inp, true); // empty
|
||||||
|
});
|
||||||
|
return parts;
|
||||||
|
});
|
||||||
|
return seq.length() === 1 ? seq.at(1) : seq;
|
||||||
|
};
|
||||||
|
|
||||||
|
CommandBlockMorph.prototype.copyWithNext = function (next) {
|
||||||
|
var exp = this.fullCopy(),
|
||||||
|
bottom = exp.bottomBlock(),
|
||||||
|
top = next.fullCopy().topBlock();
|
||||||
|
bottom.nextBlock(top);
|
||||||
|
return exp;
|
||||||
|
};
|
||||||
|
|
||||||
// CommandBlockMorph drawing:
|
// CommandBlockMorph drawing:
|
||||||
|
|
||||||
CommandBlockMorph.prototype.outlinePath = function(ctx, inset) {
|
CommandBlockMorph.prototype.outlinePath = function(ctx, inset) {
|
||||||
|
@ -6180,6 +6257,32 @@ ReporterBlockMorph.prototype.userDestroy = function () {
|
||||||
this.destroy();
|
this.destroy();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ReporterBlockMorph components - EXPERIMENTAL
|
||||||
|
|
||||||
|
ReporterBlockMorph.prototype.components = function () { // +++
|
||||||
|
var expr = this.fullCopy(),
|
||||||
|
inputs = expr.inputs(),
|
||||||
|
parts;
|
||||||
|
expr.fixBlockColor(null, true);
|
||||||
|
if (!inputs.length ||
|
||||||
|
inputs.every(slot => slot.isEmptySlot && slot.isEmptySlot())) {
|
||||||
|
return expr;
|
||||||
|
}
|
||||||
|
parts = new List([expr]);
|
||||||
|
inputs.forEach(inp => {
|
||||||
|
var val;
|
||||||
|
if (inp instanceof BlockMorph) {
|
||||||
|
parts.add(inp.components());
|
||||||
|
} else {
|
||||||
|
val = inp.evaluate();
|
||||||
|
parts.add(val instanceof BlockMorph ? val.components() : val);
|
||||||
|
|
||||||
|
}
|
||||||
|
expr.revertToDefaultInput(inp, true); // empty
|
||||||
|
});
|
||||||
|
return parts;
|
||||||
|
};
|
||||||
|
|
||||||
// ReporterBlockMorph drawing:
|
// ReporterBlockMorph drawing:
|
||||||
|
|
||||||
ReporterBlockMorph.prototype.outlinePath = function (ctx, inset) {
|
ReporterBlockMorph.prototype.outlinePath = function (ctx, inset) {
|
||||||
|
|
|
@ -64,7 +64,7 @@ SnapExtensions, AlignmentMorph, TextMorph, Cloud, HatBlockMorph*/
|
||||||
|
|
||||||
/*jshint esversion: 6*/
|
/*jshint esversion: 6*/
|
||||||
|
|
||||||
modules.threads = '2021-November-27';
|
modules.threads = '2021-November-30';
|
||||||
|
|
||||||
var ThreadManager;
|
var ThreadManager;
|
||||||
var Process;
|
var Process;
|
||||||
|
@ -7009,6 +7009,20 @@ Context.prototype.isInCustomBlock = function () {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Context components - EXPERIMENTAL
|
||||||
|
|
||||||
|
Context.prototype.components = function () {
|
||||||
|
var expr = this.expression.components(),
|
||||||
|
parts;
|
||||||
|
if (!this.inputs.length) {
|
||||||
|
return expr;
|
||||||
|
}
|
||||||
|
parts = new List();
|
||||||
|
parts.add(expr); // blocks / other
|
||||||
|
this.inputs.forEach(name => parts.add(name));
|
||||||
|
return parts;
|
||||||
|
};
|
||||||
|
|
||||||
// Variable /////////////////////////////////////////////////////////////////
|
// Variable /////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
function Variable(value, isTransient, isHidden) {
|
function Variable(value, isTransient, isHidden) {
|
||||||
|
|
Ładowanie…
Reference in New Issue