green_shoes 1.0.282 → 1.0.303

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/VERSION +1 -1
  2. data/lib/green_shoes.rb +3 -0
  3. data/lib/plugins/code_box.rb +41 -0
  4. data/lib/shoes/app.rb +48 -26
  5. data/lib/shoes/help.rb +2 -2
  6. data/lib/shoes/ruby.rb +1 -1
  7. data/lib/shoes/style.rb +2 -0
  8. data/samples/sample56.rb +63 -0
  9. data/samples/sample57.rb +9 -0
  10. data/snapshots/sample1.png +0 -0
  11. data/snapshots/sample10.png +0 -0
  12. data/snapshots/sample11.png +0 -0
  13. data/snapshots/sample12.png +0 -0
  14. data/snapshots/sample13.png +0 -0
  15. data/snapshots/sample14-1.png +0 -0
  16. data/snapshots/sample14.png +0 -0
  17. data/snapshots/sample15.png +0 -0
  18. data/snapshots/sample16.png +0 -0
  19. data/snapshots/sample17.png +0 -0
  20. data/snapshots/sample18.png +0 -0
  21. data/snapshots/sample19.png +0 -0
  22. data/snapshots/sample2.png +0 -0
  23. data/snapshots/sample20.png +0 -0
  24. data/snapshots/sample21.png +0 -0
  25. data/snapshots/sample22.png +0 -0
  26. data/snapshots/sample23.png +0 -0
  27. data/snapshots/sample24.png +0 -0
  28. data/snapshots/sample25.png +0 -0
  29. data/snapshots/sample26.png +0 -0
  30. data/snapshots/sample27.png +0 -0
  31. data/snapshots/sample28.png +0 -0
  32. data/snapshots/sample29.png +0 -0
  33. data/snapshots/sample3.png +0 -0
  34. data/snapshots/sample30.png +0 -0
  35. data/snapshots/sample31.png +0 -0
  36. data/snapshots/sample32.png +0 -0
  37. data/snapshots/sample33.png +0 -0
  38. data/snapshots/sample34.png +0 -0
  39. data/snapshots/sample35.png +0 -0
  40. data/snapshots/sample36.png +0 -0
  41. data/snapshots/sample37.png +0 -0
  42. data/snapshots/sample38.png +0 -0
  43. data/snapshots/sample39.png +0 -0
  44. data/snapshots/sample4.png +0 -0
  45. data/snapshots/sample40.png +0 -0
  46. data/snapshots/sample41.png +0 -0
  47. data/snapshots/sample42.png +0 -0
  48. data/snapshots/sample43.png +0 -0
  49. data/snapshots/sample44.png +0 -0
  50. data/snapshots/sample45.png +0 -0
  51. data/snapshots/sample46.png +0 -0
  52. data/snapshots/sample47.png +0 -0
  53. data/snapshots/sample48.png +0 -0
  54. data/snapshots/sample49.png +0 -0
  55. data/snapshots/sample5.png +0 -0
  56. data/snapshots/sample50.png +0 -0
  57. data/snapshots/sample51.png +0 -0
  58. data/snapshots/sample52.png +0 -0
  59. data/snapshots/sample53.png +0 -0
  60. data/snapshots/sample54.png +0 -0
  61. data/snapshots/sample55.png +0 -0
  62. data/snapshots/sample56.png +0 -0
  63. data/snapshots/sample57.png +0 -0
  64. data/snapshots/sample6.png +0 -0
  65. data/snapshots/sample7.png +0 -0
  66. data/snapshots/sample8.png +0 -0
  67. data/snapshots/sample9.png +0 -0
  68. data/snapshots/sample99.png +0 -0
  69. data/static/manual-en.txt +4 -1
  70. data/static/manual.css +7 -0
  71. data/static/rshoes-icon.png +0 -0
  72. metadata +10 -4
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.282
1
+ 1.0.303
data/lib/green_shoes.rb CHANGED
@@ -17,6 +17,8 @@ module Shoes
17
17
  FONTS = Gtk::Invisible.new.pango_context.families.map(&:name).sort
