smalruby-editor 0.1.20 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/app/assets/javascripts/blocks/character.js.coffee.erb +3 -10
  4. data/app/assets/javascripts/blocks/control.js.coffee.erb +2 -1
  5. data/app/assets/javascripts/blocks/data.js.coffee.erb +2 -1
  6. data/app/assets/javascripts/blocks/etc.js.coffee.erb +2 -1
  7. data/app/assets/javascripts/blocks/events.js.coffee.erb +5 -4
  8. data/app/assets/javascripts/blocks/field_character.js.coffee.erb +9 -0
  9. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +171 -54
  10. data/app/assets/javascripts/blocks/looks.js.coffee.erb +2 -1
  11. data/app/assets/javascripts/blocks/motion.js.coffee.erb +4 -16
  12. data/app/assets/javascripts/blocks/operators.js.coffee.erb +2 -1
  13. data/app/assets/javascripts/blocks/pen.js.coffee.erb +2 -1
  14. data/app/assets/javascripts/blocks/ruby.js.coffee.erb +2 -1
  15. data/app/assets/javascripts/blocks/sensing.js.coffee.erb +25 -3
  16. data/app/assets/javascripts/blocks/sound.js.coffee.erb +2 -1
  17. data/app/assets/javascripts/generators/ruby.js.coffee.erb +27 -5
  18. data/app/assets/javascripts/models/source_code.js.coffee +20 -7
  19. data/app/assets/javascripts/views/main_menu_view.js.coffee +5 -7
  20. data/app/assets/stylesheets/editor.css.scss +5 -1
  21. data/app/assets/stylesheets/toolbox.css.scss.erb +29 -24
  22. data/app/controllers/source_codes_controller.rb +7 -36
  23. data/app/helpers/editor_helper.rb +9 -0
  24. data/app/models/concerns/ruby_to_block/block/hardware_button_down_or_up.rb +25 -0
  25. data/app/models/concerns/ruby_to_block/block/hardware_button_not_use_pullup.rb +18 -0
  26. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver.rb +22 -0
  27. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_set_speed.rb +20 -0
  28. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_speed.rb +24 -0
  29. data/app/models/concerns/ruby_to_block/block/hardware_on_button_down_or_up.rb +19 -0
  30. data/app/models/concerns/ruby_to_block/block/hardware_operation.rb +15 -0
  31. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_set_speed.rb +22 -0
  32. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_speed.rb +26 -0
  33. data/app/models/concerns/ruby_to_block/block/ruby_p.rb +19 -0
  34. data/app/models/concerns/ruby_to_block/block/{motion_reach_wall.rb → sensing_reach_wall.rb} +1 -1
  35. data/app/models/concerns/ruby_to_block/block/text.rb +3 -2
  36. data/app/models/source_code.rb +20 -0
  37. data/app/views/editor/_toolbox.html.haml +84 -63
  38. data/app/views/editor/index.html.haml +1 -1
  39. data/demos/adjust_2wd_car.rb.xml +179 -0
  40. data/demos/car_chase.rb.xml +129 -126
  41. data/demos/hardware_led.rb.xml +7 -4
  42. data/demos/pong.rb.xml +17 -14
  43. data/demos/star.rb.xml +115 -112
  44. data/lib/smalruby_editor.rb +16 -0
  45. data/lib/smalruby_editor/version.rb +3 -3
  46. data/public/assets/{application-c8991557a0789ac1bc9220f409e7f1c1.js → application-734570836cdba680c1568220a51af40f.js} +216 -86
  47. data/public/assets/{application-c8991557a0789ac1bc9220f409e7f1c1.js.gz → application-734570836cdba680c1568220a51af40f.js.gz} +0 -0
  48. data/public/assets/{application-d4fe6c0f970efe8eab9267fd08718d96.css → application-898cb749439fba4ce44cffeac1216201.css} +37 -9
  49. data/public/assets/{application-d4fe6c0f970efe8eab9267fd08718d96.css.gz → application-898cb749439fba4ce44cffeac1216201.css.gz} +0 -0
  50. data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
  51. data/smalruby-editor.gemspec +2 -1
  52. data/spec/acceptance/block_mode/blocks/events/on_hit.feature +2 -0
  53. data/spec/acceptance/block_mode/blocks/hardware/button_down_or_up.feature +79 -0
  54. data/spec/acceptance/block_mode/blocks/hardware/button_not_use_pullup.feature +61 -0
  55. data/spec/acceptance/block_mode/blocks/hardware/motor_driver.feature +73 -0
  56. data/spec/acceptance/block_mode/blocks/hardware/motor_driver_speed.feature +93 -0
  57. data/spec/acceptance/block_mode/blocks/hardware/on_button_down_or_up.feature +87 -0
  58. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car_speed.feature +111 -0
  59. data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +1 -1
  60. data/spec/acceptance/block_mode/blocks/operators/text.feature +38 -0
  61. data/spec/acceptance/block_mode/blocks/sensing/hit.feature +98 -52
  62. data/spec/acceptance/block_mode/blocks/sensing/reach_wall.feature +98 -0
  63. data/spec/acceptance/block_mode/demo.feature +3 -1
  64. data/spec/acceptance/standalone/save.feature +51 -0
  65. data/spec/helpers/editor_helper_spec.rb +20 -0
  66. data/spec/javascripts/models/source_code_spec.coffee +40 -0
  67. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +269 -0
  68. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +1 -1
  69. data/spec/models/concerns/ruby_to_block/block/{motion_reach_wall_spec.rb → sensing_reach_wall_spec.rb} +2 -2
  70. data/spec/models/concerns/ruby_to_block/block/text_spec.rb +39 -0
  71. data/spec/models/concerns/ruby_to_block_spec.rb +2 -2
  72. data/spec/models/source_code_spec.rb +53 -0
  73. data/spec/steps/base_steps.rb +5 -0
  74. metadata +56 -12
  75. data/demos/rgb_led_anode.rb.xml +0 -83
