smalruby-editor 0.3.5 → 0.4.0

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 (366) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -0
  3. data/.rspec +0 -0
  4. data/.rubocop.yml +1 -0
  5. data/.simplecov +7 -7
  6. data/.travis.yml +0 -0
  7. data/Guardfile +1 -1
  8. data/LICENSE +0 -0
  9. data/Procfile +1 -1
  10. data/Rakefile +0 -0
  11. data/app/assets/images/.keep +0 -0
  12. data/app/assets/images/favicon.ico +0 -0
  13. data/app/assets/javascripts/blocks/blockly.js.coffee.erb +0 -0
  14. data/app/assets/javascripts/blocks/character.js.coffee.erb +3 -0
  15. data/app/assets/javascripts/blocks/data.js.coffee.erb +0 -0
  16. data/app/assets/javascripts/blocks/etc.js.coffee.erb +0 -0
  17. data/app/assets/javascripts/blocks/field_character.js.coffee.erb +13 -1
  18. data/app/assets/javascripts/blocks/field_costume.js.coffee.erb +84 -0
  19. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +26 -0
  20. data/app/assets/javascripts/blocks/looks.js.coffee.erb +32 -0
  21. data/app/assets/javascripts/collections/.keep +0 -0
  22. data/app/assets/javascripts/collections/character_set.js.coffee +0 -0
  23. data/app/assets/javascripts/generators/ruby.js.coffee.erb +10 -1
  24. data/app/assets/javascripts/models/.keep +0 -0
  25. data/app/assets/javascripts/models/character.js.coffee +45 -6
  26. data/app/assets/javascripts/models/scene.js.coffee +0 -0
  27. data/app/assets/javascripts/msg/en_us.js +4 -0
  28. data/app/assets/javascripts/msg/ja.js +4 -0
  29. data/app/assets/javascripts/routers/.keep +0 -0
  30. data/app/assets/javascripts/smalruby.js.coffee.erb +5 -1
  31. data/app/assets/javascripts/views/.keep +0 -0
  32. data/app/assets/javascripts/views/character_modal_view.js.coffee.erb +357 -0
  33. data/app/assets/javascripts/views/character_selector_view.js.coffee +2 -0
  34. data/app/assets/stylesheets/editor.css.scss +201 -16
  35. data/app/assets/stylesheets/flatstrap-custom.css.scss +0 -0
  36. data/app/assets/stylesheets/load-modal.css.scss +0 -0
  37. data/app/assets/templates/.keep +0 -0
  38. data/app/controllers/application_controller.rb +8 -2
  39. data/app/controllers/concerns/.keep +0 -0
  40. data/app/controllers/costumes_controller.rb +58 -0
  41. data/app/controllers/editor_controller.rb +2 -0
  42. data/app/helpers/costumes_helper.rb +2 -0
  43. data/app/helpers/editor_helper.rb +0 -0
  44. data/app/helpers/sessions_helper.rb +0 -4
  45. data/app/mailers/.keep +0 -0
  46. data/app/models/.keep +0 -0
  47. data/app/models/concerns/.keep +0 -0
  48. data/app/models/concerns/ruby_to_block.rb +0 -0
  49. data/app/models/concerns/ruby_to_block/block.rb +0 -0
  50. data/app/models/concerns/ruby_to_block/block/base.rb +2 -0
  51. data/app/models/concerns/ruby_to_block/block/character.rb +32 -11
  52. data/app/models/concerns/ruby_to_block/block/character_event.rb +0 -0
  53. data/app/models/concerns/ruby_to_block/block/character_method_call.rb +0 -0
  54. data/app/models/concerns/ruby_to_block/block/character_new.rb +0 -0
  55. data/app/models/concerns/ruby_to_block/block/character_operation.rb +0 -0
  56. data/app/models/concerns/ruby_to_block/block/control_beark.rb +0 -0
  57. data/app/models/concerns/ruby_to_block/block/control_if.rb +0 -0
  58. data/app/models/concerns/ruby_to_block/block/control_loop.rb +0 -0
  59. data/app/models/concerns/ruby_to_block/block/control_sleep.rb +0 -0
  60. data/app/models/concerns/ruby_to_block/block/do.rb +0 -0
  61. data/app/models/concerns/ruby_to_block/block/else.rb +0 -0
  62. data/app/models/concerns/ruby_to_block/block/end.rb +0 -0
  63. data/app/models/concerns/ruby_to_block/block/events_on_click.rb +0 -0
  64. data/app/models/concerns/ruby_to_block/block/events_on_key_push_or_down.rb +0 -0
  65. data/app/models/concerns/ruby_to_block/block/events_on_start.rb +0 -0
  66. data/app/models/concerns/ruby_to_block/block/hardware_button_pressed_or_released.rb +0 -0
  67. data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +0 -0
  68. data/app/models/concerns/ruby_to_block/block/hardware_led_turn_off.rb +0 -0
  69. data/app/models/concerns/ruby_to_block/block/hardware_led_turn_on.rb +0 -0
  70. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver.rb +0 -0
  71. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_set_speed.rb +0 -0
  72. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_speed.rb +0 -0
  73. data/app/models/concerns/ruby_to_block/block/hardware_neo_pixel_set_rgb.rb +31 -0
  74. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_set_color.rb +0 -0
  75. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_turn_off.rb +0 -0
  76. data/app/models/concerns/ruby_to_block/block/hardware_sensor_value.rb +0 -0
  77. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +0 -0
  78. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_commands.rb +0 -0
  79. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_run.rb +0 -0
  80. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_set_speed.rb +0 -0
  81. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_speed.rb +0 -0
  82. data/app/models/concerns/ruby_to_block/block/looks_hide.rb +0 -0
  83. data/app/models/concerns/ruby_to_block/block/looks_next_costume.rb +12 -0
  84. data/app/models/concerns/ruby_to_block/block/looks_say.rb +0 -0
  85. data/app/models/concerns/ruby_to_block/block/looks_show.rb +0 -0
  86. data/app/models/concerns/ruby_to_block/block/looks_switch_costume.rb +22 -0
  87. data/app/models/concerns/ruby_to_block/block/looks_vanish.rb +0 -0
  88. data/app/models/concerns/ruby_to_block/block/math_number.rb +0 -0
  89. data/app/models/concerns/ruby_to_block/block/motion_change_x_by.rb +0 -0
  90. data/app/models/concerns/ruby_to_block/block/motion_change_y_by.rb +0 -0
  91. data/app/models/concerns/ruby_to_block/block/motion_go_to_character.rb +0 -0
  92. data/app/models/concerns/ruby_to_block/block/motion_go_to_mouse.rb +0 -0
  93. data/app/models/concerns/ruby_to_block/block/motion_move.rb +0 -0
  94. data/app/models/concerns/ruby_to_block/block/motion_point_towards_character.rb +0 -0
  95. data/app/models/concerns/ruby_to_block/block/motion_point_towards_mouse.rb +0 -0
  96. data/app/models/concerns/ruby_to_block/block/motion_rotate_left.rb +0 -0
  97. data/app/models/concerns/ruby_to_block/block/motion_rotate_right.rb +0 -0
  98. data/app/models/concerns/ruby_to_block/block/motion_self_angle.rb +0 -0
  99. data/app/models/concerns/ruby_to_block/block/motion_self_x.rb +0 -0
  100. data/app/models/concerns/ruby_to_block/block/motion_self_y.rb +0 -0
  101. data/app/models/concerns/ruby_to_block/block/motion_set_angle.rb +0 -0
  102. data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +0 -0
  103. data/app/models/concerns/ruby_to_block/block/motion_set_x_y.rb +0 -0
  104. data/app/models/concerns/ruby_to_block/block/motion_set_y.rb +0 -0
  105. data/app/models/concerns/ruby_to_block/block/motion_turn.rb +0 -0
  106. data/app/models/concerns/ruby_to_block/block/motion_turn_if_reach_wall.rb +0 -0
  107. data/app/models/concerns/ruby_to_block/block/motion_turn_xy.rb +0 -0
  108. data/app/models/concerns/ruby_to_block/block/null.rb +0 -0
  109. data/app/models/concerns/ruby_to_block/block/operators_compare.rb +0 -0
  110. data/app/models/concerns/ruby_to_block/block/operators_false.rb +0 -0
  111. data/app/models/concerns/ruby_to_block/block/operators_true.rb +0 -0
  112. data/app/models/concerns/ruby_to_block/block/require_smalruby.rb +0 -0
  113. data/app/models/concerns/ruby_to_block/block/ruby_comment.rb +0 -0
  114. data/app/models/concerns/ruby_to_block/block/ruby_expression.rb +0 -0
  115. data/app/models/concerns/ruby_to_block/block/ruby_p.rb +0 -0
  116. data/app/models/concerns/ruby_to_block/block/ruby_statement.rb +0 -0
  117. data/app/models/concerns/ruby_to_block/block/sensing_hit.rb +0 -0
  118. data/app/models/concerns/ruby_to_block/block/sensing_reach_wall.rb +0 -0
  119. data/app/models/concerns/ruby_to_block/block/sound_play.rb +0 -0
  120. data/app/models/concerns/ruby_to_block/block/sound_preset_sounds.rb +0 -0
  121. data/app/models/concerns/ruby_to_block/block/text.rb +0 -0
  122. data/app/models/concerns/ruby_to_block/block/value.rb +0 -0
  123. data/app/models/concerns/ruby_to_block/context.rb +0 -0
  124. data/app/models/concerns/ruby_to_block/formatter.rb +0 -0
  125. data/app/models/costume.rb +67 -0
  126. data/app/models/source_code.rb +9 -1
  127. data/app/models/user.rb +7 -0
  128. data/app/views/costumes/index.html.haml +19 -0
  129. data/app/views/editor/_character_modal.html.haml +35 -7
  130. data/app/views/editor/_toolbox_default.html.haml +9 -0
  131. data/app/views/editor/demo.html.erb +0 -0
  132. data/app/views/editor/index.html.haml +1 -0
  133. data/bin/smalruby-editor +1 -0
  134. data/bin/spring +7 -9
  135. data/config.ru +0 -0
  136. data/config/boot.rb +0 -0
  137. data/config/database.yml.mysql2 +0 -0
  138. data/config/database.yml.sqlite3 +0 -0
  139. data/config/database.yml.travis +0 -0
  140. data/config/environment.rb +0 -0
  141. data/config/environments/development.rb +0 -0
  142. data/config/environments/production.rb +0 -0
  143. data/config/environments/standalone.rb +0 -0
  144. data/config/environments/test.rb +0 -0
  145. data/config/initializers/backtrace_silencers.rb +0 -0
  146. data/config/initializers/filter_parameter_logging.rb +0 -0
  147. data/config/initializers/inflections.rb +0 -0
  148. data/config/initializers/mime_types.rb +0 -0
  149. data/config/initializers/secret_token.rb +0 -0
  150. data/config/initializers/session_store.rb +0 -0
  151. data/config/initializers/teaspoon.rb +0 -0
  152. data/config/initializers/wrap_parameters.rb +0 -0
  153. data/config/locales/en.yml +10 -1
  154. data/config/locales/ja.yml +10 -0
  155. data/config/routes.rb +2 -0
  156. data/config/unicorn.rb +23 -23
  157. data/db/migrate/20131216121603_create_source_codes.rb +0 -0
  158. data/db/migrate/20131219045113_add_filename_to_source_code.rb +0 -0
  159. data/db/migrate/20150513061250_add_index_name_on_users.rb +1 -1
  160. data/db/migrate/20150607012053_create_costumes.rb +12 -0
  161. data/db/migrate/20150607012707_add_indexes_on_costumes.rb +13 -0
  162. data/db/migrate/20150607034013_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +31 -0
  163. data/db/migrate/20150607034014_add_missing_unique_indices.acts_as_taggable_on_engine.rb +21 -0
  164. data/db/migrate/20150607034015_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  165. data/db/migrate/20150607034016_add_missing_taggable_index.acts_as_taggable_on_engine.rb +10 -0
  166. data/db/migrate/20150607034017_change_collation_for_tag_names.acts_as_taggable_on_engine.rb +12 -0
  167. data/db/migrate/20150607034018_insert_preset_costumes.rb +9 -0
  168. data/db/schema.rb +35 -2
  169. data/db/seeds.rb +2 -0
  170. data/demos/car_chase.rb.xml +128 -128
  171. data/demos/pong.rb.xml +379 -379
  172. data/demos/star.rb.xml +115 -115
  173. data/lib/assets/.keep +0 -0
  174. data/lib/smalruby_editor/version.rb +1 -1
  175. data/lib/tasks/.keep +0 -0
  176. data/lib/tasks/gem.rake +0 -0
  177. data/lib/tasks/rspec.rake +0 -0
  178. data/lib/tasks/rubocop.rake +0 -0
  179. data/log/.keep +0 -0
  180. data/public/404.html +0 -0
  181. data/public/422.html +0 -0
  182. data/public/500.html +0 -0
  183. data/public/apple-touch-icon.png +0 -0
  184. data/public/blockly/media/1x1.gif +0 -0
  185. data/public/blockly/media/click.mp3 +0 -0
  186. data/public/blockly/media/click.ogg +0 -0
  187. data/public/blockly/media/click.wav +0 -0
  188. data/public/blockly/media/delete.mp3 +0 -0
  189. data/public/blockly/media/delete.ogg +0 -0
  190. data/public/blockly/media/delete.wav +0 -0
  191. data/public/blockly/media/handopen.cur +0 -0
  192. data/public/blockly/media/quote0.png +0 -0
  193. data/public/blockly/media/quote1.png +0 -0
  194. data/public/browserconfig.xml +0 -0
  195. data/public/fonts/FontAwesome.otf +0 -0
  196. data/public/fonts/fontawesome-webfont.eot +0 -0
  197. data/public/fonts/fontawesome-webfont.ttf +0 -0
  198. data/public/fonts/fontawesome-webfont.woff +0 -0
  199. data/public/large.png +0 -0
  200. data/public/robots.txt +0 -0
  201. data/public/smalruby/assets/ball1.png +0 -0
  202. data/public/smalruby/assets/ball2.png +0 -0
  203. data/public/smalruby/assets/ball3.png +0 -0
  204. data/public/smalruby/assets/ball4.png +0 -0
  205. data/public/smalruby/assets/ball5.png +0 -0
  206. data/public/smalruby/assets/ball6.png +0 -0
  207. data/public/smalruby/assets/car1.png +0 -0
  208. data/public/smalruby/assets/car2.png +0 -0
  209. data/public/smalruby/assets/car3.png +0 -0
  210. data/public/smalruby/assets/car4.png +0 -0
  211. data/public/smalruby/assets/cat1.png +0 -0
  212. data/public/smalruby/assets/cat2.png +0 -0
  213. data/public/smalruby/assets/cat3.png +0 -0
  214. data/public/smalruby/assets/frog1.png +0 -0
  215. data/public/smalruby/assets/piano_do.wav +0 -0
  216. data/public/smalruby/assets/piano_do_2.wav +0 -0
  217. data/public/smalruby/assets/piano_fa.wav +0 -0
  218. data/public/smalruby/assets/piano_mi.wav +0 -0
  219. data/public/smalruby/assets/piano_ra.wav +0 -0
  220. data/public/smalruby/assets/piano_re.wav +0 -0
  221. data/public/smalruby/assets/piano_si.wav +0 -0
  222. data/public/smalruby/assets/piano_so.wav +0 -0
  223. data/public/smalruby/assets/ryu1.png +0 -0
  224. data/public/smalruby/assets/ryu2.png +0 -0
  225. data/public/smalruby/assets/taichi1.png +0 -0
  226. data/public/smalruby/assets/taichi2.png +0 -0
  227. data/public/square.png +0 -0
  228. data/public/tiny.png +0 -0
  229. data/public/wide.png +0 -0
  230. data/smalruby-editor.gemspec +2 -1
  231. data/spec/acceptance/block_mode/blocks/character/new.feature +5 -5
  232. data/spec/acceptance/block_mode/blocks/control/await.feature +2 -2
  233. data/spec/acceptance/block_mode/blocks/control/await_until.feature +3 -3
  234. data/spec/acceptance/block_mode/blocks/control/break.feature +0 -0
  235. data/spec/acceptance/block_mode/blocks/control/if.feature +0 -0
  236. data/spec/acceptance/block_mode/blocks/control/if_else.feature +0 -0
  237. data/spec/acceptance/block_mode/blocks/control/loop.feature +0 -0
  238. data/spec/acceptance/block_mode/blocks/control/next.feature +0 -0
  239. data/spec/acceptance/block_mode/blocks/control/redo.feature +0 -0
  240. data/spec/acceptance/block_mode/blocks/control/sleep.feature +0 -0
  241. data/spec/acceptance/block_mode/blocks/control/times.feature +0 -0
  242. data/spec/acceptance/block_mode/blocks/control/until.feature +0 -0
  243. data/spec/acceptance/block_mode/blocks/events/on_click.feature +2 -2
  244. data/spec/acceptance/block_mode/blocks/events/on_hit.feature +4 -4
  245. data/spec/acceptance/block_mode/blocks/events/on_key_push_or_down.feature +4 -4
  246. data/spec/acceptance/block_mode/blocks/events/on_start.feature +2 -2
  247. data/spec/acceptance/block_mode/blocks/hardware/init_hardware.feature +1 -1
  248. data/spec/acceptance/block_mode/blocks/hardware/led_turn_off.feature +2 -2
  249. data/spec/acceptance/block_mode/blocks/hardware/led_turn_on.feature +2 -2
  250. data/spec/acceptance/block_mode/blocks/hardware/motor_driver.feature +0 -0
  251. data/spec/acceptance/block_mode/blocks/hardware/motor_driver_speed.feature +0 -0
  252. data/spec/acceptance/block_mode/blocks/hardware/neo_pixel_set_rgb.feature +100 -0
  253. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_set_color.feature +0 -0
  254. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_turn_off.feature +0 -0
  255. data/spec/acceptance/block_mode/blocks/hardware/sensor_value.feature +0 -0
  256. data/spec/acceptance/block_mode/blocks/hardware/servo_set_position.feature +0 -0
  257. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_action_with_sec.feature +1 -1
  258. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_led_turn_on_or_off.feature +1 -1
  259. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_v3_action_with_sec.feature +1 -1
  260. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +0 -0
  261. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car_speed.feature +0 -0
  262. data/spec/acceptance/block_mode/blocks/looks/hide.feature +2 -2
  263. data/spec/acceptance/block_mode/blocks/looks/next_costume.feature +56 -0
  264. data/spec/acceptance/block_mode/blocks/looks/say.feature +3 -3
  265. data/spec/acceptance/block_mode/blocks/looks/show.feature +2 -2
  266. data/spec/acceptance/block_mode/blocks/looks/vanish.feature +2 -2
  267. data/spec/acceptance/block_mode/blocks/motion/change_x_by.feature +2 -2
  268. data/spec/acceptance/block_mode/blocks/motion/change_y_by.feature +2 -2
  269. data/spec/acceptance/block_mode/blocks/motion/move.feature +2 -2
  270. data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +2 -2
  271. data/spec/acceptance/block_mode/blocks/motion/rotate_left.feature +2 -2
  272. data/spec/acceptance/block_mode/blocks/motion/rotate_right.feature +2 -2
  273. data/spec/acceptance/block_mode/blocks/motion/self_angle.feature +2 -2
  274. data/spec/acceptance/block_mode/blocks/motion/self_x.feature +2 -2
  275. data/spec/acceptance/block_mode/blocks/motion/self_y.feature +2 -2
  276. data/spec/acceptance/block_mode/blocks/motion/set_angle.feature +2 -2
  277. data/spec/acceptance/block_mode/blocks/motion/set_x.feature +2 -2
  278. data/spec/acceptance/block_mode/blocks/motion/set_x_y.feature +2 -2
  279. data/spec/acceptance/block_mode/blocks/motion/set_y.feature +2 -2
  280. data/spec/acceptance/block_mode/blocks/motion/turn.feature +2 -2
  281. data/spec/acceptance/block_mode/blocks/motion/turn_if_reach_wall.feature +2 -2
  282. data/spec/acceptance/block_mode/blocks/operators/and_or.feature +0 -0
  283. data/spec/acceptance/block_mode/blocks/operators/four_arithmetic_and_compares.feature +0 -0
  284. data/spec/acceptance/block_mode/blocks/operators/index_of.feature +0 -0
  285. data/spec/acceptance/block_mode/blocks/operators/length.feature +0 -0
  286. data/spec/acceptance/block_mode/blocks/operators/math_method.feature +0 -0
  287. data/spec/acceptance/block_mode/blocks/operators/negate.feature +0 -0
  288. data/spec/acceptance/block_mode/blocks/operators/rand.feature +0 -0
  289. data/spec/acceptance/block_mode/blocks/operators/round.feature +0 -0
  290. data/spec/acceptance/block_mode/blocks/operators/text.feature +0 -0
  291. data/spec/acceptance/block_mode/blocks/operators/true_false.feature +0 -0
  292. data/spec/acceptance/block_mode/blocks/ruby/expression.feature +0 -0
  293. data/spec/acceptance/block_mode/blocks/ruby/p.feature +0 -0
  294. data/spec/acceptance/block_mode/blocks/ruby/statement_comment.feature +0 -0
  295. data/spec/acceptance/block_mode/blocks/sensing/character_property.feature +2 -2
  296. data/spec/acceptance/block_mode/blocks/sensing/hit.feature +6 -6
  297. data/spec/acceptance/block_mode/blocks/sensing/input_key_push_or_down.feature +0 -0
  298. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_x.feature +0 -0
  299. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_y.feature +0 -0
  300. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_push_or_down.feature +0 -0
  301. data/spec/acceptance/block_mode/blocks/sensing/reach_wall.feature +2 -2
  302. data/spec/acceptance/block_mode/blocks/sensing/time_now.feature +0 -0
  303. data/spec/acceptance/block_mode/blocks/sound/play.feature +2 -2
  304. data/spec/acceptance/block_mode/character_modal_view.feature +164 -0
  305. data/spec/acceptance/block_mode/demo.feature +2 -2
  306. data/spec/acceptance/block_mode/translate.feature +0 -0
  307. data/spec/acceptance/readme.md +0 -0
  308. data/spec/acceptance/ruby_mode/check.feature +0 -0
  309. data/spec/acceptance/ruby_mode/load.feature +0 -0
  310. data/spec/acceptance/ruby_mode/translate.feature +2 -2
  311. data/spec/acceptance/standalone/preference.feature +8 -8
  312. data/spec/acceptance/standalone/run.feature +0 -0
  313. data/spec/acceptance/standalone/save.feature +1 -1
  314. data/spec/acceptance/standalone/signin.feature +1 -1
  315. data/spec/controllers/source_codes_controller_spec.rb +0 -0
  316. data/spec/fixtures/files/01.rb +0 -0
  317. data/spec/fixtures/files/01.rb.xml +0 -0
  318. data/spec/fixtures/files/01_remix.rb +0 -0
  319. data/spec/fixtures/files/01_remix02.rb +0 -0
  320. data/spec/fixtures/files/01_remix10.rb.xml +0 -0
  321. data/spec/fixtures/files/extra_car.png +0 -0
  322. data/spec/fixtures/files/favicon.ico +0 -0
  323. data/spec/helpers/editor_helper_spec.rb +0 -0
  324. data/spec/javascripts/collections/character_set_spec.coffee +0 -0
  325. data/spec/javascripts/models/character_spec.coffee +2 -14
  326. data/spec/javascripts/models/scene_spec.coffee +0 -0
  327. data/spec/javascripts/spec_helper.js +0 -0
  328. data/spec/lib/smalruby_editor_spec.rb +0 -0
  329. data/spec/models/concerns/ruby_to_block/block/character_method_call_spec.rb +0 -0
  330. data/spec/models/concerns/ruby_to_block/block/character_spec.rb +71 -0
  331. data/spec/models/concerns/ruby_to_block/block/control_if_spec.rb +0 -0
  332. data/spec/models/concerns/ruby_to_block/block/control_loop_spec.rb +0 -0
  333. data/spec/models/concerns/ruby_to_block/block/events_on_start_spec.rb +6 -6
  334. data/spec/models/concerns/ruby_to_block/block/hardware__neo_pixel_spec.rb +77 -0
  335. data/spec/models/concerns/ruby_to_block/block/looks_say_spec.rb +0 -0
  336. data/spec/models/concerns/ruby_to_block/block/looks_spec.rb +26 -2
  337. data/spec/models/concerns/ruby_to_block/block/motion_move_spec.rb +0 -0
  338. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +0 -0
  339. data/spec/models/concerns/ruby_to_block/block/motion_turn_spec.rb +0 -0
  340. data/spec/models/concerns/ruby_to_block/block/motion_turn_xy_spec.rb +0 -0
  341. data/spec/models/concerns/ruby_to_block/block/require_smalruby_spec.rb +0 -0
  342. data/spec/models/concerns/ruby_to_block/block/ruby_comment_spec.rb +0 -0
  343. data/spec/models/concerns/ruby_to_block/block/ruby_statement_spec.rb +0 -0
  344. data/spec/models/concerns/ruby_to_block/block/sensing_reach_wall_spec.rb +0 -0
  345. data/spec/models/concerns/ruby_to_block/block/shared/block_examples.rb +2 -2
  346. data/spec/models/concerns/ruby_to_block/block/sound_spec.rb +0 -0
  347. data/spec/models/concerns/ruby_to_block/block/text_spec.rb +0 -0
  348. data/spec/models/concerns/ruby_to_block/block_spec.rb +0 -0
  349. data/spec/models/concerns/ruby_to_block_spec.rb +0 -0
  350. data/spec/spec_helper.rb +21 -10
  351. data/spec/steps/block_mode_steps.rb +0 -0
  352. data/spec/steps/fix_turnip.rb +0 -0
  353. data/spec/steps/global_variable.rb +0 -0
  354. data/spec/steps/standalone_steps.rb +3 -3
  355. data/spec/steps/then_steps.rb +28 -0
  356. data/spec/steps/when_steps.rb +15 -18
  357. data/spec/support/capybara.rb +0 -0
  358. data/spec/support/env.rb +0 -0
  359. data/spec/support/ruby_to_block.rb +0 -0
  360. data/spec/teaspoon_env.rb +0 -0
  361. data/spec/turnip_helper.rb +0 -0
  362. data/vendor/assets/javascripts/.keep +0 -0
  363. data/vendor/assets/javascripts/jquery.blockUI.js +0 -0
  364. data/vendor/assets/stylesheets/.keep +0 -0
  365. metadata +56 -14
  366. data/app/assets/javascripts/views/character_modal_view.js.coffee +0 -194
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f31eaf9af5535997978a26b3695281bea1b42f0b
4
- data.tar.gz: b16de89a95361cfccf5442beff5574bcf5739cd1
3
+ metadata.gz: 091215afaa7483b700120a3d24768bd6096d3776
4
+ data.tar.gz: d73ff4f5e93cef3b0bc8a4dd2d272260a4dd205e
5
5
  SHA512:
6
- metadata.gz: 0a98b1fafc323e05da037379b47f980af46bf674c4d2b414c0dd87df077e70aa02e936bfef4aca8446a90856813cb8220e7eb44ad10ec353118d038e54f326a2
7
- data.tar.gz: 7e4027a9eed4347b503e2a7911c61b7d2393a13393ff1cafef19ce9831f18a455b4a7158d95002a362c9f44b7df6479dbc438b94e65999f19045566151175ada
6
+ metadata.gz: 968efc581b12c6b0454c89e9e5267588296f8445c8d27bc342df75c4a38a088dbafe27ee84a487fa19b861bf25f25adc9f3908c93487389c656c8bb954b9a048
7
+ data.tar.gz: f37a5af2ab674bd16758c78c604981fa8418eaa10c1684ccdae530feca73e8e215013cbf3e6bb60b8a1ff2388c2464c907255e9c3a46774d70fc8cb86201361d
data/.gitignore CHANGED
File without changes
data/.rspec CHANGED
File without changes
data/.rubocop.yml CHANGED
@@ -5,6 +5,7 @@ AllCops:
5
5
  - spec/fixtures/**
6
6
  - vendor/*
7
7
  - work/*
8
+ - bin/spring
8
9
  RunRailsCops: true
9
10
 
10
11
  # 日本語でのコメントを許可する
data/.simplecov CHANGED
@@ -1,7 +1,7 @@
1
- if ENV['COVERALLS']
2
- require 'coveralls'
3
-
4
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
- end
6
-
7
- SimpleCov.start('rails')
1
+ if ENV['COVERALLS']
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
+ end
6
+
7
+ SimpleCov.start('rails')
data/.travis.yml CHANGED
File without changes
data/Guardfile CHANGED
@@ -13,7 +13,7 @@ ignore(TEMPFILE_BY_EMACS)
13
13
 
14
14
  group :red_green_refactor, halt_on_fail: true do
15
15
  guard :rubocop, all_on_start: false do
16
- ignore(%r{^db/(?:schema|seeds)\.rb$})
16
+ ignore(%r{^(?:db/(?:schema|seeds)\.rb|bin/spring)$})
17
17
 
18
18
  watch(%r{.+\.rb$})
19
19
  watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
data/LICENSE CHANGED
File without changes
data/Procfile CHANGED
@@ -1 +1 @@
1
- web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
1
+ web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
data/Rakefile CHANGED
File without changes
File without changes
File without changes
File without changes
@@ -68,6 +68,9 @@ Blockly.Blocks['<%= n %>'] =
68
68
 
69
69
  @
70
70
 
71
+ getCharacter: ->
72
+ @character
73
+
71
74
  Blockly.Ruby['<%= n %>'] = (block) ->
72
75
  c = block.character
73
76
  Blockly.Ruby.defineCharacter(c)
File without changes
File without changes
@@ -106,7 +106,19 @@ Smalruby.FieldCharacter.dropdownChange = (value) ->
106
106
 
107
107
  Smalruby.FieldCharacter.NullCharacter =
108
108
  get: (name) ->
109
- <%= bm('.no_character') %>
109
+ switch name
110
+ when 'name'
111
+ <%= bm('.no_character') %>
112
+ when 'costumes'
113
+ ['']
114
+ when 'costumeNames'
115
+ [<%= bm('.first_costume') %>]
116
+ when 'costumeIndex'
117
+ 0
118
+ else
119
+ null
120
+ costumeName: (index) ->
121
+ ''
110
122
  on: -> $.noop
111
123
  off: -> $.noop
112
124
  link: -> $.noop
@@ -0,0 +1,84 @@
1
+ <%
2
+ require 'smalruby_editor'
3
+ require 'smalruby_editor/blockly_message_helper'
4
+ %>
5
+
6
+ 'use strict'
7
+
8
+ goog.provide('Smalruby.FieldCostume')
9
+
10
+ goog.require('Blockly.FieldDropdown')
11
+ goog.provide('Smalruby.FieldCharacter')
12
+
13
+
14
+ Smalruby.FieldCostume = (opt_character, opt_changeHandler) ->
15
+ @character = Smalruby.FieldCharacter.NullCharacter
16
+ @costumeIndex = 0
17
+ if opt_character
18
+ @setCharacter(opt_character)
19
+
20
+ if opt_changeHandler
21
+ changeHandler = (value) =>
22
+ retVal = Smalruby.FieldCostume.dropdownChange.call(@, value)
23
+ if retVal
24
+ newVal = retVal
25
+ else
26
+ retVal = @getValue()
27
+ opt_changeHandler.call(@, newVal)
28
+ retVal
29
+ else
30
+ changeHandler = Smalruby.FieldCostume.dropdownChange
31
+
32
+ Smalruby.FieldCostume.superClass_.constructor
33
+ .call(@, Smalruby.FieldCostume.dropdownCreate, changeHandler)
34
+
35
+ goog.inherits(Smalruby.FieldCostume, Blockly.FieldDropdown)
36
+
37
+ Smalruby.FieldCostume.prototype.setCharacter = (character) ->
38
+ return if character == @character
39
+
40
+ @character.off('change:costumeNames', @onCharacterChangeCostumeNames_, @)
41
+ @character = if character then character else Smalruby.FieldCharacter.NullCharacter
42
+ @character.on('change:costumeNames', @onCharacterChangeCostumeNames_, @)
43
+
44
+ @costumeIndex = 0
45
+ @setValue(@character.costumeName(@costumeIndex))
46
+
47
+ Smalruby.FieldCostume.prototype.onCharacterChangeCostumeNames_ = (model, costumeNames, options) ->
48
+ if @costumeIndex < costumeNames.length
49
+ @setValue(costumeNames[@costumeIndex])
50
+ else
51
+ @setValue(costumeNames[0])
52
+ @costumeIndex = 0
53
+
54
+ Smalruby.FieldCostume.prototype.clone = ->
55
+ new Smalruby.FieldCostume(null, @changeHandler_)
56
+
57
+ Smalruby.FieldCostume.prototype.dispose = ->
58
+ @setCharacter(Smalruby.FieldCharacter.NullCharacter)
59
+
60
+ Blockly.FieldDropdown.prototype.dispose.call(@)
61
+
62
+ Smalruby.FieldCostume.prototype.getCharacterFromParentBlocks_ = ->
63
+ block = @sourceBlock_
64
+ while block
65
+ if block.getCharacter
66
+ return block.getCharacter()
67
+ block = block.getSurroundParent()
68
+
69
+ Smalruby.FieldCharacter.NullCharacter
70
+
71
+ Smalruby.FieldCostume.dropdownCreate = ->
72
+ @setCharacter(@getCharacterFromParentBlocks_())
73
+ ([costume, costume] for costume in @character.get('costumeNames'))
74
+
75
+ Smalruby.FieldCostume.dropdownChange = (value) ->
76
+ costumeIndex = -1
77
+ if (costumeNames = @character.get('costumeNames'))
78
+ costumeIndex = _.indexOf(costumeNames, value)
79
+ if costumeIndex == -1
80
+ @costumeIndex = 0
81
+ null
82
+ else
83
+ @costumeIndex = costumeIndex
84
+ value
@@ -96,6 +96,32 @@ Blockly.Ruby['<%= n %>'] = (block) ->
96
96
  Blockly.Ruby.characterMethodCall_("led(#{Blockly.Ruby.quote_(pin)}).<%= method %>")
97
97
  <% end %>
98
98
 
99
+ # Adafruit Pixel
100
+ <% subcategory = 'neo_pixel' %>
101
+
102
+ <% n = "#{category}_#{subcategory}_set_rgb" %>
103
+ Blockly.Blocks['<%= n %>'] =
104
+ init: ()->
105
+ @setHelpUrl('')
106
+ @setColour(<%= colors[:looks] %>)
107
+ @interpolateMsg(<%= bm(".#{subcategory}_set_rgb") %>,
108
+ ['PIN', new Blockly.FieldDropdown(pwmPinDropdown)],
109
+ ['RED', ['Number'], Blockly.ALIGN_RIGHT],
110
+ ['GREEN', ['Number'], Blockly.ALIGN_RIGHT],
111
+ ['BLUE', ['Number'], Blockly.ALIGN_RIGHT],
112
+ Blockly.ALIGN_RIGHT)
113
+ @setPreviousStatement(true)
114
+ @setNextStatement(true)
115
+ @setTooltip('')
116
+
117
+ Blockly.Ruby['<%= n %>'] = (block) ->
118
+ pin = @getFieldValue('PIN')
119
+ red = Blockly.Ruby.valueToCode(@, 'RED', Blockly.Ruby.ORDER_NONE) || '0'
120
+ green = Blockly.Ruby.valueToCode(@, 'GREEN', Blockly.Ruby.ORDER_NONE) || '0'
121
+ blue = Blockly.Ruby.valueToCode(@, 'BLUE', Blockly.Ruby.ORDER_NONE) || '0'
122
+ Blockly.Ruby.characterMethodCall_("<%= subcategory %>(#{Blockly.Ruby.quote_(pin)}).set(color: [#{red}, #{green}, #{blue}])")
123
+
124
+
99
125
  # 「RGB LED」サブジャンル
100
126
 
101
127
  # RGB LED[▼アノード]コモン[▼PIN]を[カラー]にする
@@ -89,6 +89,38 @@ Blockly.Blocks['<%= n %>'] =
89
89
  Blockly.Ruby['<%= n %>'] = (block) ->
90
90
  Blockly.Ruby.characterMethodCall_('vanish')
91
91
 
92
+
93
+ <% n = "#{category}_next_costume" %>
94
+ Blockly.Blocks['<%= n %>'] =
95
+ init: ()->
96
+ @setHelpUrl('')
97
+ @setColour(<%= color %>)
98
+ @appendDummyInput().appendField(<%= bm('.next_costume') %>)
99
+ @setPreviousStatement(true)
100
+ @setNextStatement(true)
101
+ @setTooltip('')
102
+
103
+ Blockly.Ruby['<%= n %>'] = (block) ->
104
+ Blockly.Ruby.characterMethodCall_('next_costume')
105
+
106
+
107
+ <% n = "#{category}_switch_costume" %>
108
+ Blockly.Blocks['<%= n %>'] =
109
+ init: ()->
110
+ @setHelpUrl('')
111
+ @setColour(<%= color %>)
112
+ @interpolateMsg(<%= bm('.switch_costume') %>,
113
+ ['COSTUME', new Smalruby.FieldCostume()],
114
+ Blockly.ALIGN_RIGHT)
115
+ @setPreviousStatement(true)
116
+ @setNextStatement(true)
117
+ @setTooltip('')
118
+
119
+ Blockly.Ruby['<%= n %>'] = (block) ->
120
+ costume = Blockly.Ruby.quote_(@getFieldValue('COSTUME'))
121
+ Blockly.Ruby.characterMethodCall_("switch_costume(#{costume})")
122
+
123
+
92
124
  # 大きさを( )%ずつ変える
93
125
  # 大きさを( )%にする
94
126
  <%
File without changes
@@ -62,8 +62,17 @@ Blockly.Ruby.defineCharacter = (c) ->
62
62
  rotationStyle = ', rotation_style: :none'
63
63
  else
64
64
  rotationStyle = ''
65
+ costumeParam = ['costume: ']
66
+ costumes = (Blockly.Ruby.quote_(costume) for costume in c.costumesWithName())
67
+ if costumes.length > 1
68
+ costumeParam.push("[#{costumes.join(', ')}]")
69
+ else
70
+ costumeParam.push(costumes[0])
71
+ costumeIndex = c.get('costumeIndex')
72
+ if costumeIndex > 0
73
+ costumeParam.push(", costume_index: #{costumeIndex}")
65
74
  Blockly.Ruby.definitions_[blockName] =
66
- "#{name} = Character.new(costume: #{Blockly.Ruby.quote_(c.costume())}, x: #{c.get('x')}, y: #{c.get('y')}, angle: #{c.get('angle')}#{rotationStyle})"
75
+ "#{name} = Character.new(#{costumeParam.join('')}, x: #{c.get('x')}, y: #{c.get('y')}, angle: #{c.get('angle')}#{rotationStyle})"
67
76
 
68
77
  Blockly.Ruby.characterStack = ->
69
78
  @definitions_['character_stack']
File without changes
@@ -2,6 +2,7 @@ Smalruby.Character = Backbone.Model.extend({
2
2
  defaults:
3
3
  name: null
4
4
  costumes: [],
5
+ costumeNames: [],
5
6
  costumeIndex: 0
6
7
  x: 0
7
8
  y: 0
@@ -14,6 +15,23 @@ Smalruby.Character = Backbone.Model.extend({
14
15
  @objects = []
15
16
  if @get('costumes').length == 0
16
17
  @set({ costumes: [Smalruby.Character.PRESET_COSTUMES[0]] })
18
+ else
19
+ costumes = []
20
+ costumeNames = []
21
+ index = 1
22
+ for costume in (costume.split(':') for costume in @get('costumes'))
23
+ do (costume) ->
24
+ if costume.length == 1
25
+ costumeNames.push("costume#{index}")
26
+ costumes.push(costume[0])
27
+ else
28
+ costumeNames.push(costume[0])
29
+ costumes.push(costume[1])
30
+ index++
31
+ @set({ costumes: costumes, costumeNames: costumeNames })
32
+
33
+ if @get('costumeNames').length == 0
34
+ @set({ costumeNames: ['costume1'] })
17
35
 
18
36
  validate: (attrs, options) ->
19
37
  errors = []
@@ -31,6 +49,23 @@ Smalruby.Character = Backbone.Model.extend({
31
49
  attr: 'name'
32
50
  message: 'Name is invalid'
33
51
 
52
+ i = 0
53
+ costumeNames = attrs.costumeNames
54
+ for name in costumeNames
55
+ do (name) ->
56
+ if _.isUndefined(name) || _.isNull(name) ||
57
+ (_.isString(name) && name.length == 0)
58
+ errors.push
59
+ attr: 'costumeNames'
60
+ index: i
61
+ message: 'costumeNames is required'
62
+ else if _.indexOf(costumeNames, name) != _.lastIndexOf(costumeNames, name)
63
+ errors.push
64
+ attr: 'costumeNames'
65
+ index: i
66
+ message: 'costumeNames is duplicated'
67
+ i++
68
+
34
69
  if errors.length > 0
35
70
  return errors
36
71
 
@@ -50,15 +85,19 @@ Smalruby.Character = Backbone.Model.extend({
50
85
  namePrefix: ->
51
86
  Smalruby.Character.costumeToNamePrefix(@get('name'))
52
87
 
53
- costume: ->
54
- @get('costumes')[@get('costumeIndex')]
88
+ costume: (index = @get('costumeIndex')) ->
89
+ @get('costumes')[index]
90
+
91
+ costumeName: (index = @get('costumeIndex')) ->
92
+ @get('costumeNames')[index]
93
+
94
+ costumesWithName: ->
95
+ costumeNames = @get('costumeNames')
96
+ ("#{costumeNames[i]}:#{costume}" for costume, i in @get('costumes'))
55
97
 
56
98
  costumeUrl: (index = @get('costumeIndex')) ->
57
99
  basename = @get('costumes')[index]
58
- if _.indexOf(Smalruby.Character.PRESET_COSTUMES, basename) == -1
59
- basename
60
- else
61
- "/smalruby/assets/#{basename}"
100
+ "/smalruby/assets/#{basename}"
62
101
 
63
102
  nextCostume: ->
64
103
  i = @get('costumeIndex') + 1
File without changes
@@ -191,6 +191,7 @@ Blockly.Msg.BLOCKS_RUBY_P = 'p %1';
191
191
 
192
192
  // blocks/field_character.js.coffee.erb
193
193
  Blockly.Msg.BLOCKS_FIELD_CHARACTER_NO_CHARACTER = 'no character';
194
+ Blockly.Msg.BLOCKS_FIELD_CHARACTER_FIRST_COSTUME = 'first costume';
194
195
 
195
196
 
196
197
  // blocks/sound.js.coffee.erb
@@ -214,6 +215,8 @@ Blockly.Msg.BLOCKS_LOOKS_THINK_WITH_SECOND = 'think %1 for %2 secs';
214
215
  Blockly.Msg.BLOCKS_LOOKS_SHOW = 'show';
215
216
  Blockly.Msg.BLOCKS_LOOKS_HIDE = 'hide';
216
217
  Blockly.Msg.BLOCKS_LOOKS_VANISH = 'vanish';
218
+ Blockly.Msg.BLOCKS_LOOKS_NEXT_COSTUME = 'next costume';
219
+ Blockly.Msg.BLOCKS_LOOKS_SWITCH_COSTUME = 'switch costume to %1';
217
220
 
218
221
 
219
222
  // blocks/hardware.js.coffee.erb
@@ -224,6 +227,7 @@ Blockly.Msg.BLOCKS_HARDWARE_CATHODE = 'cathode';
224
227
  Blockly.Msg.BLOCKS_HARDWARE_LEFT = 'left';
225
228
  Blockly.Msg.BLOCKS_HARDWARE_RIGHT = 'right';
226
229
  Blockly.Msg.BLOCKS_HARDWARE_INIT_HARDWARE = 'setup hardware';
230
+ Blockly.Msg.BLOCKS_HARDWARE_NEO_PIXEL_SET_RGB = 'Adfruit NeoPixel RGB LED %1 set color to red %2 green %3 blue %4';
227
231
  Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_SET_COLOR = 'set RGB LED %1 common %2 color to %3';
228
232
  Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_TURN_OFF = 'turn off RGB LED %1 common %2';
229
233
  Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_SHOW = 'show 7 segment display %1';
@@ -195,6 +195,7 @@ Blockly.Msg.BLOCKS_RUBY_P = '♠p %1';
195
195
 
196
196
  // blocks/field_character.js.coffee.erb
197
197
  Blockly.Msg.BLOCKS_FIELD_CHARACTER_NO_CHARACTER = 'キャラクターなし';
198
+ Blockly.Msg.BLOCKS_FIELD_CHARACTER_FIRST_COSTUME = '最初のコスチューム';
198
199
 
199
200
 
200
201
  // blocks/sound.js.coffee.erb
@@ -218,6 +219,8 @@ Blockly.Msg.BLOCKS_LOOKS_THINK_WITH_SECOND = '★%1 と %2 秒と考える';
218
219
  Blockly.Msg.BLOCKS_LOOKS_SHOW = '★表示する';
219
220
  Blockly.Msg.BLOCKS_LOOKS_HIDE = '★隠す';
220
221
  Blockly.Msg.BLOCKS_LOOKS_VANISH = '★消滅する';
222
+ Blockly.Msg.BLOCKS_LOOKS_NEXT_COSTUME = '★次のコスチュームにする';
223
+ Blockly.Msg.BLOCKS_LOOKS_SWITCH_COSTUME = '★コスチュームを %1 にする';
221
224
 
222
225
 
223
226
  // blocks/hardware.js.coffee.erb
@@ -228,6 +231,7 @@ Blockly.Msg.BLOCKS_HARDWARE_CATHODE = 'カソード';
228
231
  Blockly.Msg.BLOCKS_HARDWARE_LEFT = ' 左';
229
232
  Blockly.Msg.BLOCKS_HARDWARE_RIGHT = '右';
230
233
  Blockly.Msg.BLOCKS_HARDWARE_INIT_HARDWARE = '♠ハードウェアを準備する';
234
+ Blockly.Msg.BLOCKS_HARDWARE_NEO_PIXEL_SET_RGB = '★マイコン内蔵RGB LED %1 を赤 %2 緑 %3 青 %4 にする';
231
235
  Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_SET_COLOR = '★RGB LED %1 コモン %2 を %3 にする';
232
236
  Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_TURN_OFF = '★RGB LED %1 コモン %2 をオフにする';
233
237
  Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_SHOW = '★7セグディスプレイに %1 を表示する';
File without changes
@@ -135,6 +135,7 @@ window.Smalruby =
135
135
  c = new Smalruby.Character
136
136
  name: xmlChild.getAttribute('name')
137
137
  costumes: xmlChild.getAttribute('costumes').split(',')
138
+ costumeIndex: parseInt(xmlChild.getAttribute('costume_index') || 0, 10)
138
139
  x: parseInt(xmlChild.getAttribute('x'), 10)
139
140
  y: parseInt(xmlChild.getAttribute('y'), 10)
140
141
  angle: parseInt(xmlChild.getAttribute('angle'), 10)
@@ -152,7 +153,10 @@ window.Smalruby =
152
153
  e.setAttribute('x', c.get('x'))
153
154
  e.setAttribute('y', c.get('y'))
154
155
  e.setAttribute('name', c.get('name'))
155
- e.setAttribute('costumes', c.get('costumes').join(','))
156
+ e.setAttribute('costumes', c.costumesWithName().join(','))
157
+ costumeIndex = c.get('costumeIndex')
158
+ if costumeIndex != 0
159
+ e.setAttribute('costume_index', costumeIndex)
156
160
  e.setAttribute('angle', c.get('angle'))
157
161
  rotationStyle = c.get('rotationStyle')
158
162
  if rotationStyle != 'free'