18
18
  LINK_DEFAULT = "<span underline='single' underline_color='#06E' foreground='#06E' weight='normal'>"
19
19
  LINKHOVER_DEFAULT = "<span underline='single' underline_color='#039' foreground='#039' weight='normal'>"
20
+ BANNER_DEFAULT, TITLE_DEFAULT, SUBTITLE_DEFAULT, TAGLINE_DEFAULT, CAPTION_DEFAULT, PARA_DEFAULT, INSCRIPTION_DEFAULT, IMAGE_DEFAULT =
21
+ {}, {}, {}, {}, {}, {}, {}, {}
20
22
  ROTATE = [Gdk::Pixbuf::ROTATE_NONE, Gdk::Pixbuf::ROTATE_CLOCKWISE, Gdk::Pixbuf::ROTATE_UPSIDEDOWN, Gdk::Pixbuf::ROTATE_COUNTERCLOCKWISE]
21
23
  VERSION = IO.read(File.join(DIR, '../VERSION')).chomp
22
24
  BASIC_ATTRIBUTES_DEFAULT = {left: 0, top: 0, width: 0, height: 0, angle: 0, curve: 0}
@@ -57,6 +59,7 @@ require_relative 'plugins/systray'
57
59
  require_relative 'plugins/thread'
58
60
  require_relative 'plugins/httpd'
59
61
  require_relative 'plugins/treeview'
62
+ require_relative 'plugins/code_box'
60
63
 
61
64
  autoload :ChipMunk, File.join(Shoes::DIR, 'ext/chipmunk')
62
65
  autoload :Bloops, File.join(Shoes::DIR, 'ext/bloops')
@@ -0,0 +1,41 @@
1
+ class Shoes
2
+ class App
3
+ def code_box args={}
4
+ require 'gtksourceview2'
5
+ args = basic_attributes args
6
+
7
+ args[:width] = 400 if args[:width].zero?
8
+ args[:height] = 300 if args[:height].zero?
9
+
10
+ (change_proc = args[:change]; args.delete :change) if args[:change]
11
+ sv = Gtk::SourceView.new
12
+ sv.show_line_numbers = true
13
+ sv.insert_spaces_instead_of_tabs = true
14
+ sv.smart_home_end = Gtk::SourceView::SMART_HOME_END_ALWAYS
15
+ sv.tab_width = 2
16
+ sv.buffer.text = args[:text].to_s
17
+ sv.buffer.language = Gtk::SourceLanguageManager.new.get_language('ruby')
18
+ sv.buffer.highlight_syntax = true
19
+ sv.modify_font(Pango::FontDescription.new(args[:font])) if args[:font]
20
+
21
+ cb = Gtk::ScrolledWindow.new
22
+ cb.set_size_request args[:width], args[:height]
23
+ cb.set_policy Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC
24
+ cb.set_shadow_type Gtk::SHADOW_IN
25
+ cb.add sv
26
+
27
+ @canvas.put cb, args[:left], args[:top]
28
+
29
+ cb.show_all
30
+ args[:real], args[:app], args[:textview] = cb, self, sv
31
+ CodeBox.new(args).tap do |s|
32
+ s.change &change_proc
33
+ sv.buffer.signal_connect "changed" do
34
+ yield s
35
+ end if block_given?
36
+ end
37
+ end
38
+ end
39
+
40
+ class CodeBox < EditBox; end
41
+ end
data/lib/shoes/app.rb CHANGED
@@ -112,6 +112,7 @@ class Shoes
112
112
 
113
113
  def textblock klass, font_size, *msg
114
114
  args = msg.last.class == Hash ? msg.pop : {}
115
+ args = eval("#{klass.to_s[7..-1].upcase}_DEFAULT").merge args
115
116
  args = basic_attributes args
116
117
  args[:markup] = msg.map(&:to_s).join
117
118
  args[:markup] = fg(args[:markup], tr_color(args[:stroke])) if args[:stroke]