@@ -2,6 +2,22 @@
2
2
  require 'smalruby_editor/version'
3
3
 
4
4
  module SmalrubyEditor
5
+ # ジャンルのカラー
6
+ COLORS = {
7
+ character: 198,
8
+ control: 43,
9
+ data: 330,
10
+ etc: 340,
11
+ events: 33,
12
+ looks: 270,
13
+ motion: 208,
14
+ operators: 100,
15
+ pen: 160,
16
+ ruby: 340,
17
+ sensing: 190,
18
+ sound: 300,
19
+ }
20
+
5
21
  def create_home_directory(home_dir = nil)
6
22
  if home_dir.blank?
7
23
  path = ENV['SMALRUBY_EDITOR_HOME'] || '~/.smalruby-editor'
@@ -1,3 +1,3 @@
1
- module SmalrubyEditor
2
- VERSION = '0.1.20'
3
- end
1
+ module SmalrubyEditor
2
+ VERSION = '0.1.21'
3
+ end
@@ -12886,16 +12886,33 @@ Blockly.Blocks['text'].init = function() {
12886
12886
  }
12887
12887
  this.set('filename', filename);
12888
12888
  }
12889
- if (this.get('filename').match(/\.xml$/)) {
12890
- data = Smalruby.dumpXml();
12889
+ if (!this.get('data')) {
12890
+ if (this.get('filename').match(/\.xml$/)) {
12891
+ data = Smalruby.dumpXml();
12892
+ } else {
12893
+ if (window.blockMode) {
12894
+ data = Blockly.Ruby.workspaceToCode();
12895
+ } else {
12896
+ data = window.textEditor.getSession().getDocument().getValue();
12897
+ }
12898
+ }
12899
+ return this.set('data', data);
12900
+ }
12901
+ },
12902
+ getRbxmlFilename: function() {
12903
+ var filename;
12904
+ filename = this.get('filename');
12905
+ if (filename.match(/\.rb\.xml$/)) {
12906
+ return filename;
12891
12907
  } else {
12892
- if (window.blockMode) {
12893
- data = Blockly.Ruby.workspaceToCode();
12908
+ if (filename.match(/\.rb$/)) {
12909
+ return filename + '.xml';
12910
+ } else if (filename.match(/\.xml$/)) {
12911
+ return filename.replace(/\.xml$/, '.rb.xml');
12894
12912
  } else {
12895
- data = window.textEditor.getSession().getDocument().getValue();
12913
+ return filename + '.rb.xml';
12896
12914
  }
12897
12915
  }
12898
- return this.set('data', data);
12899
12916
  },
12900
12917
  run: function() {
12901
12918
  return this.post_('run');
@@ -13585,16 +13602,12 @@ Blockly.Blocks['text'].init = function() {
13585
13602
  return window.textEditor.focus();
13586
13603
  },
13587
13604
  onRun: function(e) {
13588
- var errorMsg, filename, sourceCode, xmlSourceCode,
13605
+ var errorMsg, sourceCode, xmlSourceCode,
13589
13606
  _this = this;
13590
13607
  e.preventDefault();
13591
13608
  sourceCode = this.getSourceCode();
13592
- filename = sourceCode.get('filename');
13593
- if (!filename.match(/\.xml$/)) {
13594
- filename += '.xml';
13595
- }
13596
13609
  xmlSourceCode = new Smalruby.SourceCode({
13597
- filename: filename
13610
+ filename: sourceCode.getRbxmlFilename()
13598
13611
  });
13599
13612
  clearMessages();
13600
13613
  this.blockUI({
@@ -13704,15 +13717,11 @@ Blockly.Blocks['text'].init = function() {
13704
13717
  $('#filename').focus();
13705
13718
  return;
13706
13719
  }
13720
+ sourceCode = this.getSourceCode();
13707
13721
  if (window.blockMode) {
13708
- if (!filename.match(/\.xml$/)) {
13709
- filename += '.xml';
13710
- }
13711
13722
  sourceCode = new Smalruby.SourceCode({
13712
- filename: filename
13723
+ filename: sourceCode.getRbxmlFilename()
13713
13724
  });
13714
- } else {
13715
- sourceCode = this.getSourceCode();
13716
13725
  }
13717
13726
  clearMessages();
13718
13727
  this.blockUI({
@@ -14018,6 +14027,25 @@ case end next return until\
14018
14027
  }
14019
14028
  };
14020
14029
 
14030
+ Blockly.Ruby.defineCharacter = function(c) {
14031
+ var blockName, name, rotationStyle;
14032
+ name = c.get('name');
14033
+ blockName = "character_" + name;
14034
+ if (!Blockly.Ruby.definitions_[blockName]) {
14035
+ switch (c.get('rotationStyle')) {
14036
+ case 'left_right':
14037
+ rotationStyle = ', rotation_style: :left_right';
14038
+ break;
14039
+ case 'none':
14040
+ rotationStyle = ', rotation_style: :none';
14041
+ break;
14042
+ default:
14043
+ rotationStyle = '';
14044
+ }
14045
+ return Blockly.Ruby.definitions_[blockName] = "" + name + " = Character.new(costume: " + (Blockly.Ruby.quote_(c.costume())) + ", x: " + (c.get('x')) + ", y: " + (c.get('y')) + ", angle: " + (c.get('angle')) + rotationStyle + ")";
14046
+ }
14047
+ };
14048
+
14021
14049
  Blockly.Ruby.characterStack = function() {
14022
14050
  return this.definitions_['character_stack'];
14023
14051
  };
@@ -14166,8 +14194,24 @@ case end next return until\
14166
14194
  return line + '\n';
14167
14195
  };
14168
14196
 
14197
+ Blockly.Ruby.escapeChars_ = {
14198
+ '"': '\\"'
14199
+ };
14200
+
14169
14201
  Blockly.Ruby.quote_ = function(string) {
14170
- return '\"' + string + '\"';
14202
+ var i, s, sb, _fn, _i, _ref;
14203
+ s = String(string);
14204
+ sb = ['"'];
14205
+ _fn = function(i) {
14206
+ var ch;
14207
+ ch = s.charAt(i);
14208
+ return sb[i + 1] = Blockly.Ruby.escapeChars_[ch] || ch;
14209
+ };
14210
+ for (i = _i = 0, _ref = s.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
14211
+ _fn(i);
14212
+ }
14213
+ sb.push('"');
14214
+ return sb.join('');
14171
14215
  };
14172
14216
 
14173
14217
  Blockly.Ruby.scrub_ = function(block, code) {
@@ -14353,6 +14397,21 @@ case end next return until\
14353
14397
  }
14354
14398
  };
14355
14399
 
14400
+ Blockly.Block.prototype.getCharacterFieldValue = function(name) {
14401
+ var c, char;
14402
+ if (name == null) {
14403
+ name = 'CHAR';
14404
+ }
14405
+ char = this.getFieldValue(name);
14406
+ if (Blockly.Ruby.c()) {
14407
+ c = Smalruby.Collections.CharacterSet.findWhere({
14408
+ name: char
14409
+ });
14410
+ Blockly.Ruby.defineCharacter(c);
14411
+ }
14412
+ return char;
14413
+ };
14414
+
14356
14415
  }).call(this);
14357
14416
  (function() {
14358
14417
  Blockly.Ruby['math_number'] = function(block) {
@@ -14442,19 +14501,9 @@ case end next return until\
14442
14501
  };
14443
14502
 
14444
14503
  Blockly.Ruby['character_new'] = function(block) {
14445
- var c, code, rotationStyle, targetBlock;
14504
+ var c, code, targetBlock;
14446
14505
  c = block.character;
14447
- switch (c.get('rotationStyle')) {
14448
- case 'left_right':
14449
- rotationStyle = ', rotation_style: :left_right';
14450
- break;
14451
- case 'none':
14452
- rotationStyle = ', rotation_style: :none';
14453
- break;
14454
- default:
14455
- rotationStyle = '';
14456
- }
14457
- Blockly.Ruby.definitions_["character_" + (c.get('name'))] = "" + (c.get('name')) + " = Character.new(costume: " + (Blockly.Ruby.quote_(c.costume())) + ", x: " + (c.get('x')) + ", y: " + (c.get('y')) + ", angle: " + (c.get('angle')) + rotationStyle + ")";
14506
+ Blockly.Ruby.defineCharacter(c);
14458
14507
  Blockly.Ruby.cs_().push(c);
14459
14508
  try {
14460
14509
  targetBlock = block.getInputTargetBlock('DO');
@@ -14771,13 +14820,13 @@ case end next return until\
14771
14820
 
14772
14821
  Blockly.Ruby['events_on_hit'] = function(block) {
14773
14822
  var char;
14774
- char = this.getFieldValue('CHAR');
14823
+ char = this.getCharacterFieldValue();
14775
14824
  return Blockly.Ruby.characterEvent_(block, 'DO', 'hit', char);
14776
14825
  };
14777
14826
 
14778
14827
  }).call(this);
14779
14828
  (function() {
14780
- var acDropdown, aiPinDropdown, dioPinDropdown, n, pwmPinDropdown, rgbLedPinDropdown, twoWDPinDropdown;
14829
+ var acDropdown, aiPinDropdown, dioPinDropdown, lorPinDropdown, n, pwmPinDropdown, rgbLedPinDropdown, twoWDPinDropdown;
14781
14830
 
14782
14831
  window.SmalrubyEditor.Hardware = {
14783
14832
  Type: 'Arduino',
@@ -14832,6 +14881,8 @@ case end next return until\
14832
14881
 
14833
14882
  acDropdown = [['アノード', 'anode'], ['カソード', 'cathode']];
14834
14883
 
14884
+ lorPinDropdown = [['左', 'left'], ['右', 'right']];
14885
+
14835
14886
  twoWDPinDropdown = (function() {
14836
14887
  var _i, _results;
14837
14888
  _results = [];
@@ -15218,43 +15269,127 @@ case end next return until\
15218
15269
  return [code, Blockly.Ruby.ORDER_ATOMIC];
15219
15270
  };
15220
15271
 
15221
- Blockly.Blocks['hardware_button_down'] = {
15272
+ Blockly.Blocks['hardware_two_wheel_drive_car_set_speed'] = {
15273
+ init: function() {
15274
+ this.setHelpUrl('');
15275
+ this.setColour(208);
15276
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN').appendField('の').appendField(new Blockly.FieldDropdown(lorPinDropdown), 'LOR').appendField('の速度を');
15277
+ this.interpolateMsg('%1%にする', ['SPEED', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT);
15278
+ this.setInputsInline(true);
15279
+ this.setPreviousStatement(true);
15280
+ this.setNextStatement(true);
15281
+ return this.setTooltip('');
15282
+ }
15283
+ };
15284
+
15285
+ Blockly.Ruby['hardware_two_wheel_drive_car_set_speed'] = function(block) {
15286
+ var lor, pin, speed;
15287
+ pin = this.getFieldValue('PIN');
15288
+ lor = this.getFieldValue('LOR');
15289
+ speed = Blockly.Ruby.valueToCode(this, 'SPEED', Blockly.Ruby.ORDER_NONE) || '100';
15290
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ")." + lor + "_speed = " + speed);
15291
+ };
15292
+
15293
+ Blockly.Blocks['hardware_two_wheel_drive_car_speed'] = {
15222
15294
  init: function() {
15223
15295
  this.setHelpUrl('');
15224
15296
  this.setColour(190);
15225
- this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('を押している');
15226
- this.setOutput(true, 'Boolean');
15297
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN').appendField('').appendField(new Blockly.FieldDropdown(lorPinDropdown), 'LOR').appendField('の速度(%)');
15298
+ this.setOutput(true, 'Number');
15227
15299
  return this.setTooltip('');
15228
15300
  }
15229
15301
  };
15230
15302
 
15231
- Blockly.Ruby['hardware_button_down'] = function(block) {
15303
+ Blockly.Ruby['hardware_two_wheel_drive_car_speed'] = function(block) {
15304
+ var lor, pin;
15305
+ pin = this.getFieldValue('PIN');
15306
+ lor = this.getFieldValue('LOR');
15307
+ return Blockly.Ruby.characterMethodCallInput_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ")." + lor + "_speed");
15308
+ };
15309
+
15310
+ Blockly.Blocks['hardware_motor_driver'] = {
15311
+ init: function() {
15312
+ var methodDropdown;
15313
+ methodDropdown = [['正転させる', 'forward'], ['逆転させる', 'backward'], ['止める', 'stop']];
15314
+ this.setHelpUrl('');
15315
+ this.setColour(208);
15316
+ this.appendDummyInput().appendField('(モータードライバ').appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN').appendField('で)モーターを').appendField(new Blockly.FieldDropdown(methodDropdown), 'METHOD');
15317
+ this.setInputsInline(true);
15318
+ this.setPreviousStatement(true);
15319
+ this.setNextStatement(true);
15320
+ return this.setTooltip('');
15321
+ }
15322
+ };
15323
+
15324
+ Blockly.Ruby['hardware_motor_driver'] = function(block) {
15325
+ var method, pin;
15326
+ pin = this.getFieldValue('PIN');
15327
+ method = this.getFieldValue('METHOD');
15328
+ return Blockly.Ruby.characterMethodCall_("motor_driver(" + (Blockly.Ruby.quote_(pin)) + ")." + method);
15329
+ };
15330
+
15331
+ Blockly.Blocks['hardware_motor_driver_set_speed'] = {
15332
+ init: function() {
15333
+ this.setHelpUrl('');
15334
+ this.setColour(208);
15335
+ this.appendDummyInput().appendField('(モータードライバ').appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN').appendField('の)モーターの速度を');
15336
+ this.interpolateMsg('%1%にする', ['SPEED', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT);
15337
+ this.setInputsInline(true);
15338
+ this.setPreviousStatement(true);
15339
+ this.setNextStatement(true);
15340
+ return this.setTooltip('');
15341
+ }
15342
+ };
15343
+
15344
+ Blockly.Ruby['hardware_motor_driver_set_speed'] = function(block) {
15345
+ var pin, speed;
15346
+ pin = this.getFieldValue('PIN');
15347
+ speed = Blockly.Ruby.valueToCode(this, 'SPEED', Blockly.Ruby.ORDER_NONE) || '100';
15348
+ return Blockly.Ruby.characterMethodCall_("motor_driver(" + (Blockly.Ruby.quote_(pin)) + ").speed = " + speed);
15349
+ };
15350
+
15351
+ Blockly.Blocks['hardware_motor_driver_speed'] = {
15352
+ init: function() {
15353
+ this.setHelpUrl('');
15354
+ this.setColour(190);
15355
+ this.appendDummyInput().appendField('(モータードライバ').appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN').appendField('の)モーターの速度(%)');
15356
+ this.setOutput(true, 'Number');
15357
+ return this.setTooltip('');
15358
+ }
15359
+ };
15360
+
15361
+ Blockly.Ruby['hardware_motor_driver_speed'] = function(block) {
15232
15362
  var pin;
15233
15363
  pin = this.getFieldValue('PIN');
15234
- return ["button(" + pin + ").down?", Blockly.Ruby.ORDER_ATOMIC];
15364
+ return Blockly.Ruby.characterMethodCallInput_("motor_driver(" + (Blockly.Ruby.quote_(pin)) + ").speed");
15235
15365
  };
15236
15366
 
15237
- Blockly.Blocks['hardware_button_up'] = {
15367
+ Blockly.Blocks['hardware_button_down_or_up'] = {
15238
15368
  init: function() {
15369
+ var douDropdown;
15370
+ douDropdown = window.SmalrubyEditor.Sensing.DownOrUpDropdown;
15239
15371
  this.setHelpUrl('');
15240
15372
  this.setColour(190);
15241
- this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('を離している');
15373
+ this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('').appendField(new Blockly.FieldDropdown(douDropdown), 'DOU');
15242
15374
  this.setOutput(true, 'Boolean');
15243
15375
  return this.setTooltip('');
15244
15376
  }
15245
15377
  };
15246
15378
 
15247
- Blockly.Ruby['hardware_button_up'] = function(block) {
15248
- var pin;
15379
+ Blockly.Ruby['hardware_button_down_or_up'] = function(block) {
15380
+ var dou, pin;
15249
15381
  pin = this.getFieldValue('PIN');
15250
- return ["button(" + pin + ").up?", Blockly.Ruby.ORDER_ATOMIC];
15382
+ dou = this.getFieldValue('DOU');
15383
+ return Blockly.Ruby.characterMethodCallInput_("button(" + (Blockly.Ruby.quote_(pin)) + ")." + dou + "?");
15251
15384
  };
15252
15385
 
15253
- Blockly.Blocks['hardware_on_button_down'] = {
15386
+ Blockly.Blocks['hardware_on_button_down_or_up'] = {
15254
15387
  init: function() {
15388
+ var douDropdown;
15389
+ douDropdown = window.SmalrubyEditor.Sensing.DownOrUpDropdown;
15255
15390
  this.setHelpUrl('');
15256
15391
  this.setColour(33);
15257
- this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('を押したとき');
15392
+ this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('').appendField(new Blockly.FieldDropdown(douDropdown), 'DOU').appendField('とき');
15258
15393
  this.appendStatementInput('DO');
15259
15394
  this.setPreviousStatement(true);
15260
15395
  this.setNextStatement(true);
@@ -15262,38 +15397,28 @@ case end next return until\
15262
15397
  }
15263
15398
  };
15264
15399
 
15265
- Blockly.Ruby['hardware_on_button_down'] = function(block) {
15266
- var branch, pin, var0;
15267
- if ((var0 = Blockly.Ruby.receiverName())) {
15268
- pin = this.getFieldValue('PIN');
15269
- branch = Blockly.Ruby.statementToCode(block, 'DO') || '\n';
15270
- return "\n" + var0 + ".on(:button_down, " + pin + ") do\n" + branch + "end\n";
15271
- } else {
15272
- return '';
15273
- }
15400
+ Blockly.Ruby['hardware_on_button_down_or_up'] = function(block) {
15401
+ var dou, pin;
15402
+ pin = this.getFieldValue('PIN');
15403
+ dou = this.getFieldValue('DOU');
15404
+ return Blockly.Ruby.characterEvent_(block, 'DO', "button_" + dou, Blockly.Ruby.quote_(pin));
15274
15405
  };
15275
15406
 
15276
- Blockly.Blocks['hardware_on_button_up'] = {
15407
+ Blockly.Blocks['hardware_button_not_use_pullup'] = {
15277
15408
  init: function() {
15278
15409
  this.setHelpUrl('');
15279
- this.setColour(33);
15280
- this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('を離したとき');
15281
- this.appendStatementInput('DO');
15410
+ this.setColour(340);
15411
+ this.appendDummyInput().appendField('ボタン').appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN').appendField('のプルアップ抵抗を使わない');
15282
15412
  this.setPreviousStatement(true);
15283
15413
  this.setNextStatement(true);
15284
15414
  return this.setTooltip('');
15285
15415
  }
15286
15416
  };
15287
15417
 
15288
- Blockly.Ruby['hardware_on_button_up'] = function(block) {
15289
- var branch, pin, var0;
15290
- if ((var0 = Blockly.Ruby.receiverName())) {
15291
- pin = this.getFieldValue('PIN');
15292
- branch = Blockly.Ruby.statementToCode(block, 'DO') || '\n';
15293
- return "\n" + var0 + ".on(:button_up, " + pin + ") do\n" + branch + "end\n";
15294
- } else {
15295
- return '';
15296
- }
15418
+ Blockly.Ruby['hardware_button_not_use_pullup'] = function(block) {
15419
+ var pin;
15420
+ pin = this.getFieldValue('PIN');
15421
+ return Blockly.Ruby.characterMethodCall_("button(" + (Blockly.Ruby.quote_(pin)) + ").not_use_pullup");
15297
15422
  };
15298
15423
 
15299
15424
  Blockly.Blocks['hardware_sensor_value'] = {
@@ -15623,7 +15748,7 @@ case end next return until\
15623
15748
 
15624
15749
  Blockly.Ruby['motion_point_towards_character'] = function(block) {
15625
15750
  var char;
15626
- char = this.getFieldValue('CHAR');
15751
+ char = this.getCharacterFieldValue();
15627
15752
  return Blockly.Ruby.characterMethodCall_('point_towards', char);
15628
15753
  };
15629
15754
 
@@ -15678,7 +15803,7 @@ case end next return until\
15678
15803
 
15679
15804
  Blockly.Ruby['motion_go_to_character'] = function(block) {
15680
15805
  var char;
15681
- char = this.getFieldValue('CHAR');
15806
+ char = this.getCharacterFieldValue();
15682
15807
  return Blockly.Ruby.characterMethodCall_("go_to(" + char + ")");
15683
15808
  };
15684
15809
 
@@ -15789,20 +15914,6 @@ case end next return until\
15789
15914
  return Blockly.Ruby.characterMethodCall_('turn_if_reach_wall');
15790
15915
  };
15791
15916
 
15792
- Blockly.Blocks['motion_reach_wall'] = {
15793
- init: function() {
15794
- this.setHelpUrl('');
15795
- this.setColour(208);
15796
- this.appendDummyInput().appendField('端に着いた');
15797
- this.setOutput(true, 'Boolean');
15798
- return this.setTooltip('');
15799
- }
15800
- };
15801
-
15802
- Blockly.Ruby['motion_reach_wall'] = function(block) {
15803
- return Blockly.Ruby.characterMethodCallInput_('reach_wall?');
15804
- };
15805
-
15806
15917
  Blockly.Blocks['motion_turn'] = {
15807
15918
  init: function() {
15808
15919
  this.setHelpUrl('');
@@ -16397,9 +16508,28 @@ case end next return until\
16397
16508
  window.SmalrubyEditor.Sensing = {
16398
16509
  KeyDropdown: [['↑', 'K_UP'], ['↓', 'K_DOWN'], ['←', 'K_LEFT'], ['→', 'K_RIGHT'], ['スペース', 'K_SPACE'], ['a', 'K_A'], ['b', 'K_B'], ['c', 'K_C'], ['d', 'K_D'], ['e', 'K_E'], ['f', 'K_F'], ['g', 'K_G'], ['h', 'K_H'], ['i', 'K_I'], ['j', 'K_J'], ['k', 'K_K'], ['l', 'K_L'], ['m', 'K_M'], ['n', 'K_N'], ['o', 'K_O'], ['p', 'K_P'], ['q', 'K_Q'], ['r', 'K_R'], ['s', 'K_S'], ['t', 'K_T'], ['u', 'K_U'], ['v', 'K_V'], ['w', 'K_W'], ['x', 'K_X'], ['y', 'K_Y'], ['z', 'K_Z'], ['0', 'K_0'], ['1', 'K_1'], ['2', 'K_2'], ['3', 'K_3'], ['4', 'K_4'], ['5', 'K_5'], ['6', 'K_6'], ['7', 'K_7'], ['8', 'K_8'], ['9', 'K_9']],
16399
16510
  PushOrDownDropdown: [['押された', 'push'], ['押され続けている', 'down']],
16400
- MouseButtonDropdown: [['左ボタン', 'M_LBUTTON'], ['中ボタン', 'M_MBUTTON'], ['右ボタン', 'M_RBUTTON']]
16511
+ MouseButtonDropdown: [['左ボタン', 'M_LBUTTON'], ['中ボタン', 'M_MBUTTON'], ['右ボタン', 'M_RBUTTON']],
16512
+ DownOrUpDropdown: [['押された', 'down'], ['離された', 'up']]
16401
16513
  };
16402
16514
 
16515
+ Blockly.Blocks['sensing_reach_wall'] = {
16516
+ init: function() {
16517
+ this.setHelpUrl('');
16518
+ this.setColour(190);
16519
+ this.appendDummyInput().appendField('端に触れた');
16520
+ this.setOutput(true, 'Boolean');
16521
+ return this.setTooltip('');
16522
+ }
16523
+ };
16524
+
16525
+ Blockly.Ruby['sensing_reach_wall'] = function(block) {
16526
+ return Blockly.Ruby.characterMethodCallInput_('reach_wall?');
16527
+ };
16528
+
16529
+ Blockly.Blocks['motion_reach_wall'] = Blockly.Blocks['sensing_reach_wall'];
16530
+
16531
+ Blockly.Ruby['motion_reach_wall'] = Blockly.Ruby['sensing_reach_wall'];
16532
+
16403
16533
  Blockly.Blocks['sensing_input_key_push_or_down'] = {
16404
16534
  init: function() {
16405
16535
  var keyDropdown, podDropdown;
@@ -16480,7 +16610,7 @@ case end next return until\
16480
16610
 
16481
16611
  Blockly.Ruby['sensing_hit'] = function(block) {
16482
16612
  var char;
16483
- char = this.getFieldValue('CHAR');
16613
+ char = this.getCharacterFieldValue();
16484
16614
  return Blockly.Ruby.characterMethodCallInput_('hit?', char);
16485
16615
  };
16486
16616
 
@@ -16559,7 +16689,7 @@ case end next return until\
16559
16689
 
16560
16690
  Blockly.Ruby['sensing_character_property'] = function(block) {
16561
16691
  var c, char, property;
16562
- char = this.getFieldValue('CHAR');
16692
+ char = this.getCharacterFieldValue();
16563
16693
  property = this.getFieldValue('PROPERTY');
16564
16694
  c = Smalruby.Collections.CharacterSet.findWhere({
16565
16695
  name: char