pxt-core 7.3.21 → 7.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -471,7 +471,7 @@ declare namespace pxtblockly {
471
471
  protected animateRef: any;
472
472
  protected asset: pxt.Animation;
473
473
  protected initInterval: number;
474
- initView(): void;
474
+ init(): void;
475
475
  showEditor_(): void;
476
476
  render_(): void;
477
477
  protected getAssetType(): pxt.AssetType;
@@ -508,7 +508,7 @@ declare namespace pxtblockly {
508
508
  CURSOR: string;
509
509
  private type_;
510
510
  constructor(state: string, params: Blockly.FieldCustomOptions, opt_validator?: Function);
511
- initView(): void;
511
+ init(): void;
512
512
  updateSize_(): void;
513
513
  /**
514
514
  * Return 'TRUE' if the toggle is ON, 'FALSE' otherwise.
@@ -1243,7 +1243,7 @@ declare namespace pxtblockly {
1243
1243
  protected blocksInfo: pxtc.BlocksInfo;
1244
1244
  protected transparent: TilesetDropdownOption;
1245
1245
  constructor(text: string, options: FieldImageDropdownOptions, validator?: Function);
1246
- initView(): void;
1246
+ init(): void;
1247
1247
  getValue(): any;
1248
1248
  getText(): string;
1249
1249
  render_(): void;
@@ -1265,7 +1265,7 @@ declare namespace pxtblockly {
1265
1265
  CURSOR: string;
1266
1266
  private type_;
1267
1267
  constructor(state: string, params: Blockly.FieldCustomOptions, opt_validator?: Function);
1268
- initView(): void;
1268
+ init(): void;
1269
1269
  getDisplayText_(): string;
1270
1270
  getTrueText(): string;
1271
1271
  getFalseText(): string;
@@ -1497,7 +1497,7 @@ var pxt;
1497
1497
  function compileBlockAsync(b, blockInfo) {
1498
1498
  const w = b.workspace;
1499
1499
  const e = mkEnv(w, blockInfo);
1500
- infer(w && w.getAllBlocks(false), e, w);
1500
+ infer(w && w.getAllBlocks(), e, w);
1501
1501
  const compiled = compileStatementBlock(e, b);
1502
1502
  removeAllPlaceholders();
1503
1503
  return tdASTtoTS(e, compiled);
@@ -1518,7 +1518,7 @@ var pxt;
1518
1518
  function compileWorkspace(e, w, blockInfo) {
1519
1519
  try {
1520
1520
  // all compiled top level blocks are events
1521
- let allBlocks = w.getAllBlocks(false);
1521
+ let allBlocks = w.getAllBlocks();
1522
1522
  if (pxt.react.getTilemapProject) {
1523
1523
  pxt.react.getTilemapProject().removeInactiveBlockAssets(allBlocks.map(b => b.id));
1524
1524
  }
@@ -1788,11 +1788,13 @@ var pxt;
1788
1788
  });
1789
1789
  }
1790
1790
  function maybeAddComment(b, comments) {
1791
- var _a;
1792
- // Check if getCommentText exists, block may be placeholder
1793
- const text = (_a = b.getCommentText) === null || _a === void 0 ? void 0 : _a.call(b);
1794
- if (text) {
1795
- comments.push(text);
1791
+ if (b.comment) {
1792
+ if ((typeof b.comment) === "string") {
1793
+ comments.push(b.comment);
1794
+ }
1795
+ else {
1796
+ comments.push(b.comment.getText());
1797
+ }
1796
1798
  }
1797
1799
  }
1798
1800
  function addCommentNodes(comments, r) {
@@ -2455,9 +2457,9 @@ var pxt;
2455
2457
  }
2456
2458
  });
2457
2459
  // we'll ignore disabled blocks in the final output
2458
- const oldBlocks = oldWs.getAllBlocks(false).filter(b => b.isEnabled());
2460
+ const oldBlocks = oldWs.getAllBlocks().filter(b => b.isEnabled());
2459
2461
  const oldTopBlocks = oldWs.getTopBlocks(false).filter(b => b.isEnabled());
2460
- const newBlocks = newWs.getAllBlocks(false).filter(b => b.isEnabled());
2462
+ const newBlocks = newWs.getAllBlocks().filter(b => b.isEnabled());
2461
2463
  log(`blocks`, newBlocks.map(b => b.toDevString()));
2462
2464
  log(newBlocks);
2463
2465
  if (oldBlocks.length == 0 && newBlocks.length == 0) {
@@ -2479,11 +2481,11 @@ var pxt;
2479
2481
  const newXml = pxt.blocks.saveWorkspaceXml(newWs, true);
2480
2482
  pxt.blocks.domToWorkspaceNoEvents(Blockly.Xml.textToDom(newXml), ws);
2481
2483
  // delete disabled blocks from final workspace
2482
- ws.getAllBlocks(false).filter(b => !b.isEnabled()).forEach(b => {
2484
+ ws.getAllBlocks().filter(b => !b.isEnabled()).forEach(b => {
2483
2485
  log('disabled ', b.toDevString());
2484
2486
  b.dispose(false);
2485
2487
  });
2486
- const todoBlocks = pxt.Util.toDictionary(ws.getAllBlocks(false), b => b.id);
2488
+ const todoBlocks = pxt.Util.toDictionary(ws.getAllBlocks(), b => b.id);
2487
2489
  log(`todo blocks`, todoBlocks);
2488
2490
  logTodo('start');
2489
2491
  // 1. deleted top blocks
@@ -2493,7 +2495,7 @@ var pxt;
2493
2495
  done(b);
2494
2496
  const b2 = cloneIntoDiff(b);
2495
2497
  done(b2);
2496
- b2.setEnabled(false);
2498
+ b2.setDisabled(true);
2497
2499
  });
2498
2500
  logTodo('deleted top');
2499
2501
  }
@@ -2558,7 +2560,7 @@ var pxt;
2558
2560
  });
2559
2561
  logTodo('unmodified');
2560
2562
  // if nothing is left in the workspace, we "missed" change
2561
- if (!ws.getAllBlocks(false).length) {
2563
+ if (!ws.getAllBlocks().length) {
2562
2564
  pxt.tickEvent("blocks.diff", { missed: 1 });
2563
2565
  return {
2564
2566
  ws,
@@ -2591,7 +2593,7 @@ var pxt;
2591
2593
  function stitch(b) {
2592
2594
  log(`stitching ${b.toDevString()}->${dids[b.id]}`);
2593
2595
  const wb = ws.getBlockById(dids[b.id]);
2594
- wb.setEnabled(false);
2596
+ wb.setDisabled(true);
2595
2597
  markUsed(wb);
2596
2598
  done(wb);
2597
2599
  // connect previous connection to delted or existing block
@@ -2853,10 +2855,10 @@ var pxt;
2853
2855
  function applyMetaComments(workspace) {
2854
2856
  // process meta comments
2855
2857
  // @highlight -> highlight block
2856
- workspace.getAllBlocks(false)
2857
- .filter(b => !!b.getCommentText())
2858
+ workspace.getAllBlocks()
2859
+ .filter(b => !!b.comment && b.comment instanceof Blockly.Comment)
2858
2860
  .forEach(b => {
2859
- const c = b.getCommentText();
2861
+ const c = b.comment.getText();
2860
2862
  if (/@highlight/.test(c)) {
2861
2863
  const cc = c.replace(/@highlight/g, '').trim();
2862
2864
  b.setCommentText(cc || null);
@@ -4341,7 +4343,7 @@ var pxt;
4341
4343
  }
4342
4344
  else if (pr.type == "number" && pr.shadowBlockId && pr.shadowBlockId == "value") {
4343
4345
  inputName = undefined;
4344
- fields.push(namedField(new Blockly.FieldNumber("0"), defName));
4346
+ fields.push(namedField(new Blockly.FieldTextInput("0", Blockly.FieldTextInput.numberValidator), defName));
4345
4347
  }
4346
4348
  else if (pr.type == "string" && pr.shadowOptions && pr.shadowOptions.toString) {
4347
4349
  inputCheck = null;
@@ -5443,6 +5445,11 @@ var pxt;
5443
5445
  let blockText = '<xml>' +
5444
5446
  '<block type="variables_change" gap="' + gap + '">' +
5445
5447
  Blockly.Variables.generateVariableFieldXmlString(mostRecentVariable) +
5448
+ '<value name="DELTA">' +
5449
+ '<shadow type="math_number">' +
5450
+ '<field name="NUM">1</field>' +
5451
+ '</shadow>' +
5452
+ '</value>' +
5446
5453
  '</block>' +
5447
5454
  '</xml>';
5448
5455
  let block = Blockly.Xml.textToDom(blockText).firstChild;
@@ -7615,8 +7622,19 @@ var pxtblockly;
7615
7622
  this.valueText = text;
7616
7623
  }
7617
7624
  init() {
7618
- super.init();
7625
+ if (this.isInitialized())
7626
+ return;
7627
+ // Build the DOM.
7628
+ this.fieldGroup_ = Blockly.utils.dom.createSvgElement('g', {}, null);
7629
+ if (!this.visible_) {
7630
+ this.fieldGroup_.style.display = 'none';
7631
+ }
7619
7632
  this.onInit();
7633
+ this.updateEditable();
7634
+ this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);
7635
+ // Force a render.
7636
+ this.render_();
7637
+ this.mouseDownWrapper_ = Blockly.bindEventWithChecks_(this.getClickTarget_(), "mousedown", this, this.onMouseDown_);
7620
7638
  }
7621
7639
  dispose() {
7622
7640
  this.onDispose();
@@ -7769,11 +7787,9 @@ var pxtblockly;
7769
7787
  }
7770
7788
  getDisplayText_() {
7771
7789
  // This is only used when isGreyBlock is true
7772
- if (this.isGreyBlock) {
7773
- const text = pxt.Util.htmlUnescape(this.valueText);
7774
- return text.substr(0, text.indexOf("(")) + "(...)";
7775
- }
7776
- return "";
7790
+ const text = pxt.Util.htmlUnescape(this.valueText);
7791
+ return text.substr(0, text.indexOf("(")) + "(...)";
7792
+ ;
7777
7793
  }
7778
7794
  updateEditable() {
7779
7795
  if (this.isGreyBlock && this.fieldGroup_) {
@@ -8030,7 +8046,12 @@ var pxtblockly;
8030
8046
  }
8031
8047
  };
8032
8048
  }
8033
- initView() {
8049
+ init() {
8050
+ if (this.fieldGroup_) {
8051
+ // Field has already been initialized once.
8052
+ return;
8053
+ }
8054
+ super.init();
8034
8055
  // Register mouseover events for animating preview
8035
8056
  this.sourceBlock_.getSvgRoot().addEventListener("mouseenter", this.onMouseEnter);
8036
8057
  this.sourceBlock_.getSvgRoot().addEventListener("mouseleave", this.onMouseLeave);
@@ -8236,10 +8257,16 @@ var pxtblockly;
8236
8257
  this.addArgType('toggle');
8237
8258
  this.type_ = params.type;
8238
8259
  }
8239
- initView() {
8240
- if (!this.fieldGroup_) {
8260
+ init() {
8261
+ if (this.fieldGroup_) {
8262
+ // Field has already been initialized once.
8241
8263
  return;
8242
8264
  }
8265
+ // Build the DOM.
8266
+ this.fieldGroup_ = Blockly.utils.dom.createSvgElement('g', {}, null);
8267
+ if (!this.visible_) {
8268
+ this.fieldGroup_.style.display = 'none';
8269
+ }
8243
8270
  // Add an attribute to cassify the type of field.
8244
8271
  if (this.getArgTypes() !== null) {
8245
8272
  if (this.sourceBlock_.isShadow()) {
@@ -8268,10 +8295,15 @@ var pxtblockly;
8268
8295
  'dy': '0.6ex',
8269
8296
  'y': size.height / 2
8270
8297
  }, this.fieldGroup_);
8298
+ this.updateEditable();
8299
+ this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);
8271
8300
  this.switchToggle(this.state_);
8272
8301
  this.setValue(this.getValue());
8273
8302
  // Force a render.
8274
- this.markDirty();
8303
+ this.render_();
8304
+ this.size_.width = 0;
8305
+ this.mouseDownWrapper_ =
8306
+ Blockly.bindEventWithChecks_(this.getClickTarget_(), 'mousedown', this, this.onMouseDown_);
8275
8307
  }
8276
8308
  updateSize_() {
8277
8309
  this.size_.width = 30;
@@ -9741,7 +9773,7 @@ var pxtblockly;
9741
9773
  }
9742
9774
  render_() {
9743
9775
  if (!this.visible_) {
9744
- this.markDirty();
9776
+ this.size_.width = 0;
9745
9777
  return;
9746
9778
  }
9747
9779
  if (!this.elt) {
@@ -11245,7 +11277,7 @@ var pxtblockly;
11245
11277
  dropdownCreate() {
11246
11278
  let functionList = [];
11247
11279
  if (this.sourceBlock_ && this.sourceBlock_.workspace) {
11248
- let blocks = this.sourceBlock_.workspace.getAllBlocks(false);
11280
+ let blocks = this.sourceBlock_.workspace.getAllBlocks();
11249
11281
  // Iterate through every block and check the name.
11250
11282
  for (let i = 0; i < blocks.length; i++) {
11251
11283
  if (blocks[i].getProcedureDef) {
@@ -11274,6 +11306,10 @@ var pxtblockly;
11274
11306
  }
11275
11307
  onItemSelected(menu, menuItem) {
11276
11308
  let itemText = menuItem.getValue();
11309
+ if (this.sourceBlock_) {
11310
+ // Call any validation function, and allow it to override.
11311
+ itemText = this.callValidator(itemText);
11312
+ }
11277
11313
  if (itemText !== null) {
11278
11314
  this.setValue(itemText);
11279
11315
  }
@@ -11768,8 +11804,8 @@ var pxtblockly;
11768
11804
  }
11769
11805
  return FieldTileset.referencedTiles;
11770
11806
  }
11771
- initView() {
11772
- super.initView();
11807
+ init() {
11808
+ super.init();
11773
11809
  if (this.sourceBlock_ && this.sourceBlock_.isInFlyout) {
11774
11810
  this.setValue(this.getOptions()[0][1]);
11775
11811
  }
@@ -11918,10 +11954,16 @@ var pxtblockly;
11918
11954
  this.addArgType('toggle');
11919
11955
  this.type_ = params.type;
11920
11956
  }
11921
- initView() {
11922
- if (!this.fieldGroup_) {
11957
+ init() {
11958
+ if (this.fieldGroup_) {
11959
+ // Field has already been initialized once.
11923
11960
  return;
11924
11961
  }
11962
+ // Build the DOM.
11963
+ this.fieldGroup_ = Blockly.utils.dom.createSvgElement('g', {}, null);
11964
+ if (!this.visible_) {
11965
+ this.fieldGroup_.style.display = 'none';
11966
+ }
11925
11967
  // Add an attribute to cassify the type of field.
11926
11968
  if (this.getArgTypes() !== null) {
11927
11969
  if (this.sourceBlock_.isShadow()) {
@@ -11993,7 +12035,10 @@ var pxtblockly;
11993
12035
  this.switchToggle(this.state_);
11994
12036
  this.setValue(this.getValue());
11995
12037
  // Force a render.
11996
- this.markDirty();
12038
+ this.render_();
12039
+ this.size_.width = 0;
12040
+ this.mouseDownWrapper_ =
12041
+ Blockly.bindEventWithChecks_(this.getClickTarget_(), 'mousedown', this, this.onMouseDown_);
11997
12042
  }
11998
12043
  getDisplayText_() {
11999
12044
  return this.state_ ? this.getTrueText() : this.getFalseText();