@@ -168,6 +169,7 @@ class Shoes
168
169
  def inscription *msg; textblock Para, 10, *msg; end
169
170
 
170
171
  def image name, args={}
172
+ args = IMAGE_DEFAULT.merge args
171
173
  args = basic_attributes args
172
174
  args[:full_width] = args[:full_height] = 0
173
175
  (click_proc = args[:click]; args.delete :click) if args[:click]
@@ -176,9 +178,13 @@ class Shoes
176
178
  d = download name, save: tmpname
177
179
  img = Gtk::Image.new File.join(DIR, '../static/downloading.png')
178
180
  downloading = true
179
- else
181
+ elsif name =~ /\.(png|jpg|gif)$/
180
182
  img = Gtk::Image.new name
181
183
  downloading = false
184
+ else
185
+ require 'rsvg2'
186
+ img = Gtk::Image.new RSVG::Handle.new_from_data(name).pixbuf
187
+ downloading = false
182
188
  end
183
189
 
184
190
  if (!args[:width].zero? or !args[:height].zero?) and !downloading
@@ -206,13 +212,15 @@ class Shoes
206
212
  (click_proc = args[:click]; args.delete :click) if args[:click]
207
213
  b = Gtk::Button.new name
208
214
  b.set_size_request args[:width], args[:height] if args[:width] > 0 and args[:height] > 0
209
- b.signal_connect "clicked" do
210
- yield @_b
211
- end if block_given?
212
215
  @canvas.put b, args[:left], args[:top]
213
216
  b.show_now
214
217
  args[:real], args[:text], args[:app] = b, name, self
215
- @_b = Button.new(args).tap{|s| s.click &click_proc if click_proc}
218
+ Button.new(args).tap do |s|
219
+ s.click &click_proc if click_proc
220
+ b.signal_connect "clicked" do
221
+ yield s
222
+ end if block_given?
223
+ end
216
224
  end
217
225
 
218
226
  def check args={}
@@ -220,13 +228,15 @@ class Shoes
220
228
  (click_proc = args[:click]; args.delete :click) if args[:click]
221
229
  cb = Gtk::CheckButton.new
222
230
  cb.active = true if args[:checked]
223
- cb.signal_connect "clicked" do
224
- yield @_cb
225
- end if block_given?
226
231
  @canvas.put cb, args[:left], args[:top]
227
232
  cb.show_now
228
233
  args[:real], args[:app] = cb, self
229
- @_cb = Check.new(args).tap{|s| s.click &click_proc if click_proc}
234
+ Check.new(args).tap do |s|
235
+ s.click &click_proc if click_proc
236
+ cb.signal_connect "clicked" do
237
+ yield s
238
+ end if block_given?
239
+ end
230
240
  end
231
241
 
232
242
  def radio *attrs
@@ -238,13 +248,15 @@ class Shoes
238
248
  (click_proc = args[:click]; args.delete :click) if args[:click]
239
249
  rb = Gtk::RadioButton.new group
240
250
  rb.active = true if args[:checked]
241
- rb.signal_connect "clicked" do
242
- yield @_rb
243
- end if block_given?
244
251
  @canvas.put rb, args[:left], args[:top]
245
252
  rb.show_now
246
253
  args[:real], args[:app] = rb, self
247
- @_rb = Radio.new(args).tap{|s| s.click &click_proc if click_proc}
254
+ Radio.new(args).tap do |s|
255
+ s.click &click_proc if click_proc
256
+ rb.signal_connect "clicked" do
257
+ yield s
258
+ end if block_given?
259
+ end
248
260
  end
249
261
 
250
262
  def edit_line args={}
@@ -256,13 +268,15 @@ class Shoes
256
268
  el.visibility = false if args[:secret]
257
269
  el.text = args[:text].to_s
258
270
  el.set_size_request args[:width], args[:height]
259
- el.signal_connect "changed" do
260
- yield @_el
261
- end if block_given?
262
271
  @canvas.put el, args[:left], args[:top]
263
272
  el.show_now
264
273
  args[:real], args[:app] = el, self
