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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/blocks/hardware.js.coffee.erb +40 -3
- data/app/assets/stylesheets/toolbox.css.scss.erb +1 -6
- data/app/controllers/source_codes_controller.rb +5 -1
- data/app/models/concerns/ruby_to_block/block/base.rb +251 -0
- data/app/models/concerns/ruby_to_block/block/character.rb +42 -0
- data/app/models/concerns/ruby_to_block/block/character_event.rb +27 -0
- data/app/models/concerns/ruby_to_block/block/character_method_call.rb +29 -0
- data/app/models/concerns/ruby_to_block/block/character_new.rb +7 -0
- data/app/models/concerns/ruby_to_block/block/character_operation.rb +80 -0
- data/app/models/concerns/ruby_to_block/block/control_if.rb +45 -0
- data/app/models/concerns/ruby_to_block/block/control_loop.rb +19 -0
- data/app/models/concerns/ruby_to_block/block/control_sleep.rb +18 -0
- data/app/models/concerns/ruby_to_block/block/do.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/else.rb +12 -0
- data/app/models/concerns/ruby_to_block/block/end.rb +26 -0
- data/app/models/concerns/ruby_to_block/block/events_on_click.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/events_on_key_push_or_down.rb +17 -0
- data/app/models/concerns/ruby_to_block/block/events_on_start.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/hardware_init_hardware.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/hardware_led_off.rb +16 -0
- data/app/models/concerns/ruby_to_block/block/hardware_led_on.rb +16 -0
- data/app/models/concerns/ruby_to_block/block/hardware_on_sensor_change.rb +17 -0
- data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_off.rb +18 -0
- data/app/models/concerns/ruby_to_block/block/hardware_rgb_led_on.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/hardware_sensor_value.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car.rb +26 -0
- data/app/models/concerns/ruby_to_block/block/looks_hide.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/looks_say.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/looks_show.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/looks_vanish.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/math_number.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/motion_change_x_by.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_change_y_by.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_move.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/motion_point_towards_character.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/motion_point_towards_mouse.rb +9 -0
- data/app/models/concerns/ruby_to_block/block/motion_reach_wall.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/motion_rotate_left.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_rotate_right.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/motion_self_angle.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/motion_self_x.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/motion_self_y.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/motion_set_angle.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/motion_set_x.rb +38 -0
- data/app/models/concerns/ruby_to_block/block/motion_set_y.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/motion_turn.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/motion_turn_if_reach_wall.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/null.rb +17 -0
- data/app/models/concerns/ruby_to_block/block/operators_compare.rb +36 -0
- data/app/models/concerns/ruby_to_block/block/operators_false.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/operators_true.rb +8 -0
- data/app/models/concerns/ruby_to_block/block/require_smalruby.rb +7 -0
- data/app/models/concerns/ruby_to_block/block/ruby_comment.rb +16 -0
- data/app/models/concerns/ruby_to_block/block/ruby_expression.rb +14 -0
- data/app/models/concerns/ruby_to_block/block/ruby_statement.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/sensing_hit.rb +23 -0
- data/app/models/concerns/ruby_to_block/block/sound_play.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/sound_preset_sounds.rb +31 -0
- data/app/models/concerns/ruby_to_block/block/text.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/value.rb +12 -0
- data/app/models/concerns/ruby_to_block/block.rb +97 -0
- data/app/models/concerns/ruby_to_block/context.rb +97 -0
- data/app/models/concerns/ruby_to_block/formatter.rb +26 -0
- data/app/models/concerns/ruby_to_block.rb +17 -360
- data/app/models/source_code.rb +3 -1
- data/app/views/editor/_toolbox.html.haml +16 -0
- data/lib/smalruby_editor/version.rb +3 -3
- data/public/assets/{application-64a390efe879c386a5950515064f062d.css → application-28b7bed56c5389dfa372e972c75b6676.css} +17 -10
- data/public/assets/application-28b7bed56c5389dfa372e972c75b6676.css.gz +0 -0
- data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js → application-4f747690ebc8ec4815ae36021fdb2c44.js} +135 -0
- data/public/assets/{application-8bfffad1222d4e198f3c7ccc1cbd774f.js.gz → application-4f747690ebc8ec4815ae36021fdb2c44.js.gz} +0 -0
- data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
- data/smalruby-editor.gemspec +1 -1
- data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car.feature +69 -0
- data/spec/acceptance/ruby_mode/translate.feature +1 -1
- data/spec/controllers/source_codes_controller_spec.rb +14 -11
- data/spec/models/concerns/ruby_to_block/block/character_method_call_spec.rb +175 -0
- data/spec/models/concerns/ruby_to_block/block/control_if_spec.rb +75 -0
- data/spec/models/concerns/ruby_to_block/block/control_loop_spec.rb +68 -0
- data/spec/models/concerns/ruby_to_block/block/events_on_start_spec.rb +120 -0
- data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +120 -0
- data/spec/models/concerns/ruby_to_block/block/looks_say_spec.rb +79 -0
- data/spec/models/concerns/ruby_to_block/block/looks_spec.rb +74 -0
- data/spec/models/concerns/ruby_to_block/block/motion_move_spec.rb +63 -0
- data/spec/models/concerns/ruby_to_block/block/motion_reach_wall_spec.rb +67 -0
- data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +392 -0
- data/spec/models/concerns/ruby_to_block/block/motion_turn_spec.rb +54 -0
- data/spec/models/concerns/ruby_to_block/block/require_smalruby_spec.rb +39 -0
- data/spec/models/concerns/ruby_to_block/block/ruby_comment_spec.rb +55 -0
- data/spec/models/concerns/ruby_to_block/block/ruby_statement_spec.rb +113 -0
- data/spec/models/concerns/ruby_to_block/block/shared/block_examples.rb +44 -0
- data/spec/models/concerns/ruby_to_block/block/sound_spec.rb +46 -0
- data/spec/models/concerns/ruby_to_block/block_spec.rb +49 -0
- data/spec/models/concerns/ruby_to_block_spec.rb +421 -217
- data/spec/support/ruby_to_block.rb +10 -0
- metadata +108 -10
- data/public/assets/application-64a390efe879c386a5950515064f062d.css.gz +0 -0
@@ -1,391 +1,48 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
|
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
|
-
|
57
|
-
|
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
|
-
|
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
|
-
|
164
|
-
end
|
165
|
-
end
|
27
|
+
private
|
166
28
|
|
167
|
-
|
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 =
|
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
|
data/app/models/source_code.rb
CHANGED
@@ -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.
|
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
|
-
|
5095
|
-
|
5096
|
-
|
5097
|
-
|
5098
|
-
|
5099
|
-
|
5100
|
-
|
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; }
|
Binary file
|
@@ -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('');
|
Binary file
|
@@ -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-
|
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"}}
|