From 2c34143c6b868a285bc35294825f90028490d4a5 Mon Sep 17 00:00:00 2001 From: Junichi Ishikura Date: Tue, 7 Jul 2015 16:37:50 +0900 Subject: [PATCH 01/15] [#57117664] added set_volume block. --- .../javascripts/blocks/sound.js.coffee.erb | 18 ++++++++++++++++++ app/assets/javascripts/msg/en_us.js | 1 + app/assets/javascripts/msg/ja.js | 1 + .../ruby_to_block/block/sound_set_volume.rb | 15 +++++++++++++++ app/views/editor/_toolbox_default.html.haml | 4 ++++ 5 files changed, 39 insertions(+) create mode 100644 app/models/concerns/ruby_to_block/block/sound_set_volume.rb diff --git a/app/assets/javascripts/blocks/sound.js.coffee.erb b/app/assets/javascripts/blocks/sound.js.coffee.erb index ee7c4c9..6e49148 100644 --- a/app/assets/javascripts/blocks/sound.js.coffee.erb +++ b/app/assets/javascripts/blocks/sound.js.coffee.erb @@ -66,6 +66,24 @@ Blockly.Blocks['<%= n %>'] = Blockly.Ruby['<%= n %>'] = (block) -> 'stop\n' +# 音量を()%にする +<% n = "#{category}_set_volume" %> +Blockly.Blocks['<%= n %>'] = + init: ()-> + @setHelpUrl('') + @setColour(<%= color %>) + @interpolateMsg(<%= bm('.set_volume') %>, + ['VOLUME', ['Number'], Blockly.ALIGN_RIGHT] + Blockly.ALIGN_RIGHT) + @setInputsInline(true) + @setPreviousStatement(true) + @setNextStatement(true) + @setTooltip('') + +Blockly.Ruby['<%= n %>'] = (block) -> + volume = Blockly.Ruby.valueToCode(@, 'VOLUME', Blockly.Ruby.ORDER_NONE) || '100' + Blockly.Ruby.characterSetVariable_('volume', volume) + # 変数:ボリューム <% n = "#{category}_volume" %> Blockly.Blocks['<%= n %>'] = diff --git a/app/assets/javascripts/msg/en_us.js b/app/assets/javascripts/msg/en_us.js index 12c660c..12ff224 100644 --- a/app/assets/javascripts/msg/en_us.js +++ b/app/assets/javascripts/msg/en_us.js @@ -205,6 +205,7 @@ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_RA = 'A of piano'; Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SI = 'B of piano'; Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO_2 = 'High C of piano'; Blockly.Msg.BLOCKS_SOUND_PLAY = 'play sound %1'; +Blockly.Msg.BLOCKS_SOUND_SET_VOLUME = 'set volume to %1 %'; // blocks/looks.js.coffee.erb diff --git a/app/assets/javascripts/msg/ja.js b/app/assets/javascripts/msg/ja.js index 46f928b..3dd69b3 100644 --- a/app/assets/javascripts/msg/ja.js +++ b/app/assets/javascripts/msg/ja.js @@ -209,6 +209,7 @@ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_RA = 'ピアノのラ'; Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SI = 'ピアノのシ'; Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO_2 = 'ピアノの高いド'; Blockly.Msg.BLOCKS_SOUND_PLAY = '♪%1 の音を鳴らす'; +Blockly.Msg.BLOCKS_SOUND_SET_VOLUME = '♪音量を %1 %にする'; // blocks/looks.js.coffee.erb diff --git a/app/models/concerns/ruby_to_block/block/sound_set_volume.rb b/app/models/concerns/ruby_to_block/block/sound_set_volume.rb new file mode 100644 index 0000000..e322808 --- /dev/null +++ b/app/models/concerns/ruby_to_block/block/sound_set_volume.rb @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +module RubyToBlock + module Block + class SoundSetVolume < CharacterMethodCall + blocknize '^\s*' + CHAR_RE + 'volume\s*=\s*(\S+)\s*$', + statement: true, inline: true + + def self.process_match_data(md, context) + md2 = regexp.match(md[type]) + add_character_method_call_block(context, md2[1], new, VOLUME: md2[2]) + true + end + end + end +end diff --git a/app/views/editor/_toolbox_default.html.haml b/app/views/editor/_toolbox_default.html.haml index 5077bb0..fbdf6aa 100644 --- a/app/views/editor/_toolbox_default.html.haml +++ b/app/views/editor/_toolbox_default.html.haml @@ -272,6 +272,10 @@ -# すべての音を止める -#%block{:type => "#{category}_stop"} + -# 音量を()%にする + %block{:type => "#{category}_set_volume"} + = toolbox_number_value('VOLUME', 100) + -# 変数:ボリューム -#%block{:type => "#{category}_volume"} From c2f681dc4de4f89511599a00b8e9d5392988d066 Mon Sep 17 00:00:00 2001 From: Junichi Ishikura Date: Tue, 7 Jul 2015 16:41:51 +0900 Subject: [PATCH 02/15] [#57117664] added spec and cucumber test. --- .../blocks/sound/set_volume.feature | 81 +++++++++++++++++++ .../ruby_to_block/block/sound_spec.rb | 18 ++++- 2 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 spec/acceptance/block_mode/blocks/sound/set_volume.feature diff --git a/spec/acceptance/block_mode/blocks/sound/set_volume.feature b/spec/acceptance/block_mode/blocks/sound/set_volume.feature new file mode 100644 index 0000000..b7a03f1 --- /dev/null +++ b/spec/acceptance/block_mode/blocks/sound/set_volume.feature @@ -0,0 +1,81 @@ +# encoding: utf-8 +# language: ja +@javascript +機能: sound_set_volume - 「音量を( )%にする」ブロック + シナリオ: ブロックのみ配置する + 前提 "ブロック" タブを表示する + + もし 次のブロックを配置する: + """ + %block{:type => "sound_set_volume", :x => "0", :y => "0"} + %value{:name => "VOLUME"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 100 + """ + かつ ブロックからソースコードを生成する + + ならば テキストエディタのプログラムは "" であること + + シナリオ: キャラクターとブロックを配置する + 前提 "ブロック" タブを表示する + かつ 次のキャラクターを追加する: + | name | costumes | x | y | angle | + | car1 | car1.png | 0 | 0 | 0 | + + もし 次のブロックを配置する: + """ + %block{:type => "character_new", :x => "21", :y => "15"} + %field{:name => "NAME"}< + car1 + %statement{:name => "DO"} + %block{:type => "sound_set_volume", :x => "0", :y => "0"} + %value{:name => "VOLUME"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 100 + """ + かつ ブロックからソースコードを生成する + + ならば テキストエディタのプログラムは以下であること: + """ + require "smalruby" + + car1 = Character.new(costume: "costume1:car1.png", x: 0, y: 0, angle: 0) + car1.volume = 100 + + """ + + シナリオ: キャラクターとイベントとブロックを配置する + 前提 "ブロック" タブを表示する + かつ 次のキャラクターを追加する: + | name | costumes | x | y | angle | + | car1 | car1.png | 0 | 0 | 0 | + + もし 次のブロックを配置する: + """ + %block{:type => "character_new", :x => "21", :y => "15"} + %field{:name => "NAME"}< + car1 + %statement{:name => "DO"} + %block{:type => "events_on_start"} + %statement{:name => "DO"} + %block{:type => "sound_set_volume", :x => "0", :y => "0"} + %value{:name => "VOLUME"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 100 + """ + かつ ブロックからソースコードを生成する + + ならば テキストエディタのプログラムは以下であること: + """ + require "smalruby" + + car1 = Character.new(costume: "costume1:car1.png", x: 0, y: 0, angle: 0) + + car1.on(:start) do + self.volume = 100 + end + + """ diff --git a/spec/models/concerns/ruby_to_block/block/sound_spec.rb b/spec/models/concerns/ruby_to_block/block/sound_spec.rb index f1ec7a1..71dd31f 100644 --- a/spec/models/concerns/ruby_to_block/block/sound_spec.rb +++ b/spec/models/concerns/ruby_to_block/block/sound_spec.rb @@ -7,6 +7,7 @@ describe RubyToBlock::Block, '音ジャンル', to_blocks: true do parts = <<-EOS car1.on(:start) do + self.volume = 100 play(name: "piano_do.wav") end car1.play(name: "piano_do.wav") @@ -21,12 +22,21 @@ - - - - piano_do.wav + + + + 100 + + + + + piano_do.wav + + + + From 1bdd53e22afd40359f48380436365b1c45befedb Mon Sep 17 00:00:00 2001 From: Junichi Ishikura Date: Tue, 7 Jul 2015 16:43:41 +0900 Subject: [PATCH 03/15] [#57117660] added volume block. --- app/assets/javascripts/blocks/sound.js.coffee.erb | 2 +- app/assets/javascripts/msg/en_us.js | 1 + app/assets/javascripts/msg/ja.js | 1 + app/models/concerns/ruby_to_block/block/sound_volume.rb | 8 ++++++++ app/views/editor/_toolbox_default.html.haml | 2 +- 5 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 app/models/concerns/ruby_to_block/block/sound_volume.rb diff --git a/app/assets/javascripts/blocks/sound.js.coffee.erb b/app/assets/javascripts/blocks/sound.js.coffee.erb index 6e49148..6d687d6 100644 --- a/app/assets/javascripts/blocks/sound.js.coffee.erb +++ b/app/assets/javascripts/blocks/sound.js.coffee.erb @@ -90,7 +90,7 @@ Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) - @appendDummyInput().appendField('ボリューム') + @appendDummyInput().appendField(<%= bm(".volume") %>) @setOutput(true, 'Number') @setTooltip('') diff --git a/app/assets/javascripts/msg/en_us.js b/app/assets/javascripts/msg/en_us.js index 12ff224..a9d45f6 100644 --- a/app/assets/javascripts/msg/en_us.js +++ b/app/assets/javascripts/msg/en_us.js @@ -206,6 +206,7 @@ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SI = 'B of piano'; Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO_2 = 'High C of piano'; Blockly.Msg.BLOCKS_SOUND_PLAY = 'play sound %1'; Blockly.Msg.BLOCKS_SOUND_SET_VOLUME = 'set volume to %1 %'; +Blockly.Msg.BLOCKS_SOUND_VOLUME = 'volume'; // blocks/looks.js.coffee.erb diff --git a/app/assets/javascripts/msg/ja.js b/app/assets/javascripts/msg/ja.js index 3dd69b3..d27e4bd 100644 --- a/app/assets/javascripts/msg/ja.js +++ b/app/assets/javascripts/msg/ja.js @@ -210,6 +210,7 @@ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SI = 'ピアノのシ'; Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO_2 = 'ピアノの高いド'; Blockly.Msg.BLOCKS_SOUND_PLAY = '♪%1 の音を鳴らす'; Blockly.Msg.BLOCKS_SOUND_SET_VOLUME = '♪音量を %1 %にする'; +Blockly.Msg.BLOCKS_SOUND_VOLUME = '♪音量'; // blocks/looks.js.coffee.erb diff --git a/app/models/concerns/ruby_to_block/block/sound_volume.rb b/app/models/concerns/ruby_to_block/block/sound_volume.rb new file mode 100644 index 0000000..74f0148 --- /dev/null +++ b/app/models/concerns/ruby_to_block/block/sound_volume.rb @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +module RubyToBlock + module Block + class SoundVolume < Value + blocknize '^\s*volume\s*$', value: true + end + end +end diff --git a/app/views/editor/_toolbox_default.html.haml b/app/views/editor/_toolbox_default.html.haml index fbdf6aa..8bad90f 100644 --- a/app/views/editor/_toolbox_default.html.haml +++ b/app/views/editor/_toolbox_default.html.haml @@ -277,7 +277,7 @@ = toolbox_number_value('VOLUME', 100) -# 変数:ボリューム - -#%block{:type => "#{category}_volume"} + %block{:type => "#{category}_volume"} - category = 'pen' %category{:name => tt('.pen')} From ed59929623330a836a7a6307aae61714c34c1a41 Mon Sep 17 00:00:00 2001 From: Junichi Ishikura Date: Tue, 7 Jul 2015 16:44:22 +0900 Subject: [PATCH 04/15] [#57117660] added spec and cucumber test. --- .../block_mode/blocks/sound/volume.feature | 31 +++++++++++++++++++ .../ruby_to_block/block/sound_volume_spec.rb | 27 ++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 spec/acceptance/block_mode/blocks/sound/volume.feature create mode 100644 spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb diff --git a/spec/acceptance/block_mode/blocks/sound/volume.feature b/spec/acceptance/block_mode/blocks/sound/volume.feature new file mode 100644 index 0000000..e1b88f5 --- /dev/null +++ b/spec/acceptance/block_mode/blocks/sound/volume.feature @@ -0,0 +1,31 @@ +# encoding: utf-8 +# language: ja +@javascript +機能: sound_volume - 「音量」ブロック + 背景: + 前提 "ブロック" タブを表示する + + シナリオ: ブロックを配置する + もし 次のブロックを配置する: + """ + %block{:type => "sound_volume", :x => "0", :y => "0", :inline => "true"} + """ + かつ ブロックからソースコードを生成する + + ならば テキストエディタのプログラムは以下を含むこと: + """ + volume + """ + + もし 次のブロックを配置する: + """ + %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true"} + %value{:name => "ARG"} + %block{:type => "sound_volume"} + """ + かつ ブロックからソースコードを生成する + + ならば テキストエディタのプログラムは以下を含むこと: + """ + p(volume) + """ diff --git a/spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb b/spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb new file mode 100644 index 0000000..16c83de --- /dev/null +++ b/spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +require 'spec_helper' +require_relative 'shared/block_examples' + +# rubocop:disable EmptyLines, LineLength + +describe RubyToBlock::Block::Text, to_blocks: true do + parts = <<-EOS +require "smalruby" + +p(volume) + EOS + describe compact_source_code(parts) do + _parts = parts + let(:data) { _parts } + + it '結果が正しいこと' do + should eq_block_xml(<<-XML) + + + + + + XML + end + end +end From c708278cb58aea1cbe6dcf8e2aa4263566f5f5ba Mon Sep 17 00:00:00 2001 From: Junichi Ishikura Date: Fri, 10 Jul 2015 12:28:46 +0900 Subject: [PATCH 05/15] fixed spec. refactor. --- .../javascripts/blocks/sound.js.coffee.erb | 2 - .../ruby_to_block/block/sound_set_volume.rb | 5 +- .../ruby_to_block/block/sound_volume.rb | 21 ++++- .../blocks/sound/set_volume.feature | 86 +++++++++---------- .../ruby_to_block/block/sound_spec.rb | 28 ++++++ .../ruby_to_block/block/sound_volume_spec.rb | 27 ------ 6 files changed, 95 insertions(+), 74 deletions(-) delete mode 100644 spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb diff --git a/app/assets/javascripts/blocks/sound.js.coffee.erb b/app/assets/javascripts/blocks/sound.js.coffee.erb index 6d687d6..89db3eb 100644 --- a/app/assets/javascripts/blocks/sound.js.coffee.erb +++ b/app/assets/javascripts/blocks/sound.js.coffee.erb @@ -66,7 +66,6 @@ Blockly.Blocks['<%= n %>'] = Blockly.Ruby['<%= n %>'] = (block) -> 'stop\n' -# 音量を()%にする <% n = "#{category}_set_volume" %> Blockly.Blocks['<%= n %>'] = init: ()-> @@ -84,7 +83,6 @@ Blockly.Ruby['<%= n %>'] = (block) -> volume = Blockly.Ruby.valueToCode(@, 'VOLUME', Blockly.Ruby.ORDER_NONE) || '100' Blockly.Ruby.characterSetVariable_('volume', volume) -# 変数:ボリューム <% n = "#{category}_volume" %> Blockly.Blocks['<%= n %>'] = init: ()-> diff --git a/app/models/concerns/ruby_to_block/block/sound_set_volume.rb b/app/models/concerns/ruby_to_block/block/sound_set_volume.rb index e322808..739ab25 100644 --- a/app/models/concerns/ruby_to_block/block/sound_set_volume.rb +++ b/app/models/concerns/ruby_to_block/block/sound_set_volume.rb @@ -2,7 +2,10 @@ module RubyToBlock module Block class SoundSetVolume < CharacterMethodCall - blocknize '^\s*' + CHAR_RE + 'volume\s*=\s*(\S+)\s*$', + blocknize ['^\s*', + CHAR_RE, + 'volume\s*=\s*(\S+)', + '\s*$'].join(''), statement: true, inline: true def self.process_match_data(md, context) diff --git a/app/models/concerns/ruby_to_block/block/sound_volume.rb b/app/models/concerns/ruby_to_block/block/sound_volume.rb index 74f0148..dfbee1f 100644 --- a/app/models/concerns/ruby_to_block/block/sound_volume.rb +++ b/app/models/concerns/ruby_to_block/block/sound_volume.rb @@ -2,7 +2,26 @@ module RubyToBlock module Block class SoundVolume < Value - blocknize '^\s*volume\s*$', value: true + include CharacterOperation + + blocknize ['^\s*', + CHAR_RE, + 'volume', + '\s*$'].join(''), + value: true + + def self.process_match_data(md, context) + md2 = regexp.match(md[type]) + + character = get_character(context, md2[1]) + return false if context.receiver != character + + block = new + context.add_value(block) + block.character = character + + true + end end end end diff --git a/spec/acceptance/block_mode/blocks/sound/set_volume.feature b/spec/acceptance/block_mode/blocks/sound/set_volume.feature index b7a03f1..a77d42e 100644 --- a/spec/acceptance/block_mode/blocks/sound/set_volume.feature +++ b/spec/acceptance/block_mode/blocks/sound/set_volume.feature @@ -6,13 +6,13 @@ 前提 "ブロック" タブを表示する もし 次のブロックを配置する: - """ - %block{:type => "sound_set_volume", :x => "0", :y => "0"} - %value{:name => "VOLUME"} - %block{:type => "math_number"} - %field{:name => "NUM"}< - 100 - """ + """ + %block{:type => "sound_set_volume", :x => "0", :y => "0"} + %value{:name => "VOLUME"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 100 + """ かつ ブロックからソースコードを生成する ならば テキストエディタのプログラムは "" であること @@ -24,27 +24,27 @@ | car1 | car1.png | 0 | 0 | 0 | もし 次のブロックを配置する: - """ - %block{:type => "character_new", :x => "21", :y => "15"} - %field{:name => "NAME"}< - car1 - %statement{:name => "DO"} - %block{:type => "sound_set_volume", :x => "0", :y => "0"} - %value{:name => "VOLUME"} - %block{:type => "math_number"} - %field{:name => "NUM"}< - 100 - """ + """ + %block{:type => "character_new", :x => "21", :y => "15"} + %field{:name => "NAME"}< + car1 + %statement{:name => "DO"} + %block{:type => "sound_set_volume", :x => "0", :y => "0"} + %value{:name => "VOLUME"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 100 + """ かつ ブロックからソースコードを生成する ならば テキストエディタのプログラムは以下であること: - """ - require "smalruby" + """ + require "smalruby" - car1 = Character.new(costume: "costume1:car1.png", x: 0, y: 0, angle: 0) - car1.volume = 100 + car1 = Character.new(costume: "costume1:car1.png", x: 0, y: 0, angle: 0) + car1.volume = 100 - """ + """ シナリオ: キャラクターとイベントとブロックを配置する 前提 "ブロック" タブを表示する @@ -53,29 +53,29 @@ | car1 | car1.png | 0 | 0 | 0 | もし 次のブロックを配置する: - """ - %block{:type => "character_new", :x => "21", :y => "15"} - %field{:name => "NAME"}< - car1 - %statement{:name => "DO"} - %block{:type => "events_on_start"} - %statement{:name => "DO"} - %block{:type => "sound_set_volume", :x => "0", :y => "0"} - %value{:name => "VOLUME"} - %block{:type => "math_number"} - %field{:name => "NUM"}< - 100 - """ + """ + %block{:type => "character_new", :x => "21", :y => "15"} + %field{:name => "NAME"}< + car1 + %statement{:name => "DO"} + %block{:type => "events_on_start"} + %statement{:name => "DO"} + %block{:type => "sound_set_volume", :x => "0", :y => "0"} + %value{:name => "VOLUME"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 100 + """ かつ ブロックからソースコードを生成する ならば テキストエディタのプログラムは以下であること: - """ - require "smalruby" + """ + require "smalruby" - car1 = Character.new(costume: "costume1:car1.png", x: 0, y: 0, angle: 0) + car1 = Character.new(costume: "costume1:car1.png", x: 0, y: 0, angle: 0) - car1.on(:start) do - self.volume = 100 - end + car1.on(:start) do + self.volume = 100 + end - """ + """ diff --git a/spec/models/concerns/ruby_to_block/block/sound_spec.rb b/spec/models/concerns/ruby_to_block/block/sound_spec.rb index 71dd31f..9afe346 100644 --- a/spec/models/concerns/ruby_to_block/block/sound_spec.rb +++ b/spec/models/concerns/ruby_to_block/block/sound_spec.rb @@ -9,8 +9,11 @@ car1.on(:start) do self.volume = 100 play(name: "piano_do.wav") + p(volume) end car1.play(name: "piano_do.wav") +car1.volume = 100 +p(car1.volume) EOS describe compact_source_code(parts), character_new_data: true do _parts = parts @@ -35,6 +38,13 @@ piano_do.wav + + + + + + + @@ -46,6 +56,24 @@ piano_do.wav + + + + + 100 + + + + + + + car1.volume + + + + + + diff --git a/spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb b/spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb deleted file mode 100644 index 16c83de..0000000 --- a/spec/models/concerns/ruby_to_block/block/sound_volume_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -require 'spec_helper' -require_relative 'shared/block_examples' - -# rubocop:disable EmptyLines, LineLength - -describe RubyToBlock::Block::Text, to_blocks: true do - parts = <<-EOS -require "smalruby" - -p(volume) - EOS - describe compact_source_code(parts) do - _parts = parts - let(:data) { _parts } - - it '結果が正しいこと' do - should eq_block_xml(<<-XML) - - - - - - XML - end - end -end From 51e8242c10ea615d3d157c1d00e940daeb692dbf Mon Sep 17 00:00:00 2001 From: Junichi Ishikura Date: Fri, 10 Jul 2015 18:29:15 +0900 Subject: [PATCH 06/15] removed comments. --- app/views/editor/_toolbox_default.html.haml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/views/editor/_toolbox_default.html.haml b/app/views/editor/_toolbox_default.html.haml index 8bad90f..0868fee 100644 --- a/app/views/editor/_toolbox_default.html.haml +++ b/app/views/editor/_toolbox_default.html.haml @@ -272,11 +272,9 @@ -# すべての音を止める -#%block{:type => "#{category}_stop"} - -# 音量を()%にする %block{:type => "#{category}_set_volume"} = toolbox_number_value('VOLUME', 100) - -# 変数:ボリューム %block{:type => "#{category}_volume"} - category = 'pen' From 6ad6dcc4a8e5d04b812ba68332be7e3980489793 Mon Sep 17 00:00:00 2001 From: Yuki Ueda Date: Tue, 8 Sep 2015 13:27:00 +0900 Subject: [PATCH 07/15] add block to ruby for times --- .../ruby_to_block/block/control_times.rb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/models/concerns/ruby_to_block/block/control_times.rb diff --git a/app/models/concerns/ruby_to_block/block/control_times.rb b/app/models/concerns/ruby_to_block/block/control_times.rb new file mode 100644 index 0000000..4f6caa6 --- /dev/null +++ b/app/models/concerns/ruby_to_block/block/control_times.rb @@ -0,0 +1,20 @@ +module RubyToBlock + module Block + class ControlTimes < Base + blocknize '^\s*(.+)\.times\s+do\s*$', statement: true, indent: true + + def self.process_match_data(md, context) + return false unless context.receiver + md2 = regexp.match(md[type]) + + do_block = Block.new('null') + block = new(statements: { DO: do_block }) + process_value_string(context, block, md2[1], :COUNT) + context.statement_stack.push([type, block]) + context.current_block.sibling = block + context.current_block = do_block + true + end + end + end +end From 9df182e836618fdd2c1162d7ab8cab916f134c40 Mon Sep 17 00:00:00 2001 From: Yuki Ueda Date: Thu, 10 Sep 2015 17:53:25 +0900 Subject: [PATCH 08/15] add test for times --- .../javascripts/blocks/control.js.coffee.erb | 2 +- .../block_mode/blocks/control/times.feature | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/blocks/control.js.coffee.erb b/app/assets/javascripts/blocks/control.js.coffee.erb index 321c6a2..1b055d3 100644 --- a/app/assets/javascripts/blocks/control.js.coffee.erb +++ b/app/assets/javascripts/blocks/control.js.coffee.erb @@ -123,7 +123,7 @@ Blockly.Blocks['<%= n %>'] = @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> - count = Blockly.Ruby.valueToCode(@, 'COUNT', Blockly.Ruby.ORDER_NONE) || 0 + count = Blockly.Ruby.valueToCode(@, 'COUNT', Blockly.Ruby.ORDER_STRING_CONVERSIO) || 0 branch = Blockly.Ruby.statementToCode(block, 'DO') || '\n' "#{count}.times do\n" + branch + 'end\n' diff --git a/spec/acceptance/block_mode/blocks/control/times.feature b/spec/acceptance/block_mode/blocks/control/times.feature index 2924fe8..d91df1f 100644 --- a/spec/acceptance/block_mode/blocks/control/times.feature +++ b/spec/acceptance/block_mode/blocks/control/times.feature @@ -70,3 +70,43 @@ end """ + + シナリオ: ブロックの中身に計算式を配置する。 + 前提 "ブロック" タブを表示する + + もし 次のブロックを配置する: + """ + %block{:type => "variables_set", :x => "0", :y => "0"} + %field{:name => "VAR"}< + 変数1 + %value{:name => "VALUE"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 5 + %next + %block{:type => "control_times", :x => "0", :y => "0"} + %value{:name => "COUNT"} + %block{:type => "operators_minus"} + %value{:name => "A"} + %block{:type => "variables_get"} + %field{:name => "VAR"}< + 変数1 + %value{:name => "B"} + %block{:type => "math_number"} + %field{:name => "NUM"}< + 1 + %statement{:name => "DO"} + %block{:type => "ruby_statement", :x => "0", :y => "0"} + %field{:name => "STATEMENT"}< + p self + """ + かつ ブロックからソースコードを生成する + + ならば テキストエディタのプログラムは以下であること: + """ + require "smalruby" + 変数1 = 5 + (変数1 - 1).times do + p self + end + """ From ad883366a3ab32570c23609daf78bd5f121539cc Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Thu, 11 Feb 2016 09:58:21 +0900 Subject: [PATCH 09/15] =?UTF-8?q?[fix=20#113507113]=20fixed=20japanese=20l?= =?UTF-8?q?abel=20'=E2=99=A3=E3=82=AD=E3=83=BC=E3=83=9C=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=AE=20%1=20=E3=81=8C=20%2=20=E3=81=A8=E3=81=8D'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/javascripts/msg/ja.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/msg/ja.js b/app/assets/javascripts/msg/ja.js index d27e4bd..4c10f83 100644 --- a/app/assets/javascripts/msg/ja.js +++ b/app/assets/javascripts/msg/ja.js @@ -119,7 +119,7 @@ Blockly.Msg.BLOCKS_MOTION_SELF_ANGLE = '■向き'; // blocks/events.js.coffee.erb Blockly.Msg.BLOCKS_EVENTS_ON_START = '♣実行ボタンがクリックされたとき'; -Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = '♣キーボードの %1 が %2 のとき'; +Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = '♣キーボードの %1 が %2 とき'; Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = '♣キャラクターがクリックされたとき'; Blockly.Msg.BLOCKS_EVENTS_ON_HIT = '♣%1 にぶつかったとき'; From 8ca729f066c992f68e0bcb84d2aa65e694c0c63f Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Thu, 11 Feb 2016 10:31:09 +0900 Subject: [PATCH 10/15] fixed typo and spec. --- app/assets/javascripts/blocks/control.js.coffee.erb | 2 +- spec/acceptance/block_mode/blocks/control/times.feature | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/blocks/control.js.coffee.erb b/app/assets/javascripts/blocks/control.js.coffee.erb index 1b055d3..b92a6af 100644 --- a/app/assets/javascripts/blocks/control.js.coffee.erb +++ b/app/assets/javascripts/blocks/control.js.coffee.erb @@ -123,7 +123,7 @@ Blockly.Blocks['<%= n %>'] = @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> - count = Blockly.Ruby.valueToCode(@, 'COUNT', Blockly.Ruby.ORDER_STRING_CONVERSIO) || 0 + count = Blockly.Ruby.valueToCode(@, 'COUNT', Blockly.Ruby.ORDER_STRING_CONVERSION) || 0 branch = Blockly.Ruby.statementToCode(block, 'DO') || '\n' "#{count}.times do\n" + branch + 'end\n' diff --git a/spec/acceptance/block_mode/blocks/control/times.feature b/spec/acceptance/block_mode/blocks/control/times.feature index d91df1f..a01f54f 100644 --- a/spec/acceptance/block_mode/blocks/control/times.feature +++ b/spec/acceptance/block_mode/blocks/control/times.feature @@ -105,8 +105,11 @@ ならば テキストエディタのプログラムは以下であること: """ require "smalruby" + 変数1 = 5 + (変数1 - 1).times do p self end + """ From c86214a5ea22f30b23fe7ab533fb6c476d1b3707 Mon Sep 17 00:00:00 2001 From: Yamato Mitsui Date: Thu, 3 Mar 2016 12:04:58 +0900 Subject: [PATCH 11/15] add broadcast block --- Gemfile.lock | 20 ++++++------------- .../javascripts/blocks/events.js.coffee.erb | 18 +++++++++++++++++ app/assets/javascripts/msg/en_us.js | 1 + app/assets/javascripts/msg/ja.js | 1 + app/views/editor/_toolbox_default.html.haml | 3 +++ db/schema.rb | 14 ++++++------- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6f91c4b..3705ad5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -81,7 +81,6 @@ GEM database_rewinder (0.0.2) diff-lcs (1.2.5) docile (1.1.5) - dxruby (1.4.0) dxruby_sdl (0.0.13) rsdl rubysdl (~> 2.1.3) @@ -98,7 +97,6 @@ GEM eventmachine (1.0.4) execjs (2.0.2) ffi (1.9.8) - ffi (1.9.8-x86-mingw32) flatstrap-sass (2.3.1.0) font-awesome-rails (~> 3.0.2.0) sass (~> 3.2) @@ -107,8 +105,6 @@ GEM formatador (0.2.5) gherkin (2.12.2) multi_json (~> 1.3) - gherkin (2.12.2-x86-mingw32) - multi_json (~> 1.3) guard (2.12.5) formatador (>= 0.2.4) listen (~> 2.7) @@ -172,8 +168,6 @@ GEM netrc (0.10.2) nokogiri (1.6.1) mini_portile (~> 0.5.0) - nokogiri (1.6.1-x86-mingw32) - mini_portile (~> 0.5.0) notiffany (0.0.6) nenv (~> 0.1) shellany (~> 0.0) @@ -279,11 +273,6 @@ GEM dxruby_sdl (~> 0.0.13) mime-types (~> 1.6) smalrubot (~> 0.0.6) - smalruby (0.1.10-x86-mingw32) - activesupport - dxruby (= 1.4.0) - mime-types (~> 1.6) - smalrubot (~> 0.0.6) spring (1.2.0) spring-commands-rspec (1.0.4) spring (>= 0.9.1) @@ -299,7 +288,6 @@ GEM activesupport (>= 3.0) sprockets (~> 2.8) sqlite3 (1.3.8) - sqlite3 (1.3.8-x86-mingw32) teaspoon (0.7.9) railties (>= 3.2.5, < 5) term-ansicolor (1.3.0) @@ -328,8 +316,6 @@ GEM raindrops (~> 0.7) websocket (1.0.7) websocket-driver (0.3.2) - win32-process (0.7.4) - ffi (>= 1.0.0) xpath (2.0.0) nokogiri (~> 1.3) @@ -379,3 +365,9 @@ DEPENDENCIES turnip uglifier (>= 1.3.0) unicorn + +RUBY VERSION + ruby 2.1.5p273 + +BUNDLED WITH + 1.12.0.pre.2 diff --git a/app/assets/javascripts/blocks/events.js.coffee.erb b/app/assets/javascripts/blocks/events.js.coffee.erb index c0d6697..23cf7c7 100644 --- a/app/assets/javascripts/blocks/events.js.coffee.erb +++ b/app/assets/javascripts/blocks/events.js.coffee.erb @@ -79,3 +79,21 @@ Blockly.Blocks['<%= n %>'] = Blockly.Ruby['<%= n %>'] = (block) -> char = @getCharacterFieldValue() Blockly.Ruby.characterEvent_(block, 'DO', 'hit', char) + +# [▼イベント]を送る +<% n = '#{category}_broadcast' %> +Blockly.Blocks['<%= n %>'] = + init: ()-> + @setHelpUrl('') + @setColour(<%= color %>) + @interpolateMsg(<%= bm('.broadcast') %>, + ['TEXT', null, Blockly.ALIGN_RIGHT], + Blockly.ALIGN_RIGHT) + @setInputsInline(true) + @setPreviousStatement(true) + @setNextStatement(true) + @setTooltip('') + +Blockly.Ruby['<%= n %>'] = (block) -> + text = Blockly.Ruby.valueToCode(@, 'TEXT', Blockly.Ruby.ORDER_NONE) || Blockly.Ruby.quote_('') + Blockly.Ruby.characterMethodCall_('broadcast', "message: #{text}") diff --git a/app/assets/javascripts/msg/en_us.js b/app/assets/javascripts/msg/en_us.js index a9d45f6..0c87be9 100644 --- a/app/assets/javascripts/msg/en_us.js +++ b/app/assets/javascripts/msg/en_us.js @@ -118,6 +118,7 @@ Blockly.Msg.BLOCKS_EVENTS_ON_START = 'when Run clicked'; Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = 'when %1 key %2'; Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = 'when this sprite clicked'; Blockly.Msg.BLOCKS_EVENTS_ON_HIT = 'when %1 hit'; +Blockly.Msg.BLOCKS_EVENTS_BROADCAST = 'broadcast %1'; // blocks/sensing.js.coffee.erb diff --git a/app/assets/javascripts/msg/ja.js b/app/assets/javascripts/msg/ja.js index 4c10f83..c4e4845 100644 --- a/app/assets/javascripts/msg/ja.js +++ b/app/assets/javascripts/msg/ja.js @@ -122,6 +122,7 @@ Blockly.Msg.BLOCKS_EVENTS_ON_START = '♣実行ボタンがクリックされた Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = '♣キーボードの %1 が %2 とき'; Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = '♣キャラクターがクリックされたとき'; Blockly.Msg.BLOCKS_EVENTS_ON_HIT = '♣%1 にぶつかったとき'; +Blockly.Msg.BLOCKS_EVENTS_BROADCAST = '%1 を送る'; // blocks/sensing.js.coffee.erb diff --git a/app/views/editor/_toolbox_default.html.haml b/app/views/editor/_toolbox_default.html.haml index 0868fee..647ae8d 100644 --- a/app/views/editor/_toolbox_default.html.haml +++ b/app/views/editor/_toolbox_default.html.haml @@ -306,6 +306,9 @@ -# [▼キャラクター]にぶつかったとき %block{:type => "#{category}_on_hit"} + -# [▼イベント]を送る + %block{:type => '#{category}_broadcast'} + - category = 'control' %category{:name => tt('.control')} -# ( )秒待つ diff --git a/db/schema.rb b/db/schema.rb index 70762c4..63fb893 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -22,9 +22,9 @@ t.datetime "updated_at" end - add_index "costumes", ["name"], name: "index_costumes_on_name" - add_index "costumes", ["position"], name: "index_costumes_on_position" - add_index "costumes", ["user_id"], name: "index_costumes_on_user_id" + add_index "costumes", ["name"], name: "index_costumes_on_name", using: :btree + add_index "costumes", ["position"], name: "index_costumes_on_position", using: :btree + add_index "costumes", ["user_id"], name: "index_costumes_on_user_id", using: :btree create_table "source_codes", force: true do |t| t.text "data" @@ -43,15 +43,15 @@ t.datetime "created_at" end - add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true - add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context" + add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true, using: :btree + add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree create_table "tags", force: true do |t| t.string "name" t.integer "taggings_count", default: 0 end - add_index "tags", ["name"], name: "index_tags_on_name", unique: true + add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree create_table "users", force: true do |t| t.string "name" @@ -60,6 +60,6 @@ t.datetime "updated_at" end - add_index "users", ["name"], name: "index_users_on_name", unique: true + add_index "users", ["name"], name: "index_users_on_name", unique: true, using: :btree end From 0e31be361cb0eec5e202e1115c016113b03cda95 Mon Sep 17 00:00:00 2001 From: Yamato Mitsui Date: Fri, 4 Mar 2016 17:01:56 +0900 Subject: [PATCH 12/15] add when i receive block --- .../javascripts/blocks/events.js.coffee.erb | 46 +++++++++++++++++-- app/assets/javascripts/msg/en_us.js | 5 ++ app/assets/javascripts/msg/ja.js | 7 ++- app/views/editor/_toolbox_default.html.haml | 14 +++++- config/locales/en.yml | 1 + config/locales/ja.yml | 1 + 6 files changed, 68 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/blocks/events.js.coffee.erb b/app/assets/javascripts/blocks/events.js.coffee.erb index 23cf7c7..cc60e21 100644 --- a/app/assets/javascripts/blocks/events.js.coffee.erb +++ b/app/assets/javascripts/blocks/events.js.coffee.erb @@ -80,14 +80,52 @@ Blockly.Ruby['<%= n %>'] = (block) -> char = @getCharacterFieldValue() Blockly.Ruby.characterEvent_(block, 'DO', 'hit', char) -# [▼イベント]を送る +# [▼メッセージ] +<% n = "#{category}_messages" %> +Blockly.Blocks['<%= n %>'] = + init: ()-> + sounds = [ + [<%= bm('.messages1') %>, 'messages1'], + [<%= bm('.messages2') %>, 'messages2'], + ] + @setHelpUrl('') + @setColour(<%= color %>) + @interpolateMsg(<%= bm('.messages') %>, + ['NAME', new Blockly.FieldDropdown(sounds)], + Blockly.ALIGN_RIGHT) + @setOutput(true, 'String') + @setTooltip('') + +Blockly.Ruby['<%= n %>'] = (block) -> + code = Blockly.Ruby.quote_(@getFieldValue('NAME')) + [code, Blockly.Ruby.ORDER_ATOMIC] + +# [▼メッセージ]を受け取ったとき +<% n = '#{category}_when_i_receive' %> +Blockly.Blocks['<%= n %>'] = + init: ()-> + @setHelpUrl('') + @setColour(<%= color %>) + @interpolateMsg(<%= bm('.when_i_receive') %>, + ['NAME', ['String'], Blockly.ALIGN_RIGHT], + Blockly.ALIGN_RIGHT) + @appendStatementInput('DO') + @setPreviousStatement(true) + @setNextStatement(true) + @setTooltip('') + +Blockly.Ruby['<%= n %>'] = (block) -> + arg = Blockly.Ruby.valueToCode(@, 'NAME', Blockly.Ruby.ORDER_NONE) || '' + Blockly.Ruby.characterEvent_(block, 'DO', 'receive', arg) + +# [▼メッセージ]を送る <% n = '#{category}_broadcast' %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.broadcast') %>, - ['TEXT', null, Blockly.ALIGN_RIGHT], + ['NAME', ['String'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @@ -95,5 +133,5 @@ Blockly.Blocks['<%= n %>'] = @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> - text = Blockly.Ruby.valueToCode(@, 'TEXT', Blockly.Ruby.ORDER_NONE) || Blockly.Ruby.quote_('') - Blockly.Ruby.characterMethodCall_('broadcast', "message: #{text}") + arg = Blockly.Ruby.valueToCode(@, 'NAME', Blockly.Ruby.ORDER_NONE) || '' + Blockly.Ruby.characterMethodCall_('broadcast', arg) \ No newline at end of file diff --git a/app/assets/javascripts/msg/en_us.js b/app/assets/javascripts/msg/en_us.js index 0c87be9..0c8e149 100644 --- a/app/assets/javascripts/msg/en_us.js +++ b/app/assets/javascripts/msg/en_us.js @@ -118,7 +118,12 @@ Blockly.Msg.BLOCKS_EVENTS_ON_START = 'when Run clicked'; Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = 'when %1 key %2'; Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = 'when this sprite clicked'; Blockly.Msg.BLOCKS_EVENTS_ON_HIT = 'when %1 hit'; +Blockly.Msg.BLOCKS_EVENTS_MESSAGES = '%1'; +Blockly.Msg.BLOCKS_EVENTS_MESSAGES1 = 'message1'; +Blockly.Msg.BLOCKS_EVENTS_MESSAGES2 = 'message2'; +Blockly.Msg.BLOCKS_EVENTS_WHEN_I_RECEIVE = 'when I receive %1'; Blockly.Msg.BLOCKS_EVENTS_BROADCAST = 'broadcast %1'; +// Blockly.Msg.BLOCKS_EVENTS_BROADCAST_AND_WAIT = 'broadcast %1 and wait'; // blocks/sensing.js.coffee.erb diff --git a/app/assets/javascripts/msg/ja.js b/app/assets/javascripts/msg/ja.js index c4e4845..1fa48c5 100644 --- a/app/assets/javascripts/msg/ja.js +++ b/app/assets/javascripts/msg/ja.js @@ -122,7 +122,12 @@ Blockly.Msg.BLOCKS_EVENTS_ON_START = '♣実行ボタンがクリックされた Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = '♣キーボードの %1 が %2 とき'; Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = '♣キャラクターがクリックされたとき'; Blockly.Msg.BLOCKS_EVENTS_ON_HIT = '♣%1 にぶつかったとき'; -Blockly.Msg.BLOCKS_EVENTS_BROADCAST = '%1 を送る'; +Blockly.Msg.BLOCKS_EVENTS_MESSAGES = '%1'; +Blockly.Msg.BLOCKS_EVENTS_MESSAGES1 = 'メッセージ1'; +Blockly.Msg.BLOCKS_EVENTS_MESSAGES2 = 'メッセージ2' +Blockly.Msg.BLOCKS_EVENTS_WHEN_I_RECEIVE = '♣%1 を受け取ったとき'; +Blockly.Msg.BLOCKS_EVENTS_BROADCAST = '♣%1 を送る'; +// Blockly.Msg.BLOCKS_EVENTS_BROADCAST_AND_WAIT = '♣%1 を送って、待つ'; // blocks/sensing.js.coffee.erb diff --git a/app/views/editor/_toolbox_default.html.haml b/app/views/editor/_toolbox_default.html.haml index 647ae8d..4a51d63 100644 --- a/app/views/editor/_toolbox_default.html.haml +++ b/app/views/editor/_toolbox_default.html.haml @@ -264,6 +264,7 @@ - category = 'sound' %category{:name => tt('.sound')} + -# [▼プリセット音声]の音を鳴らす %block{:type => "#{category}_play"} %value{:name => 'NAME'} @@ -306,8 +307,19 @@ -# [▼キャラクター]にぶつかったとき %block{:type => "#{category}_on_hit"} - -# [▼イベント]を送る + -# [▼メッセージ]を受け取ったとき + %block{:type => '#{category}_when_i_receive'} + %value{:name => 'NAME'} + %block{:type => "#{category}_messages"} + + -# [▼メッセージ]を送る %block{:type => '#{category}_broadcast'} + %value{:name => 'NAME'} + %block{:type => "#{category}_messages"} + + -# [▼メッセージ]を送って、待つ + -#%block{:type => '#{category}_broadcast_and_wait'} + -# = toolbox_text_value('TEXT', tt('.message')) - category = 'control' %category{:name => tt('.control')} diff --git a/config/locales/en.yml b/config/locales/en.yml index 6539a80..ddc2836 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -68,6 +68,7 @@ en: hello: "Hello!" world: "world" text: "text" + message: "message" character_modal: name: "Name" diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 513506e..f8751a1 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -69,6 +69,7 @@ ja: hello: "こんにちは!" world: "あいうえお" text: "文章" + message: "メッセージ" character_modal: name: "名前" From 55fe503672281d605e9f805eff95151bcb973fb9 Mon Sep 17 00:00:00 2001 From: Yamato Mitsui Date: Fri, 4 Mar 2016 18:00:49 +0900 Subject: [PATCH 13/15] on the way to translate ruby to block --- .../ruby_to_block/block/events_broadcast.rb | 15 +++++++++++++++ .../ruby_to_block/block/events_when_i_receive.rb | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 app/models/concerns/ruby_to_block/block/events_broadcast.rb create mode 100644 app/models/concerns/ruby_to_block/block/events_when_i_receive.rb diff --git a/app/models/concerns/ruby_to_block/block/events_broadcast.rb b/app/models/concerns/ruby_to_block/block/events_broadcast.rb new file mode 100644 index 0000000..f67540d --- /dev/null +++ b/app/models/concerns/ruby_to_block/block/events_broadcast.rb @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +module RubyToBlock + module Block + class EventBroadcast < CharacterEvent + blocknize '^\s*' + CHAR_RE + 'broadcast\(\s*("[^"]*")\)\s*$', + statement: true, inline: true + + def self.process_match_data(md, context) + md2 = regexp.match(md[type]) + add_character_event_blocks(context, md2[1], new, STEP: md2[2]) + true + end + end + end +end diff --git a/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb b/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb new file mode 100644 index 0000000..808f726 --- /dev/null +++ b/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +module RubyToBlock + module Block + class EventBroadcast < CharacterEvent + blocknize '^\s*' + CHAR_RE + 'on\(:receive,\s*("[^"),]*")\)\s+do\s*$', + statement: true, indent: true + + def self.process_match_data(md, context) + md2 = regexp.match(md[type]) + add_character_event_blocks(context, md2[1], new, NAME: md[2]) + true + end + end + end +end From 692e40e7feaf29e0fbe232b1228d0c1916d3ffdc Mon Sep 17 00:00:00 2001 From: Yamato Mitsui Date: Sat, 19 Mar 2016 13:46:56 +0900 Subject: [PATCH 14/15] on the way to add broadcast block --- app/assets/javascripts/blocks/events.js.coffee.erb | 4 ++-- .../concerns/ruby_to_block/block/events_broadcast.rb | 9 ++++++--- .../ruby_to_block/block/events_when_i_receive.rb | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/blocks/events.js.coffee.erb b/app/assets/javascripts/blocks/events.js.coffee.erb index cc60e21..4d2b899 100644 --- a/app/assets/javascripts/blocks/events.js.coffee.erb +++ b/app/assets/javascripts/blocks/events.js.coffee.erb @@ -84,14 +84,14 @@ Blockly.Ruby['<%= n %>'] = (block) -> <% n = "#{category}_messages" %> Blockly.Blocks['<%= n %>'] = init: ()-> - sounds = [ + messages = [ [<%= bm('.messages1') %>, 'messages1'], [<%= bm('.messages2') %>, 'messages2'], ] @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.messages') %>, - ['NAME', new Blockly.FieldDropdown(sounds)], + ['NAME', new Blockly.FieldDropdown(messages)], Blockly.ALIGN_RIGHT) @setOutput(true, 'String') @setTooltip('') diff --git a/app/models/concerns/ruby_to_block/block/events_broadcast.rb b/app/models/concerns/ruby_to_block/block/events_broadcast.rb index f67540d..0202945 100644 --- a/app/models/concerns/ruby_to_block/block/events_broadcast.rb +++ b/app/models/concerns/ruby_to_block/block/events_broadcast.rb @@ -2,12 +2,15 @@ module RubyToBlock module Block class EventBroadcast < CharacterEvent - blocknize '^\s*' + CHAR_RE + 'broadcast\(\s*("[^"]*")\)\s*$', - statement: true, inline: true + blocknize ['^\s*', + CHAR_RE, + 'broadcast\(\s*("[^"]*")\)', + '\s*$'].join(''), + statement: true, inline: true def self.process_match_data(md, context) md2 = regexp.match(md[type]) - add_character_event_blocks(context, md2[1], new, STEP: md2[2]) + add_character_method_call_block(context, md2[1], new, MESSAGE: md2[2]) true end end diff --git a/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb b/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb index 808f726..5989609 100644 --- a/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb +++ b/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb @@ -7,7 +7,7 @@ class EventBroadcast < CharacterEvent def self.process_match_data(md, context) md2 = regexp.match(md[type]) - add_character_event_blocks(context, md2[1], new, NAME: md[2]) + add_character_event_blocks(context, md2[1], new, MESSAGE: md2[2]) true end end From 4fb6f3ee022b675d0e53a4fbd04ca6a81812b0ef Mon Sep 17 00:00:00 2001 From: Yamato Mitsui Date: Sat, 19 Mar 2016 15:54:48 +0900 Subject: [PATCH 15/15] change message type into string --- app/assets/javascripts/blocks/events.js.coffee.erb | 8 ++++---- .../concerns/ruby_to_block/block/events_when_i_receive.rb | 7 +++++-- app/views/editor/_toolbox_default.html.haml | 6 ++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/blocks/events.js.coffee.erb b/app/assets/javascripts/blocks/events.js.coffee.erb index 4d2b899..4a525cb 100644 --- a/app/assets/javascripts/blocks/events.js.coffee.erb +++ b/app/assets/javascripts/blocks/events.js.coffee.erb @@ -107,7 +107,7 @@ Blockly.Blocks['<%= n %>'] = @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.when_i_receive') %>, - ['NAME', ['String'], Blockly.ALIGN_RIGHT], + ['TEXT', null, Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @appendStatementInput('DO') @setPreviousStatement(true) @@ -115,7 +115,7 @@ Blockly.Blocks['<%= n %>'] = @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> - arg = Blockly.Ruby.valueToCode(@, 'NAME', Blockly.Ruby.ORDER_NONE) || '' + arg = Blockly.Ruby.valueToCode(@, 'TEXT', Blockly.Ruby.ORDER_NONE) || '' Blockly.Ruby.characterEvent_(block, 'DO', 'receive', arg) # [▼メッセージ]を送る @@ -125,7 +125,7 @@ Blockly.Blocks['<%= n %>'] = @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.broadcast') %>, - ['NAME', ['String'], Blockly.ALIGN_RIGHT], + ['TEXT', null, Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @@ -133,5 +133,5 @@ Blockly.Blocks['<%= n %>'] = @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> - arg = Blockly.Ruby.valueToCode(@, 'NAME', Blockly.Ruby.ORDER_NONE) || '' + arg = Blockly.Ruby.valueToCode(@, 'TEXT', Blockly.Ruby.ORDER_NONE) || '' Blockly.Ruby.characterMethodCall_('broadcast', arg) \ No newline at end of file diff --git a/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb b/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb index 5989609..fb60003 100644 --- a/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb +++ b/app/models/concerns/ruby_to_block/block/events_when_i_receive.rb @@ -2,8 +2,11 @@ module RubyToBlock module Block class EventBroadcast < CharacterEvent - blocknize '^\s*' + CHAR_RE + 'on\(:receive,\s*("[^"),]*")\)\s+do\s*$', - statement: true, indent: true + blocknize ['^\s*', + CHAR_RE, + 'on\(:receive,\s*("[^"),]*")\)\s+do', + '\s*$'].join(''), + statement: true, indent: true def self.process_match_data(md, context) md2 = regexp.match(md[type]) diff --git a/app/views/editor/_toolbox_default.html.haml b/app/views/editor/_toolbox_default.html.haml index 4a51d63..7350a41 100644 --- a/app/views/editor/_toolbox_default.html.haml +++ b/app/views/editor/_toolbox_default.html.haml @@ -309,13 +309,11 @@ -# [▼メッセージ]を受け取ったとき %block{:type => '#{category}_when_i_receive'} - %value{:name => 'NAME'} - %block{:type => "#{category}_messages"} + = toolbox_text_value('TEXT', tt('.text')) -# [▼メッセージ]を送る %block{:type => '#{category}_broadcast'} - %value{:name => 'NAME'} - %block{:type => "#{category}_messages"} + = toolbox_text_value('TEXT', tt('.text')) -# [▼メッセージ]を送って、待つ -#%block{:type => '#{category}_broadcast_and_wait'}