265
- @_el = EditLine.new(args).tap{|s| s.change &change_proc}
274
+ EditLine.new(args).tap do |s|
275
+ s.change &change_proc
276
+ el.signal_connect "changed" do
277
+ yield s
278
+ end if block_given?
279
+ end
266
280
  end
267
281
 
268
282
  def edit_box args={}
@@ -281,14 +295,15 @@ class Shoes
281
295
  eb.set_shadow_type Gtk::SHADOW_IN
282
296
  eb.add tv
283
297
 
284
- tv.buffer.signal_connect "changed" do
285
- yield @_eb
286
- end if block_given?
287
-
288
298
  @canvas.put eb, args[:left], args[:top]
289
299
  eb.show_all
290
300
  args[:real], args[:app], args[:textview] = eb, self, tv
291
- @_eb = EditBox.new(args).tap{|s| s.change &change_proc}
301
+ EditBox.new(args).tap do |s|
302
+ s.change &change_proc
303
+ tv.buffer.signal_connect "changed" do
304
+ yield s
305
+ end if block_given?
306
+ end
292
307
  end
293
308
 
294
309
  def list_box args={}
@@ -301,13 +316,15 @@ class Shoes
301
316
  args[:items].each{|item| cb.append_text item.to_s}
302
317
  cb.set_size_request args[:width], args[:height]
303
318
  cb.active = args[:items].index(args[:choose]) if args[:choose]
304
- cb.signal_connect("changed") do
305
- yield @_lb
306
- end if block_given?
307
319
  @canvas.put cb, args[:left], args[:top]
308
320
  cb.show_now
309
321
  args[:real], args[:app] = cb, self
310
- @_lb = ListBox.new(args).tap{|s| s.change &change_proc}
322
+ ListBox.new(args).tap do |s|
323
+ s.change &change_proc
324
+ cb.signal_connect("changed") do
325
+ yield s
326
+ end if block_given?
327
+ end
311
328
  end
312
329
 
313
330
  def animate n=10, repaint=true, &blk
@@ -733,6 +750,11 @@ class Shoes
733
750
  def nolayout
734
751
  @nolayout = true
735
752
  end
753
+
754
+ # Resize the app window.
755
+ def resize new_width, new_height
756
+ win.resize new_width, new_height
757
+ end
736
758
 
737
759
  def scroll_top
738
760
  @swin.vscrollbar.value
data/lib/shoes/help.rb CHANGED
@@ -245,7 +245,7 @@ class Manual < Shoes
245
245
  return unless dir
246
246
  FileUtils.mkdir_p File.join(dir, 'static')
247
247
  FileUtils.mkdir_p File.join(dir, 'snapshots')
248
- %w[gshoes-icon.png shoes-manual-apps.png manual.css code_highlighter.js code_highlighter_ruby.js].
248
+ %w[rshoes-icon.png gshoes-icon.png shoes-manual-apps.png manual.css code_highlighter.js code_highlighter_ruby.js].
249
249
  each{|x| FileUtils.cp "#{DIR}/../static/#{x}", "#{dir}/static"}
250
250
  Dir[File.join DIR, '../static/man-*.png'].each{|x| FileUtils.cp x, "#{dir}/static"}
251
251
  Dir[File.join DIR, '../snapshots/sample*.png'].each{|x| FileUtils.cp x, "#{dir}/snapshots"}
