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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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"}}