smalruby-editor 0.1.6-x86-mingw32 → 0.1.7-x86-mingw32

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +40 -3
  3. data/app/assets/stylesheets/toolbox.css.scss.erb +1 -6
  4. data/app/controllers/source_codes_controller.rb +5 -1
  5. data/app/models/concerns/ruby_to_block/block/base.rb +251 -0
  6. data/app/models/concerns/ruby_to_block/block/character.rb +42 -0
  7. data/app/models/concerns/ruby_to_block/block/character_event.rb +27 -0
  8. data/app/models/concerns/ruby_to_block/block/character_method_call.rb +29 -0
  9. data/app/models/concerns/ruby_to_block/block/character_new.rb +7 -0
  10. data/app/models/concerns/ruby_to_block/block/character_operation.rb +80 -0
  11. data/app/models/concerns/ruby_to_block/block/control_if.rb +45 -0
  12. data/app/models/concerns/ruby_to_block/block/control_loop.rb +19 -0
  13. data/app/models/concerns/ruby_to_block/block/control_sleep.rb +18 -0
  14. data/app/models/concerns/ruby_to_block/block/do.rb +24 -0
  15. data/app/models/concerns/ruby_to_block/block/else.rb +12 -0
  16. data/app/models/concerns/ruby_to_block/block/end.rb +26 -0
  17. data/app/models/concerns/ruby_to_block/block/events_on_click.rb +14 -0
  18. data/app/models/concerns/ruby_to_block/block/events_on_key_push_or_down.rb +17 -0
  19. data/app/models/concerns/ruby_to_block/block/events_on_start.rb +14 -0
  20. data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +14 -0
  21. data/app/models/concerns/ruby_to_block/block/hardware_led_off.rb +16 -0
  22. data/app/models/concerns/ruby_to_block/block/hardware_led_on.rb +16 -0
  23. data/app/models/concerns/ruby_to_block/block/hardware_on_sensor_change.rb +17 -0
  24. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_off.rb +18 -0
  25. data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_on.rb +23 -0
  26. data/app/models/concerns/ruby_to_block/block/hardware_sensor_value.rb +23 -0
  27. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +26 -0
  28. data/app/models/concerns/ruby_to_block/block/looks_hide.rb +8 -0
  29. data/app/models/concerns/ruby_to_block/block/looks_say.rb +20 -0
  30. data/app/models/concerns/ruby_to_block/block/looks_show.rb +8 -0
  31. data/app/models/concerns/ruby_to_block/block/looks_vanish.rb +8 -0
  32. data/app/models/concerns/ruby_to_block/block/math_number.rb +14 -0
  33. data/app/models/concerns/ruby_to_block/block/motion_change_x_by.rb +20 -0
  34. data/app/models/concerns/ruby_to_block/block/motion_change_y_by.rb +20 -0
  35. data/app/models/concerns/ruby_to_block/block/motion_move.rb +15 -0
  36. data/app/models/concerns/ruby_to_block/block/motion_point_towards_character.rb +24 -0
  37. data/app/models/concerns/ruby_to_block/block/motion_point_towards_mouse.rb +9 -0
  38. data/app/models/concerns/ruby_to_block/block/motion_reach_wall.rb +24 -0
  39. data/app/models/concerns/ruby_to_block/block/motion_rotate_left.rb +20 -0
  40. data/app/models/concerns/ruby_to_block/block/motion_rotate_right.rb +20 -0
  41. data/app/models/concerns/ruby_to_block/block/motion_self_angle.rb +23 -0
  42. data/app/models/concerns/ruby_to_block/block/motion_self_x.rb +23 -0
  43. data/app/models/concerns/ruby_to_block/block/motion_self_y.rb +23 -0
  44. data/app/models/concerns/ruby_to_block/block/motion_set_angle.rb +15 -0
  45. data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +38 -0
  46. data/app/models/concerns/ruby_to_block/block/motion_set_y.rb +15 -0
  47. data/app/models/concerns/ruby_to_block/block/motion_turn.rb +8 -0
  48. data/app/models/concerns/ruby_to_block/block/motion_turn_if_reach_wall.rb +8 -0
  49. data/app/models/concerns/ruby_to_block/block/null.rb +17 -0
  50. data/app/models/concerns/ruby_to_block/block/operators_compare.rb +36 -0
  51. data/app/models/concerns/ruby_to_block/block/operators_false.rb +8 -0
  52. data/app/models/concerns/ruby_to_block/block/operators_true.rb +8 -0
  53. data/app/models/concerns/ruby_to_block/block/require_smalruby.rb +7 -0
  54. data/app/models/concerns/ruby_to_block/block/ruby_comment.rb +16 -0
  55. data/app/models/concerns/ruby_to_block/block/ruby_expression.rb +14 -0
  56. data/app/models/concerns/ruby_to_block/block/ruby_statement.rb +23 -0
  57. data/app/models/concerns/ruby_to_block/block/sensing_hit.rb +23 -0
  58. data/app/models/concerns/ruby_to_block/block/sound_play.rb +15 -0
  59. data/app/models/concerns/ruby_to_block/block/sound_preset_sounds.rb +31 -0
  60. data/app/models/concerns/ruby_to_block/block/text.rb +15 -0
  61. data/app/models/concerns/ruby_to_block/block/value.rb +12 -0
  62. data/app/models/concerns/ruby_to_block/block.rb +97 -0
  63. data/app/models/concerns/ruby_to_block/context.rb +97 -0
  64. data/app/models/concerns/ruby_to_block/formatter.rb +26 -0
  65. data/app/models/concerns/ruby_to_block.rb +17 -360
  66. data/app/models/source_code.rb +3 -1
  67. data/app/views/editor/_toolbox.html.haml +16 -0
  68. data/lib/smalruby_editor/version.rb +3 -3
  69. data/public/assets/{application-64a390efe879c386a5950515064f062d.css → application-28b7bed56c5389dfa372e972c75b6676.css} +17 -10
  70. data/public/assets/application-28b7bed56c5389dfa372e972c75b6676.css.gz +0 -0
  71. data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js → application-4f747690ebc8ec4815ae36021fdb2c44.js} +135 -0
  72. data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js.gz → application-4f747690ebc8ec4815ae36021fdb2c44.js.gz} +0 -0
  73. data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
  74. data/smalruby-editor.gemspec +1 -1
  75. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +69 -0
  76. data/spec/acceptance/ruby_mode/translate.feature +1 -1
  77. data/spec/controllers/source_codes_controller_spec.rb +14 -11
  78. data/spec/models/concerns/ruby_to_block/block/character_method_call_spec.rb +175 -0
  79. data/spec/models/concerns/ruby_to_block/block/control_if_spec.rb +75 -0
  80. data/spec/models/concerns/ruby_to_block/block/control_loop_spec.rb +68 -0
  81. data/spec/models/concerns/ruby_to_block/block/events_on_start_spec.rb +120 -0
  82. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +120 -0
  83. data/spec/models/concerns/ruby_to_block/block/looks_say_spec.rb +79 -0
  84. data/spec/models/concerns/ruby_to_block/block/looks_spec.rb +74 -0
  85. data/spec/models/concerns/ruby_to_block/block/motion_move_spec.rb +63 -0
  86. data/spec/models/concerns/ruby_to_block/block/motion_reach_wall_spec.rb +67 -0
  87. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +392 -0
  88. data/spec/models/concerns/ruby_to_block/block/motion_turn_spec.rb +54 -0
  89. data/spec/models/concerns/ruby_to_block/block/require_smalruby_spec.rb +39 -0
  90. data/spec/models/concerns/ruby_to_block/block/ruby_comment_spec.rb +55 -0
  91. data/spec/models/concerns/ruby_to_block/block/ruby_statement_spec.rb +113 -0
  92. data/spec/models/concerns/ruby_to_block/block/shared/block_examples.rb +44 -0
  93. data/spec/models/concerns/ruby_to_block/block/sound_spec.rb +46 -0
  94. data/spec/models/concerns/ruby_to_block/block_spec.rb +49 -0
  95. data/spec/models/concerns/ruby_to_block_spec.rb +421 -217
  96. data/spec/support/ruby_to_block.rb +10 -0
  97. metadata +108 -10
  98. data/public/assets/application-64a390efe879c386a5950515064f062d.css.gz +0 -0