@@ -459,7 +459,7 @@ class Manual < Shoes
459
459
  CODE_RE = /\{{3}(?:\s*\#![^\n]+)?(.+?)\}{3}/m
460
460
  NL = "\n"
461
461
  LANG = $lang.downcase[0, 2]
462
- DOCS = load_docs File.join(DIR, "../static/manual-#{LANG}.txt")
462
+ DOCS = load_docs($lang =~ /\.txt$/ ? $lang : File.join(DIR, "../static/manual-#{LANG}.txt"))
463
463
  PNUMS = mk_page_numbers DOCS
464
464
  PEND = PNUMS.length
465
465
  TOC, TOC_LIST = [], []
data/lib/shoes/ruby.rb CHANGED
@@ -16,7 +16,7 @@ class Object
16
16
  Gtk::MessageDialog::BUTTONS_OK,
17
17
  msg.to_s
18
18
  )
19
- dialog.title = "Green Shoes says:"
19
+ dialog.title = options.has_key?(:title) ? options[:title] : "Green Shoes says:"
20
20
  if options[:block]
21
21
  dialog.run
22
22
  dialog.destroy
data/lib/shoes/style.rb CHANGED
@@ -13,6 +13,8 @@ class Shoes
13
13
  @linkhover_style.sub!("foreground='#039'", "foreground='#{args[:stroke]}'") if args[:stroke]
14
14
  @linkhover_style.sub!('>', " background='#{args[:fill]}'>") if args[:fill]
15
15
  @linkhover_style.sub!('normal', "#{args[:weight]}") if args[:weight]
16
+ elsif klass.superclass == Shoes::TextBlock or klass == Shoes::Image
17
+ eval("#{klass.to_s[7..-1].upcase}_DEFAULT").clear.merge! args
16
18
  end
17
19
  end
18
20
  end
@@ -0,0 +1,63 @@
1
+ # The original code is https://github.com/clbustos/rubyvis/blob/master/examples/5_pv_hierarchies/bubble_charts.rb
2
+ # Just only edited a little bit for Green Shoes
3
+ require '../lib/green_shoes'
4
+ require 'rubyvis'
5
+
6
+ def get_files(path)
7
+ h={}
8
+ Dir.glob("#{path}/*").each {|e|
9
+ next if File.expand_path(e)=~/pkg|web|vendor|doc|~/
10
+ pa=File.expand_path(e)
11
+ if File.stat(pa).directory?
12
+ h[File.basename(pa)]=get_files(pa)
13
+ else
14
+ h[File.basename(pa)]=File.stat(pa).size
15
+ end
16
+ }
17
+ h
18
+ end
19
+
20
+ #files=get_files('C:/ruby/lib/ruby/gems/1.9.1/gems/rubyvis-0.5.0/lib')
21
+ files=get_files(DIR)
22
+
23
+ classes = Rubyvis.nodes(Rubyvis.flatten(files).leaf(lambda {|v| v.is_a? Numeric}).array)
24
+
25
+
26
+ classes[1,classes.size-1].each {|d|
27
+ d.node_name = "/" + d.node_value[:keys].join("/")
28
+ i = d.node_name.rindex("/")
29
+ class << d
30
+ attr_accessor :class_name, :package_name
31
+ end
32
+ d.class_name = d.node_name[i+1,d.node_name.size-(i+1)].gsub(".rb","")
33
+ d.package_name = d.node_name[0,i]
34
+ d.node_value = d.node_value[:value]
35
+ }
36
+
37
+ format = Rubyvis.Format.number
38
+
39
+ vis = Rubyvis::Panel.new.
40
+ width(600)
41
+ .height(500)
42
+ c20=Rubyvis::Colors.category20
43
+ vis.add(pv.Layout.Pack)
44
+ .top(-50)
45
+ .bottom(-50)
46
+ .nodes(classes)
47
+ .size(lambda {|d| d.node_value})
48
+ .spacing(0)
49
+ .order(nil)
50
+ .node.add(Rubyvis::Dot)
51
+ .fill_style(lambda {|d| c20.scale(d.package_name)})
52
+ .stroke_style(lambda {|d| c20.scale(d.package_name).darker})
53
+ .visible(lambda {|d| d.parent_node})
54
+ .title(lambda {|d| d.node_name + ": " + format.format(d.node_value)})
55
+ .anchor("center").add(pv.Label)
56
+ .text(lambda {|d| d.class_name[0, Math.sqrt(d.node_value).to_i / 8]})
57
+
58
+ vis.render
59
+ svg = vis.to_svg
60
+
61
+ Shoes.app do
62
+ image svg
63
+ end
@@ -0,0 +1,9 @@
1
+ require '../lib/green_shoes'
2
+
3
+ Shoes.app do
4
+ background deeppink
5
+ title fg " Happy coding!", white
6
+ code = IO.read File.join DIR, '../samples/sample28.rb'
7
+ cb = code_box text: code, width: 500, height: 400, margin_left: 50
8
+ button(' run '){eval cb.text}.move 500, 30
9
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/static/manual-en.txt CHANGED
@@ -638,7 +638,7 @@ are trying to sniff out what release of Green Shoes is running.
638
638
  end
639
639
  }}}