@@ -1,391 +1,48 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # rubocop:disable all
3
+ require_relative 'ruby_to_block/block'
4
+ require_relative 'ruby_to_block/context'
5
+ require_relative 'ruby_to_block/formatter'
4
6
 
5
7
  # Rubyのソースコードをブロックに変換するモジュール
6
8
  module RubyToBlock
7
9
  extend ActiveSupport::Concern
8
10
 
9
- SUCCESS_DATA_MOCK = <<-EOS.strip_heredoc
10
- require "smalruby"
11
-
12
- car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
13
-
14
- car1.on(:start) do
15
- loop do
16
- move(10)
17
- turn_if_reach_wall
18
- end
19
- end
20
- EOS
21
-
22
- SUCCESS_XML_MOCK = <<-XML.strip_heredoc
23
- <xml xmlns="http://www.w3.org/1999/xhtml">
24
- <character name="car1" x="0" y="0" angle="0" costumes="car1.png" />
25
- <block type="character_new" x="4" y="4">
26
- <field name="NAME">car1</field>
27
- <statement name="DO">
28
- <block type="events_on_start">
29
- <statement name="DO">
30
- <block type="control_loop">
31
- <statement name="DO">
32
- <block type="motion_move" inline="true">
33
- <value name="STEP">
34
- <block type="math_number">
35
- <field name="NUM">10</field>
36
- </block>
37
- </value>
38
- <next>
39
- <block type="motion_turn_if_reach_wall" />
40
- </next>
41
- </block>
42
- </statement>
43
- </block>
44
- </statement>
45
- </block>
46
- </statement>
47
- </block>
48
- </xml>
49
- XML
50
-
51
11
  # XML形式のブロックに変換する
52
12
  def to_blocks
53
13
  fail if data == '__FAIL__'
54
- return SUCCESS_XML_MOCK if data == SUCCESS_DATA_MOCK
55
14
 
56
- characters = {}
57
- character_stack = []
58
- receiver_stack = []
59
- statement_stack = []
60
- blocks = []
61
- current_block = nil
62
- lines = data.lines
63
- while (line = lines.shift)
15
+ context = Context.new(data.lines)
16
+ while (line = context.next_line)
64
17
  line.chomp!
65
18
  next if line.strip.empty?
19
+ md = Block.statement_regexp.match(line)
20
+ next if Block.process_match_data(md, context)
21
+ Block.process_match_data(md, context, 'ruby_statement')
22
+ end
66
23
 
67
- md = STATEMENT_REGEXP.match(line)
68
-
69
- unless md
70
- block = Block.new('ruby_statement', fields: { STATEMENT: line })
71
- if current_block # TODO: リファクタリング
72
- current_block.sibling = block
73
- else
74
- blocks.push(block)
75
- end
76
- current_block = block
77
-
78
- next
79
- end
80
-
81
- next if md[:require_smalruby]
82
-
83
- if (s = md[:character])
84
- md2 = /#{CHARACTER_RE}/.match(s)
85
- name = md2[1]
86
-
87
- characters[name] = Character.new(name: name, costumes: [md2[2]],
88
- x: md2[3], y: md2[4], angle: md2[5])
89
- next
90
- end
91
-
92
- if (s = md[:events_on_start])
93
- md2 = /#{EVENTS_ON_START_RE}/.match(s)
94
- name = md2[1] ? md2[1] : receiver_stack.last.name
95
- c = characters[name]
96
- character_stack.push(c)
97
-
98
- do_block = Block.new('null')
99
- events_on_start_block = Block.new('events_on_start', statements: { DO: do_block })
100
- if current_block && current_block.type == 'character_new' &&
101
- current_block[:NAME] == name
102
- current_block.add_statement(:DO, events_on_start_block)
103
- character_new_block = current_block
104
- else
105
- if c == receiver_stack.last
106
- current_block.sibling = events_on_start_block
107
- character_new_block = current_block.parent
108
- else
109
- character_new_block =
110
- Block.new('character_new',
111
- fields: { NAME: name }, statements: { DO: events_on_start_block })
112
- if current_block
113
- if current_block.type == 'character_new'
114
- blocks.push(character_new_block)
115
- else
116
- current_block.sibling = character_new_block
117
- end
118
- else
119
- blocks.push(character_new_block)
120
- end
121
- end
122
- end
123
- statement_stack.push([:events_on_start, character_new_block])
124
-
125
- receiver_stack.push(c)
126
-
127
- current_block = do_block
128
-
129
- next
130
- end
131
-
132
- if md[:end]
133
- ends_num = lines.select { |l|
134
- md2 = STATEMENT_REGEXP.match(l)
135
- md2 && md2[:end]
136
- }.length + 1
137
- ends_num -= lines.select { |l|
138
- md2 = STATEMENT_REGEXP.match(l)
139
- md2 && (md2[:events_on_start])
140
- }.length
141
- if (ss = statement_stack.last) &&
142
- ends_num <= statement_stack.length
143
- case ss.first
144
- when :events_on_start
145
- current_block = ss[1]
146
-
147
- receiver_stack.pop
148
- character_stack.pop
149
- statement_stack.pop
150
- else
151
- # TODO
152
- end
153
- else
154
- block = Block.new('ruby_statement', fields: { STATEMENT: line })
155
- if current_block # TODO: リファクタリング
156
- current_block.sibling = block
157
- else
158
- blocks.push(block)
159
- end
160
- current_block = block
161
- end
24
+ make_xml(context)
25
+ end
162
26
 
163
- next
164
- end
165
- end
27
+ private
166
28
 
167
- return '' if characters.empty? && blocks.empty?
29
+ def make_xml(context)
30
+ return '' if context[:characters].empty? && context[:blocks].empty?
168
31
 
169
32
  xml = REXML::Document.new('<xml xmlns="http://www.w3.org/1999/xhtml" />',
170
33
  attribute_quote: :quote,
171
34
  respect_whitespace: :all)
172
- characters.values.each do |c|
35
+ context[:characters].values.each do |c|
173
36
  c.to_xml(xml.root)
174
37
  end
175
- blocks.each do |b|
38
+ context[:blocks].each do |b|
176
39
  b.to_xml(xml.root)
177
40
  end
178
41
 
179
42
  output = StringIO.new
180
- formatter = REXML::Formatters::Pretty.new(2, true)
181
- formatter.compact = true
182
- # HACK: 行頭、行末などのスペースが1つになってしまうのを修正している
183
- def formatter.write_text( node, output )
184
- s = node.to_s()
185
- s.gsub!(/\s/,' ')
186
- if !node.is_a?(REXML::Text) ||
187
- node.is_a?(REXML::Text) && !node.parent.whitespace()
188
- s.squeeze!(" ")
189
- end
190
- s = wrap(s, @width - @level)
191
- s = indent_text(s, @level, " ", true)
192
- output << (' '*@level + s)
193
- end
43
+ formatter = Formatter.new
194
44
  formatter.write(xml, output)
195
45
 
196
46
  output.string + "\n"
197
47
  end