640
640
 
641
- === alert(message: a string, :block => true or false) » nil ===
641
+ === alert(message: a string, :block => true or false, title: a string) » nil ===
642
642
 
643
643
  Pops up a window containing a short message.
644
644
 
@@ -652,6 +652,7 @@ alerts to show messages to help you debug your program, try checking out the
652
652
  standard Ruby method `puts` or `p` methods.
653
653
 
654
654
  If you want to make alert() thread safe, i.e. unblock main thread, use `:block => false` option.
655
+ If you want to change window title, use `:title => a string` option.
655
656
 
656
657
  === ask(message: a string) » a string ===
657
658
 
@@ -3908,3 +3909,5 @@ But in Green Shoes, need to add `:width` size explicitly.
3908
3909
 
3909
3910
  If you don't specify the `:width` size, Green Shoes makes a TextBlock object with
3910
3911
  the `parent.width`.
3912
+
3913
+ For more information, go to [[http://ashbb.github.com/green_shoes/Red_Shoes_and_Green_Shoes.html Red Shoes and Green Shoes]].
data/static/manual.css CHANGED
@@ -30,6 +30,13 @@ a:hover {
30
30
  background: #eee;
31
31
  margin-bottom: 80px;
32
32
  }
33
+ #manual2 {
34
+ float: right;
35
+ padding: 20px;
36
+ border: solid 1px #BBB;
37
+ background: #eee;
38
+ margin-bottom: 80px;
39
+ }
33
40
  #manual li {
34
41
  margin-bottom: 8px;
35
42
  }
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: green_shoes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.282
4
+ version: 1.0.303
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-01 00:00:00.000000000Z
12
+ date: 2011-09-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gtk2
16
- requirement: &16049412 !ruby/object:Gem::Requirement
16
+ requirement: &16927836 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *16049412
24
+ version_requirements: *16927836
25
25
  description: Green Shoes is one of colorful Shoes, written in pure Ruby with Ruby/GTK2.
26
26
  email: ashbbb@gmail.com
27
27
  executables: []
@@ -61,6 +61,7 @@ files:
61
61
  - lib/ext/projector/matrix3d.rb
62
62
  - lib/ext/projector/projector.rb
63
63
  - lib/green_shoes.rb
64
+ - lib/plugins/code_box.rb
64
65
  - lib/plugins/httpd.rb
65
66
  - lib/plugins/systray.rb
66
67
  - lib/plugins/thread.rb
@@ -200,6 +201,8 @@ files:
200
201
  - samples/sample53.rb
201
202
  - samples/sample54.rb
202
203
  - samples/sample55.rb
204
+ - samples/sample56.rb
205
+ - samples/sample57.rb
203
206
  - samples/sample6.rb
204
207
  - samples/sample7.rb
205
208
  - samples/sample8.rb
@@ -263,6 +266,8 @@ files:
263
266
  - snapshots/sample53.png
264
267
  - snapshots/sample54.png
265
268
  - snapshots/sample55.png
269
+ - snapshots/sample56.png
270
+ - snapshots/sample57.png
266
271
  - snapshots/sample6.png
267
272
  - snapshots/sample7.png
268
273
  - snapshots/sample8.png
@@ -305,6 +310,7 @@ files:
305
310
  - static/manual-en.txt
306
311
  - static/manual-ja.txt
307
312
  - static/manual.css
313
+ - static/rshoes-icon.png
308
314
  - static/shoes-manual-apps.png
309
315
  - LICENSE
310
316
  - README.md