198
-
199
- private
200
-
201
- # require "smalruby"
202
- REQUIRE_SMALRUBY_RE = '^require\ "smalruby"$'
203
-
204
- # car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
205
- CHARACTER_RE =
206
- '^\s*(\S+)\ =\ Character\.new\(costume:\ "([^"]+)",\ x:\ (\d+),\ y:\ (\d+),\ angle:\ (\d+)\)$'
207
-
208
- EVENTS_ON_START_RE = '^\s*(?:(\S+)\.)?on\(:start\)\ do$'
209
-
210
- END_RE = '^\s*end$'
211
-
212
- STATEMENT_REGEXP = %r{
213
- (?<require_smalruby>#{REQUIRE_SMALRUBY_RE})
214
- |
215
- (?<character>#{CHARACTER_RE})
216
- |
217
- (?<events_on_start>#{EVENTS_ON_START_RE})
218
- |
219
- (?<end>#{END_RE})
220
- }x
221
-
222
- EXPRESSION_REGEXP = %r{}x
223
- LITERAL_REGEXP = %r{}x
224
-
225
- # ソースコードに含まれるキャラクターを表現するクラス
226
- class Character
227
- attr_accessor :name
228
- attr_accessor :costumes
229
- attr_accessor :x
230
- attr_accessor :y
231
- attr_accessor :angle
232
-
233
- def initialize(options)
234
- @name = options[:name]
235
- @costumes = options[:costumes]
236
- @x = options[:x]
237
- @y = options[:y]
238
- @angle = options[:angle]
239
- end
240
-
241
- def to_xml(parent)
242
- parent.add_element('character',
243
- 'name' => @name,
244
- 'x' => @x, 'y' => @y, 'angle' => @angle,
245
- 'costumes' => @costumes.join(','))
246
- end
247
- end
248
-
249
- # ブロック群を表現するモジュール
250
- module Block
251
- # ブロックのインスタンスを生成する
252
- def self.new(type, *args)
253
- const_get(type.camelize).new(*args)
254
- end
255
-
256
- # すべてのブロックのベースクラス
257
- class Base
258
- attr_accessor :parent
259
- attr_accessor :sibling
260
- attr_accessor :fields
261
- attr_accessor :values
262
- attr_accessor :statements
263
-
264
- def initialize(options = {})
265
- @fields = options[:fields] || {}
266
- @values = options[:values] || {}
267
- @statements = options[:statements] || {}
268
-
269
- if @statements.length > 0
270
- @statements.values.each do |s|
271
- s.parent = self
272
- end
273
- end
274
- end
275
-
276
- def to_xml(parent)
277
- e = parent.add_element('block', 'type' => type)
278
- e.add_attribute('inline', 'true') if inline?
279
- fields_to_xml(e)
280
- values_to_xml(e)
281
- statements_to_xml(e)
282
- sibling_to_xml(e)
283
- e
284
- end
285
-
286
- def type
287
- @type ||= self.class.name.sub('RubyToBlock::Block::', '').underscore
288
- end
289
-
290
- def inline?
291
- false
292
- end
293
-
294
- def null?
295
- false
296
- end
297
-
298
- def [](name)
299
- @fields[name]
300
- end
301
-
302
- def add_statement(name, block)
303
- b = @statements[name]
304
- b = b.sibling while b.sibling
305
- b.sibling = block
306
- end
307
-
308
- def sibling=(block)
309
- block.parent = self.parent
310
- @sibling = block
311
- end
312
-
313
- def indent?
314
- false
315
- end
316
-
317
- def indent_level
318
- b = self
319
- level = 0
320
- while b.parent
321
- level += 1 if b.indent?
322
- b = b.parent
323
- end
324
- level
325
- end
326
-
327
- private
328
-
329
- def fields_to_xml(parent)
330
- @fields.each do |k, v|
331
- e = parent.add_element('field', 'name' => k.to_s)
332
- if v.is_a?(String)
333
- e.text = v
334
- else
335
- # TODO
336
- end
337
- end
338
- end
339
-
340
- def values_to_xml(parent)
341
- @values.each do |k, v|
342
- # TODO
343
- end
344
- end
345
-
346
- def statements_to_xml(parent)
347
- @statements.each do |k, v|
348
- next if v.null?
349
- e = parent.add_element('statement', 'name' => k.to_s)
350
- v.to_xml(e)
351
- end
352
- end
353
-
354
- def sibling_to_xml(parent)
355
- return nil unless @sibling
356
-
357
- e = parent.add_element('next')
358
- @sibling.to_xml(e)
359
- end
360
- end
361
-
362
- class Null < Base
363
- def to_xml(parent)
364
- return nil unless @sibling
365
-
366
- @sibling.to_xml(parent)
367
- end
368
-
369
- def null?
370
- !@sibling
371
- end
372
- end
373
-
374
- class CharacterNew < Base; end
375
-
376
- class RubyStatement < Base
377
- def parent=(block)
378
- @parent = block
379
- @original_statement ||= @fields[:STATEMENT]
380
- @fields[:STATEMENT] =
381
- @original_statement.sub(/^ {0,#{indent_level * 2}}/, '')
382
- end
383
- end
384
-
385
- class EventsOnStart < Base
386
- def indent?
387
- true
388
- end
389
- end
390
- end
391
48
  end
@@ -4,7 +4,9 @@ require 'tempfile'
4
4
  require 'open3'
5
5
  require 'digest/sha2'
6
6
  require 'bundler'
7
- require_relative 'concerns/ruby_to_block'
7
+ silence_warnings do
8
+ require_relative 'concerns/ruby_to_block'
9
+ end
8
10
 
9
11
  # ソースコードを表現するモデル
10
12
  class SourceCode < ActiveRecord::Base
@@ -369,6 +369,22 @@
369
369
  -# %block{:type => "#{category}_servo_set_position"}
370
370
  -# = toolbox_number_value('POS', 90)
371
371
 
372
+ %category{:name => '車'}
373
+ -# 「2WD車[▼ピン]を進める」ブロック
374
+ %block{:type => "#{category}_two_wheel_drive_car_forward"}
375
+
376
+ -# 「2WD車[▼ピン]をバックさせる」ブロック
377
+ %block{:type => "#{category}_two_wheel_drive_car_backward"}
378
+
379
+ -# 「2WD車[▼ピン]を左に曲げる」ブロック
380
+ %block{:type => "#{category}_two_wheel_drive_car_turn_left"}
381
+
382
+ -# 「2WD車[▼ピン]を右に曲げる」ブロック
383
+ %block{:type => "#{category}_two_wheel_drive_car_turn_right"}
384
+
385
+ -# 「2WD車[▼ピン]を止める」ブロック
386
+ %block{:type => "#{category}_two_wheel_drive_car_stop"}
387
+
372
388
  -#%category{:name => 'ボタン'}
373
389
  -# -# 条件:ボタン[▼]を押している
374
390
  -# %block{:type => "#{category}_button_down"}
@@ -1,3 +1,3 @@
1
- module SmalrubyEditor
2
- VERSION = '0.1.6'
3
- end
1
+ module SmalrubyEditor
2
+ VERSION = '0.1.7'
3
+ end
@@ -5090,16 +5090,14 @@ html, body {
5090
5090
  font-weight: bold;
5091
5091
  background-color: #73ff00 !important; }
5092
5092
 
5093
- #\:d {
5094
- display: none; }
5095
- #\:d .blocklyTreeRow {
5096
- padding-top: 0.25em;
5097
- padding-bottom: 0.25em;
5098
- border-left: 0.75em solid #cc0045; }
5099
- #\:d .blocklyTreeRow.blocklyTreeSelected {
5100
- color: white;
5101
- font-weight: bold;
5102
- background-color: #ff0056 !important; }
5093
+ #\:d .blocklyTreeRow {
5094
+ padding-top: 0.25em;
5095
+ padding-bottom: 0.25em;
5096
+ border-left: 0.75em solid #cc0045; }
5097
+ #\:d .blocklyTreeRow.blocklyTreeSelected {
5098
+ color: white;
5099
+ font-weight: bold;
5100
+ background-color: #ff0056 !important; }
5103
5101
 
5104
5102
  #\:e .blocklyTreeRow {
5105
5103
  padding-top: 0.25em;
@@ -5145,3 +5143,12 @@ html, body {
5145
5143
  color: white;
5146
5144
  font-weight: bold;
5147
5145
  background-color: #0088ff !important; }
5146
+
5147
+ #\:j .blocklyTreeRow {
5148
+ padding-top: 0.25em;
5149
+ padding-bottom: 0.25em;
5150
+ border-left: 0.75em solid #006dcc; }
5151
+ #\:j .blocklyTreeRow.blocklyTreeSelected {
5152
+ color: white;
5153
+ font-weight: bold;
5154
+ background-color: #0088ff !important; }
@@ -14579,6 +14579,141 @@ case end next return until\
14579
14579
  return Blockly.Ruby.characterMethodCall_("servo(" + (Blockly.Ruby.quote_(pin)) + ").position = " + pos);
14580
14580
  };
14581
14581
 
14582
+ Blockly.Blocks['hardware_two_wheel_drive_car_forward'] = {
14583
+ init: function() {
14584
+ var dropdown;
14585
+ dropdown = (function() {
14586
+ var _i, _results;
14587
+ _results = [];
14588
+ for (n = _i = 2; _i <= 10; n = ++_i) {
14589
+ _results.push(["D" + n, "D" + n]);
14590
+ }
14591
+ return _results;
14592
+ })();
14593
+ this.setHelpUrl('');
14594
+ this.setColour(208);
14595
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を進める');
14596
+ this.setInputsInline(true);
14597
+ this.setPreviousStatement(true);
14598
+ this.setNextStatement(true);
14599
+ return this.setTooltip('');
14600
+ }
14601
+ };
14602
+
14603
+ Blockly.Ruby['hardware_two_wheel_drive_car_forward'] = function(block) {
14604
+ var pin;
14605
+ pin = this.getFieldValue('PIN');
14606
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").forward");
14607
+ };
14608
+
14609
+ Blockly.Blocks['hardware_two_wheel_drive_car_backward'] = {
14610
+ init: function() {
14611
+ var dropdown;
14612
+ dropdown = (function() {
14613
+ var _i, _results;
14614
+ _results = [];
14615
+ for (n = _i = 2; _i <= 10; n = ++_i) {
14616
+ _results.push(["D" + n, "D" + n]);
14617
+ }
14618
+ return _results;
14619
+ })();
14620
+ this.setHelpUrl('');
14621
+ this.setColour(208);
14622
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('をバックさせる');
14623
+ this.setInputsInline(true);
14624
+ this.setPreviousStatement(true);
14625
+ this.setNextStatement(true);
14626
+ return this.setTooltip('');
14627
+ }
14628
+ };
14629
+
14630
+ Blockly.Ruby['hardware_two_wheel_drive_car_backward'] = function(block) {
14631
+ var pin;
14632
+ pin = this.getFieldValue('PIN');
14633
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").backward");
14634
+ };
14635
+
14636
+ Blockly.Blocks['hardware_two_wheel_drive_car_turn_left'] = {
14637
+ init: function() {
14638
+ var dropdown;
14639
+ dropdown = (function() {
14640
+ var _i, _results;
14641
+ _results = [];
14642
+ for (n = _i = 2; _i <= 10; n = ++_i) {
14643
+ _results.push(["D" + n, "D" + n]);
14644
+ }
14645
+ return _results;
14646
+ })();
14647
+ this.setHelpUrl('');
14648
+ this.setColour(208);
14649
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を左に曲げる');
14650
+ this.setInputsInline(true);
14651
+ this.setPreviousStatement(true);
14652
+ this.setNextStatement(true);
14653
+ return this.setTooltip('');
14654
+ }
14655
+ };
14656
+
14657
+ Blockly.Ruby['hardware_two_wheel_drive_car_turn_left'] = function(block) {
14658
+ var pin;
14659
+ pin = this.getFieldValue('PIN');
14660
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").turn_left");
14661
+ };
14662
+
14663
+ Blockly.Blocks['hardware_two_wheel_drive_car_turn_right'] = {
14664
+ init: function() {
14665
+ var dropdown;
14666
+ dropdown = (function() {
14667
+ var _i, _results;
14668
+ _results = [];
14669
+ for (n = _i = 2; _i <= 10; n = ++_i) {
14670
+ _results.push(["D" + n, "D" + n]);
14671
+ }
14672
+ return _results;
14673
+ })();
14674
+ this.setHelpUrl('');
14675
+ this.setColour(208);
14676
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を右に曲げる');
14677
+ this.setInputsInline(true);
14678
+ this.setPreviousStatement(true);
14679
+ this.setNextStatement(true);
14680
+ return this.setTooltip('');
14681
+ }
14682
+ };
14683
+
14684
+ Blockly.Ruby['hardware_two_wheel_drive_car_turn_right'] = function(block) {
14685
+ var pin;
14686
+ pin = this.getFieldValue('PIN');
14687
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").turn_right");
14688
+ };
14689
+
14690
+ Blockly.Blocks['hardware_two_wheel_drive_car_stop'] = {
14691
+ init: function() {
14692
+ var dropdown;
14693
+ dropdown = (function() {
14694
+ var _i, _results;
14695
+ _results = [];
14696
+ for (n = _i = 2; _i <= 10; n = ++_i) {
14697
+ _results.push(["D" + n, "D" + n]);
14698
+ }
14699
+ return _results;
14700
+ })();
14701
+ this.setHelpUrl('');
14702
+ this.setColour(208);
14703
+ this.appendDummyInput().appendField('2WD車').appendField(new Blockly.FieldDropdown(dropdown), 'PIN').appendField('を止める');
14704
+ this.setInputsInline(true);
14705
+ this.setPreviousStatement(true);
14706
+ this.setNextStatement(true);
14707
+ return this.setTooltip('');
14708
+ }
14709
+ };
14710
+
14711
+ Blockly.Ruby['hardware_two_wheel_drive_car_stop'] = function(block) {
14712
+ var pin;
14713
+ pin = this.getFieldValue('PIN');
14714
+ return Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(" + (Blockly.Ruby.quote_(pin)) + ").stop");
14715
+ };
14716
+
14582
14717
  Blockly.Blocks['hardware_button_down'] = {
14583
14718
  init: function() {
14584
14719
  this.setHelpUrl('');
@@ -1 +1 @@
1
- {"files":{"default-5d1886100d7c8961e9962bbc4bb0c714.xml":{"logical_path":"default.xml","mtime":"2014-02-14T01:28:48+09:00","size":5017,"digest":"5d1886100d7c8961e9962bbc4bb0c714"},"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml":{"logical_path":"rgb_led_anode.xml","mtime":"2014-02-11T14:17:03+09:00","size":3805,"digest":"91225bef2a8b97f1cefee862a0619b91"},"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico":{"logical_path":"favicon.ico","mtime":"2014-01-21T03:18:02+09:00","size":5430,"digest":"a37c90b368fd8ed436cb8f9e9396465c"},"application-735e172a0df828da16d22f5d3c26671f.js":{"logical_path":"application.js","mtime":"2014-02-19T18:22:09+09:00","size":1440213,"digest":"735e172a0df828da16d22f5d3c26671f"},"application-64a390efe879c386a5950515064f062d.css":{"logical_path":"application.css","mtime":"2014-02-19T14:32:55+09:00","size":119186,"digest":"64a390efe879c386a5950515064f062d"},"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif":{"logical_path":"jquery-ui/animated-overlay.gif","mtime":"2014-02-04T09:35:48+09:00","size":1738,"digest":"c48c87b7a95316f4698484e3b85ee4aa"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":180,"digest":"58b63faadd031ca3db096dfdffd90224"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":178,"digest":"937399e8b369d64aa075d13a82c00112"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":120,"digest":"a8c503e0f42a081a92a473b0d30ac6cf"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":105,"digest":"ddcbfe385abc3947937caa0b44e2f5d2"},"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":111,"digest":"14dd4a9ad1f21d8c4c7e673ddfb0806f"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":110,"digest":"a43dfabb23b0a987b567b282bad68346"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":119,"digest":"31c0c791a756266043ee8ea61dacb36a"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2014-02-04T09:35:48+09:00","size":101,"digest":"33edbdb0d2fcebd2a65c2041a28533da"},"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"890385424135de1513f00cbecfb7f990"},"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"824705ca4aa2610434a358fe4018c9c6"},"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"254e054f6df453dfac49efbc8b78f79d"},"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"57c441f87c4289a5372823f506c1182d"},"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"261647ac915575f3981ded254ae8d43e"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-0047adbc0fb7a529ef7a41b5e0e7d097.js":{"logical_path":"application.js","mtime":"2014-02-20T03:12:12+09:00","size":1441568,"digest":"0047adbc0fb7a529ef7a41b5e0e7d097"},"application-42aa660a3233c7738b7578d30ba040b3.js":{"logical_path":"application.js","mtime":"2014-02-22T15:25:11+09:00","size":1441708,"digest":"42aa660a3233c7738b7578d30ba040b3"},"application-66b65154e7b5dcfe67fa164db6fc5f51.js":{"logical_path":"application.js","mtime":"2014-02-23T21:53:43+09:00","size":1441898,"digest":"66b65154e7b5dcfe67fa164db6fc5f51"},"application-8bfffad1222d4e198f3c7ccc1cbd774f.js":{"logical_path":"application.js","mtime":"2014-02-27T01:28:32+09:00","size":1442504,"digest":"8bfffad1222d4e198f3c7ccc1cbd774f"}},"assets":{"default.xml":"default-5d1886100d7c8961e9962bbc4bb0c714.xml","rgb_led_anode.xml":"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml","favicon.ico":"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico","application.js":"application-8bfffad1222d4e198f3c7ccc1cbd774f.js","application.css":"application-64a390efe879c386a5950515064f062d.css","jquery-ui/animated-overlay.gif":"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}
1
+ {"files":{"default-5d1886100d7c8961e9962bbc4bb0c714.xml":{"logical_path":"default.xml","mtime":"2014-02-14T01:28:48+09:00","size":5017,"digest":"5d1886100d7c8961e9962bbc4bb0c714"},"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml":{"logical_path":"rgb_led_anode.xml","mtime":"2014-02-11T14:17:03+09:00","size":3805,"digest":"91225bef2a8b97f1cefee862a0619b91"},"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico":{"logical_path":"favicon.ico","mtime":"2014-01-21T03:18:02+09:00","size":5430,"digest":"a37c90b368fd8ed436cb8f9e9396465c"},"application-735e172a0df828da16d22f5d3c26671f.js":{"logical_path":"application.js","mtime":"2014-02-19T18:22:09+09:00","size":1440213,"digest":"735e172a0df828da16d22f5d3c26671f"},"application-64a390efe879c386a5950515064f062d.css":{"logical_path":"application.css","mtime":"2014-02-19T14:32:55+09:00","size":119186,"digest":"64a390efe879c386a5950515064f062d"},"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif":{"logical_path":"jquery-ui/animated-overlay.gif","mtime":"2014-02-04T09:35:48+09:00","size":1738,"digest":"c48c87b7a95316f4698484e3b85ee4aa"},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":180,"digest":"58b63faadd031ca3db096dfdffd90224"},"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png":{"logical_path":"jquery-ui/ui-bg_flat_75_ffffff_40x100.png","mtime":"2014-02-04T09:35:48+09:00","size":178,"digest":"937399e8b369d64aa075d13a82c00112"},"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png":{"logical_path":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":120,"digest":"a8c503e0f42a081a92a473b0d30ac6cf"},"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png":{"logical_path":"jquery-ui/ui-bg_glass_65_ffffff_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":105,"digest":"ddcbfe385abc3947937caa0b44e2f5d2"},"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png":{"logical_path":"jquery-ui/ui-bg_glass_75_dadada_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":111,"digest":"14dd4a9ad1f21d8c4c7e673ddfb0806f"},"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png":{"logical_path":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":110,"digest":"a43dfabb23b0a987b567b282bad68346"},"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png":{"logical_path":"jquery-ui/ui-bg_glass_95_fef1ec_1x400.png","mtime":"2014-02-04T09:35:48+09:00","size":119,"digest":"31c0c791a756266043ee8ea61dacb36a"},"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png":{"logical_path":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png","mtime":"2014-02-04T09:35:48+09:00","size":101,"digest":"33edbdb0d2fcebd2a65c2041a28533da"},"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png":{"logical_path":"jquery-ui/ui-icons_222222_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"890385424135de1513f00cbecfb7f990"},"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png":{"logical_path":"jquery-ui/ui-icons_2e83ff_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"824705ca4aa2610434a358fe4018c9c6"},"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png":{"logical_path":"jquery-ui/ui-icons_454545_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"254e054f6df453dfac49efbc8b78f79d"},"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png":{"logical_path":"jquery-ui/ui-icons_888888_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"57c441f87c4289a5372823f506c1182d"},"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png":{"logical_path":"jquery-ui/ui-icons_cd0a0a_256x240.png","mtime":"2014-02-04T09:35:48+09:00","size":4369,"digest":"261647ac915575f3981ded254ae8d43e"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-0047adbc0fb7a529ef7a41b5e0e7d097.js":{"logical_path":"application.js","mtime":"2014-02-20T03:12:12+09:00","size":1441568,"digest":"0047adbc0fb7a529ef7a41b5e0e7d097"},"application-42aa660a3233c7738b7578d30ba040b3.js":{"logical_path":"application.js","mtime":"2014-02-22T15:25:11+09:00","size":1441708,"digest":"42aa660a3233c7738b7578d30ba040b3"},"application-66b65154e7b5dcfe67fa164db6fc5f51.js":{"logical_path":"application.js","mtime":"2014-02-23T21:53:43+09:00","size":1441898,"digest":"66b65154e7b5dcfe67fa164db6fc5f51"},"application-8bfffad1222d4e198f3c7ccc1cbd774f.js":{"logical_path":"application.js","mtime":"2014-02-27T01:28:32+09:00","size":1442504,"digest":"8bfffad1222d4e198f3c7ccc1cbd774f"},"application-4f747690ebc8ec4815ae36021fdb2c44.js":{"logical_path":"application.js","mtime":"2014-03-07T12:36:30+09:00","size":1447094,"digest":"4f747690ebc8ec4815ae36021fdb2c44"},"application-28b7bed56c5389dfa372e972c75b6676.css":{"logical_path":"application.css","mtime":"2014-03-07T10:27:39+09:00","size":119378,"digest":"28b7bed56c5389dfa372e972c75b6676"}},"assets":{"default.xml":"default-5d1886100d7c8961e9962bbc4bb0c714.xml","rgb_led_anode.xml":"rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml","favicon.ico":"favicon-a37c90b368fd8ed436cb8f9e9396465c.ico","application.js":"application-4f747690ebc8ec4815ae36021fdb2c44.js","application.css":"application-28b7bed56c5389dfa372e972c75b6676.css","jquery-ui/animated-overlay.gif":"jquery-ui/animated-overlay-c48c87b7a95316f4698484e3b85ee4aa.gif","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-58b63faadd031ca3db096dfdffd90224.png","jquery-ui/ui-bg_flat_75_ffffff_40x100.png":"jquery-ui/ui-bg_flat_75_ffffff_40x100-937399e8b369d64aa075d13a82c00112.png","jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png":"jquery-ui/ui-bg_glass_55_fbf9ee_1x400-a8c503e0f42a081a92a473b0d30ac6cf.png","jquery-ui/ui-bg_glass_65_ffffff_1x400.png":"jquery-ui/ui-bg_glass_65_ffffff_1x400-ddcbfe385abc3947937caa0b44e2f5d2.png","jquery-ui/ui-bg_glass_75_dadada_1x400.png":"jquery-ui/ui-bg_glass_75_dadada_1x400-14dd4a9ad1f21d8c4c7e673ddfb0806f.png","jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png":"jquery-ui/ui-bg_glass_75_e6e6e6_1x400-a43dfabb23b0a987b567b282bad68346.png","jquery-ui/ui-bg_glass_95_fef1ec_1x400.png":"jquery-ui/ui-bg_glass_95_fef1ec_1x400-31c0c791a756266043ee8ea61dacb36a.png","jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png":"jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-33edbdb0d2fcebd2a65c2041a28533da.png","jquery-ui/ui-icons_222222_256x240.png":"jquery-ui/ui-icons_222222_256x240-890385424135de1513f00cbecfb7f990.png","jquery-ui/ui-icons_2e83ff_256x240.png":"jquery-ui/ui-icons_2e83ff_256x240-824705ca4aa2610434a358fe4018c9c6.png","jquery-ui/ui-icons_454545_256x240.png":"jquery-ui/ui-icons_454545_256x240-254e054f6df453dfac49efbc8b78f79d.png","jquery-ui/ui-icons_888888_256x240.png":"jquery-ui/ui-icons_888888_256x240-57c441f87c4289a5372823f506c1182d.png","jquery-ui/ui-icons_cd0a0a_256x240.png":"jquery-ui/ui-icons_cd0a0a_256x240-261647ac915575f3981ded254ae8d43e.png","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}