webby 0.8.2 → 0.8.3

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.
Files changed (123) hide show
  1. data/History.txt +20 -0
  2. data/Manifest.txt +46 -2
  3. data/Rakefile +4 -3
  4. data/bin/webby +1 -1
  5. data/data/Rakefile +0 -1
  6. data/data/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
  7. data/data/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
  8. data/data/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
  9. data/data/content/s5/blank.gif +0 -0
  10. data/data/content/s5/bodybg.gif +0 -0
  11. data/data/content/s5/framing.css +23 -0
  12. data/data/content/s5/iepngfix.htc +42 -0
  13. data/data/content/s5/opera.css +7 -0
  14. data/data/content/s5/outline.css +15 -0
  15. data/data/content/s5/pretty.css +86 -0
  16. data/data/content/s5/print.css +1 -0
  17. data/data/content/s5/s5-core.css +9 -0
  18. data/data/content/s5/slides.css +3 -0
  19. data/data/content/s5/slides.js +553 -0
  20. data/data/lib/breadcrumbs.rb +0 -0
  21. data/data/tasks/blog.rake +71 -0
  22. data/data/tasks/build.rake +27 -0
  23. data/data/tasks/create.rake +19 -1
  24. data/data/tasks/deploy.rake +2 -2
  25. data/data/tasks/setup.rb +4 -1
  26. data/data/templates/atom_feed.erb +20 -13
  27. data/data/templates/page.erb +1 -1
  28. data/data/templates/presentation.erb +40 -0
  29. data/examples/presentation/Rakefile +14 -0
  30. data/examples/presentation/content/_sample_code.txt +10 -0
  31. data/examples/presentation/content/css/uv/twilight.css +137 -0
  32. data/examples/presentation/content/index.txt +63 -0
  33. data/examples/presentation/content/s5/blank.gif +0 -0
  34. data/examples/presentation/content/s5/bodybg.gif +0 -0
  35. data/examples/presentation/content/s5/framing.css +23 -0
  36. data/examples/presentation/content/s5/iepngfix.htc +42 -0
  37. data/examples/presentation/content/s5/opera.css +7 -0
  38. data/examples/presentation/content/s5/outline.css +15 -0
  39. data/examples/presentation/content/s5/pretty.css +86 -0
  40. data/examples/presentation/content/s5/print.css +1 -0
  41. data/examples/presentation/content/s5/s5-core.css +9 -0
  42. data/examples/presentation/content/s5/slides.css +3 -0
  43. data/examples/presentation/content/s5/slides.js +553 -0
  44. data/examples/presentation/layouts/presentation.rhtml +43 -0
  45. data/examples/presentation/tasks/blog.rake +71 -0
  46. data/examples/presentation/tasks/build.rake +27 -0
  47. data/examples/presentation/tasks/create.rake +22 -0
  48. data/examples/presentation/tasks/deploy.rake +22 -0
  49. data/examples/presentation/tasks/growl.rake +12 -0
  50. data/examples/presentation/tasks/heel.rake +28 -0
  51. data/examples/presentation/tasks/setup.rb +17 -0
  52. data/examples/presentation/tasks/validate.rake +19 -0
  53. data/examples/presentation/templates/_partial.erb +13 -0
  54. data/examples/presentation/templates/presentation.erb +40 -0
  55. data/examples/webby/Rakefile +3 -2
  56. data/examples/webby/content/css/blueprint/screen.css +1 -1
  57. data/examples/webby/content/css/coderay.css +0 -15
  58. data/examples/webby/content/css/site.css +18 -13
  59. data/examples/webby/content/css/uv/twilight.css +137 -0
  60. data/examples/webby/content/index.txt +6 -10
  61. data/examples/webby/content/manual/index.txt +83 -122
  62. data/examples/webby/content/reference/index.txt +161 -16
  63. data/examples/webby/content/script/jquery.js +1 -1
  64. data/examples/webby/content/tips_and_tricks/index.txt +1 -1
  65. data/examples/webby/content/tutorial/index.txt +1 -1
  66. data/examples/webby/layouts/default.rhtml +2 -7
  67. data/examples/webby/tasks/blog.rake +71 -0
  68. data/examples/webby/tasks/build.rake +27 -0
  69. data/examples/webby/tasks/create.rake +19 -1
  70. data/examples/webby/tasks/deploy.rake +2 -2
  71. data/examples/webby/tasks/setup.rb +4 -20
  72. data/examples/webby/templates/page.erb +1 -1
  73. data/lib/webby.rb +30 -5
  74. data/lib/webby/auto_builder.rb +0 -2
  75. data/lib/webby/builder.rb +51 -5
  76. data/lib/webby/filters.rb +3 -3
  77. data/lib/webby/filters/basepath.rb +7 -7
  78. data/lib/webby/filters/erb.rb +0 -2
  79. data/lib/webby/filters/haml.rb +0 -2
  80. data/lib/webby/filters/markdown.rb +0 -2
  81. data/lib/webby/filters/outline.rb +43 -2
  82. data/lib/webby/filters/sass.rb +0 -2
  83. data/lib/webby/filters/slides.rb +56 -0
  84. data/lib/webby/filters/textile.rb +0 -2
  85. data/lib/webby/filters/tidy.rb +0 -2
  86. data/lib/webby/helpers.rb +0 -2
  87. data/lib/webby/helpers/capture_helper.rb +141 -0
  88. data/lib/webby/helpers/coderay_helper.rb +5 -16
  89. data/lib/webby/helpers/graphviz_helper.rb +6 -18
  90. data/lib/webby/helpers/tag_helper.rb +0 -2
  91. data/lib/webby/helpers/tex_img_helper.rb +5 -16
  92. data/lib/webby/helpers/ultraviolet_helper.rb +11 -22
  93. data/lib/webby/helpers/url_helper.rb +2 -4
  94. data/lib/webby/link_validator.rb +0 -2
  95. data/lib/webby/main.rb +0 -2
  96. data/lib/webby/renderer.rb +163 -37
  97. data/lib/webby/resources.rb +0 -2
  98. data/lib/webby/resources/db.rb +37 -27
  99. data/lib/webby/resources/file.rb +0 -2
  100. data/lib/webby/resources/layout.rb +0 -2
  101. data/lib/webby/resources/page.rb +4 -9
  102. data/lib/webby/resources/partial.rb +1 -3
  103. data/lib/webby/resources/resource.rb +10 -2
  104. data/lib/webby/resources/static.rb +0 -2
  105. data/lib/webby/stelan/mktemp.rb +0 -2
  106. data/lib/webby/stelan/spawner.rb +0 -2
  107. data/lib/webby/utils.rb +0 -2
  108. data/spec/spec_helper.rb +1 -4
  109. data/spec/webby/helpers/capture_helper_spec.rb +56 -0
  110. data/spec/webby/resources/file_spec.rb +0 -1
  111. data/tasks/ann.rake +7 -4
  112. data/tasks/bones.rake +2 -2
  113. data/tasks/gem.rake +26 -14
  114. data/tasks/notes.rake +11 -5
  115. data/tasks/post_load.rake +4 -2
  116. data/tasks/rdoc.rake +4 -2
  117. data/tasks/rubyforge.rake +3 -3
  118. data/tasks/setup.rb +24 -9
  119. data/tasks/spec.rake +1 -1
  120. data/tasks/website.rake +1 -1
  121. metadata +51 -7
  122. data/lib/webby/webby_task.rb +0 -134
  123. data/tasks/svn.rake +0 -45
File without changes
@@ -0,0 +1,71 @@
1
+
2
+ namespace :blog do
3
+
4
+ # iterate over all the files in the "templates/blog" folder and create a
5
+ # rake task corresponding to each file found
6
+ FileList["#{Webby.site.template_dir}/blog/*"].each do |template|
7
+ next unless test(?f, template)
8
+ name = template.pathmap('%n')
9
+ next if name =~ %r/^(month|year)$/ # skip month/year blog entries
10
+
11
+ desc "Create a new blog #{name}"
12
+ task name => [:create_year_index, :create_month_index] do |t|
13
+ page, title, dir = Webby::Builder.new_page_info(t)
14
+
15
+ # if no directory was given use the default blog directory (underneath
16
+ # the content directory)
17
+ dir = Webby.site.blog_dir if dir.empty?
18
+ dir = File.join(dir, Time.now.strftime('%Y/%m/%d'))
19
+
20
+ page = File.join(dir, File.basename(page))
21
+ page = Webby::Builder.create(page, :from => template,
22
+ :locals => {:title => title, :directory => dir})
23
+ exec(::Webby.editor, page) unless ::Webby.editor.nil?
24
+ end
25
+ end # each
26
+
27
+ # this task is used to create the year index file (blog/2008/index.txt)
28
+ task :create_year_index do |t|
29
+ # parse out information about the page to create
30
+ _, _, dir = Webby::Builder.new_page_info(t)
31
+ year = Time.now.strftime '%Y'
32
+
33
+ # if no directory was given use the default blog directory (underneath
34
+ # the content directory)
35
+ dir = Webby.site.blog_dir if dir.empty?
36
+ dir = File.join(dir, year)
37
+
38
+ # determine the filename and template name
39
+ fn = File.join(dir, 'index.txt')
40
+ tmpl = Dir.glob(File.join(Webby.site.template_dir, 'blog/year.*')).first.to_s
41
+
42
+ if test(?f, tmpl) and not test(?f, File.join(Webby.site.content_dir, fn))
43
+ Webby::Builder.create(fn, :from => tmpl,
44
+ :locals => {:title => year, :directory => dir})
45
+ end
46
+ end
47
+
48
+ # this task is used to create the month index file (blog/2008/04/index.txt)
49
+ task :create_month_index do |t|
50
+ # parse out information about the page to create
51
+ _, _, dir = Webby::Builder.new_page_info(t)
52
+ now = Time.now
53
+
54
+ # if no directory was given use the default blog directory (underneath
55
+ # the content directory)
56
+ dir = Webby.site.blog_dir if dir.empty?
57
+ dir = File.join(dir, now.strftime('%Y/%m'))
58
+
59
+ # determine the filename and template name
60
+ fn = File.join(dir, 'index.txt')
61
+ tmpl = Dir.glob(File.join(Webby.site.template_dir, 'blog/month.*')).first.to_s
62
+
63
+ if test(?f, tmpl) and not test(?f, File.join(Webby.site.content_dir, fn))
64
+ Webby::Builder.create(fn, :from => tmpl,
65
+ :locals => {:title => year, :directory => dir})
66
+ end
67
+ end
68
+
69
+ end # namespace :blog
70
+
71
+ # EOF
@@ -0,0 +1,27 @@
1
+
2
+ task :configure_basepath do
3
+ Webby.site.base = ENV['BASE'] if ENV.has_key?('BASE')
4
+ end
5
+
6
+ desc "Build the website"
7
+ task :build => :configure_basepath do |t|
8
+ Webby::Builder.run
9
+ end
10
+
11
+ desc "Rebuild the website"
12
+ task :rebuild => :configure_basepath do |t|
13
+ Webby::Builder.run :rebuild => true
14
+ end
15
+
16
+ desc "Continuously build the website"
17
+ task :autobuild => :configure_basepath do |t|
18
+ Webby::AutoBuilder.run
19
+ end
20
+
21
+ desc "Delete the website"
22
+ task :clobber do |t|
23
+ rm_rf Webby.site.output_dir
24
+ mkdir Webby.site.output_dir
25
+ end
26
+
27
+ # EOF
@@ -1,4 +1,22 @@
1
1
 
2
- Rake::WebbyTask.new
2
+ namespace :create do
3
+
4
+ FileList["#{Webby.site.template_dir}/*"].each do |template|
5
+ next unless test(?f, template)
6
+ name = template.pathmap '%n'
7
+
8
+ # if the file is a partial template
9
+ name = $1 if name =~ %r/^_(.*)/
10
+
11
+ desc "Create a new #{name}"
12
+ task name do |t|
13
+ page, title, dir = Webby::Builder.new_page_info(t)
14
+ page = Webby::Builder.create(page, :from => template,
15
+ :locals => {:title => title, :directory => dir})
16
+ exec(::Webby.editor, page) unless ::Webby.editor.nil?
17
+ end
18
+ end # each
19
+
20
+ end # namespace :create
3
21
 
4
22
  # EOF
@@ -6,14 +6,14 @@ namespace :deploy do
6
6
  desc 'Deploy to the server using rsync'
7
7
  task :rsync do
8
8
  cmd = "rsync #{SITE.rsync_args.join(' ')} "
9
- cmd << "#{SITE.output_dir}/ #{SITE.host}:#{SITE.remote_dir}"
9
+ cmd << "#{SITE.output_dir}/ #{SITE.user}@#{SITE.host}:#{SITE.remote_dir}"
10
10
  sh cmd
11
11
  end
12
12
 
13
13
  desc 'Deploy to the server using ssh'
14
14
  task :ssh do
15
15
  Rake::SshDirPublisher.new(
16
- SITE.host, SITE.remote_dir, SITE.output_dir
16
+ "#{SITE.user}@#{SITE.host}", SITE.remote_dir, SITE.output_dir
17
17
  ).upload
18
18
  end
19
19
 
@@ -9,6 +9,9 @@ end
9
9
  SITE = Webby.site
10
10
 
11
11
  # Load the other rake files in the tasks folder
12
- Dir.glob('tasks/*.rake').sort.each {|fn| import fn}
12
+ Dir.glob(::File.join(%w[tasks *.rake])).sort.each {|fn| import fn}
13
+
14
+ # Load all the ruby files in the lib folder
15
+ Dir.glob(::File.join(%w[lib ** *.rb])).sort.each {|fn| require fn}
13
16
 
14
17
  # EOF
@@ -1,6 +1,11 @@
1
1
  ---
2
+ title: A New Atom Feed
3
+ subtitle: A really swell blog built with Webby
4
+ site: fake-n-site.org
5
+ author: Author's Name
6
+ email: author@fake-n-site.org
2
7
  extension: xml
3
- layout: false
8
+ layout: nil
4
9
  dirty: true
5
10
  filter:
6
11
  - erb
@@ -8,25 +13,27 @@ filter:
8
13
  <?xml version="1.0" encoding="utf-8"?>
9
14
  <feed xmlns="http://www.w3.org/2005/Atom">
10
15
 
11
- <title>A New Atom Feed</title>
12
- <subtitle>a really swell blog</subtitle>
13
- <link href="http://fakesite.nil/feed/" rel="self"/>
14
- <link href="http://fakesite.nil/"/>
16
+ <title><%%= h(@page.title) %></title>
17
+ <subtitle><%%= h(@page.subtitle) %></subtitle>
18
+ <link href="http://<%%= @page.site %>/<%= directory %>/" rel="self" />
19
+ <link href="http://<%%= @page.site %>/" />
15
20
  <updated><%%= Time.now.xmlschema %></updated>
16
21
  <author>
17
- <name>Author's Name</name>
18
- <email>author@fakesite.nil</email>
22
+ <name><%%= h(@page.author) %></name>
23
+ <email><%%= h(@page.email) %></email>
19
24
  </author>
20
- <id>http://fakesite.nil/</id>
25
+ <id>http://<%%= @page.site %>/</id>
21
26
  <%% @pages.find(:limit => 10,
22
- :in_directory => 'articles',
27
+ :in_directory => 'blog',
23
28
  :recursive => true,
24
- :sort_by => 'created_at',
25
- :reverse => true).each do |article| %>
29
+ :sort_by => 'mtime',
30
+ :reverse => true).each do |article|
31
+ next if article == @page
32
+ %>
26
33
  <entry>
27
34
  <title><%%= h(article.title) %></title>
28
- <link href="<%%= article.url %>"/>
29
- <id>tag:fakesite.nil,<%%= article.created_at.strftime('%Y-%m-%d') %>:<%%= article.created_at.to_i %></id>
35
+ <link href="<%%= article.url %>" />
36
+ <id>tag:<%%= @page.site %>,<%%= article.created_at.strftime('%Y-%m-%d') %>:<%%= article.created_at.to_i %></id>
30
37
  <updated><%%= article.created_at.xmlschema %></updated>
31
38
  <content type="html"><%%= h(article.render) %></content>
32
39
  </entry>
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: New Page
2
+ title: <%= title %>
3
3
  created_at: <%= Time.now.to_y %>
4
4
  filter:
5
5
  - erb
@@ -0,0 +1,40 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: You
5
+ company: Company
6
+ copyright: Creative Commons
7
+ filter:
8
+ - erb
9
+ - textile
10
+ - slides
11
+ layout: presentation
12
+ ---
13
+ h1. Presentation Title
14
+
15
+ Clever introductory text that will grab the audience's attention.
16
+
17
+
18
+ h1. Title of the First Slide
19
+
20
+ A little more build up before really getting into the meat of it.
21
+
22
+
23
+ h1. Title of the Second Slide
24
+
25
+ Finally, some code!
26
+
27
+ <%% uv :lang => 'ruby', :line_numbers => false do -%>
28
+ class EnglishMajor
29
+ def supercilious
30
+ 'behaving or looking as though one thinks one is superior to others'
31
+ end
32
+ end
33
+ <%% end -%>
34
+
35
+
36
+ h1. The Final Slide
37
+
38
+ And that about sums it up!
39
+
40
+ Thanks for visiting
@@ -0,0 +1,14 @@
1
+
2
+ load 'tasks/setup.rb'
3
+
4
+ task :default => :build
5
+
6
+ desc 'deploy the site to the webserver'
7
+ task :deploy => [:build, 'deploy:rsync']
8
+
9
+ task :autobuild => :growl
10
+
11
+ SITE.uv[:theme] = 'twilight'
12
+ SITE.uv[:line_numbers] = false
13
+
14
+ # EOF
@@ -0,0 +1,10 @@
1
+ ---
2
+ filter: erb
3
+ ---
4
+ <% uv :lang => "ruby", :theme => 'twilight' do -%>
5
+ class A
6
+ def method()
7
+ puts "in class #{self.class.name}"
8
+ end
9
+ end
10
+ <% end -%>
@@ -0,0 +1,137 @@
1
+ pre.twilight .DiffInserted {
2
+ background-color: #253B22;
3
+ color: #F8F8F8;
4
+ }
5
+ pre.twilight .DiffHeader {
6
+ background-color: #0E2231;
7
+ color: #F8F8F8;
8
+ font-style: italic;
9
+ }
10
+ pre.twilight .CssPropertyValue {
11
+ color: #F9EE98;
12
+ }
13
+ pre.twilight .CCCPreprocessorDirective {
14
+ color: #AFC4DB;
15
+ }
16
+ pre.twilight .Constant {
17
+ color: #CF6A4C;
18
+ }
19
+ pre.twilight .DiffChanged {
20
+ background-color: #4A410D;
21
+ color: #F8F8F8;
22
+ }
23
+ pre.twilight .EmbeddedSource {
24
+ background-color: #A3A6AD;
25
+ }
26
+ pre.twilight .Support {
27
+ color: #9B859D;
28
+ }
29
+ pre.twilight .MarkupList {
30
+ color: #F9EE98;
31
+ }
32
+ pre.twilight .CssConstructorArgument {
33
+ color: #8F9D6A;
34
+ }
35
+ pre.twilight .Storage {
36
+ color: #F9EE98;
37
+ }
38
+ pre.twilight .line-numbers {
39
+ background-color: inherit;
40
+ color: #999999;
41
+ }
42
+ pre.twilight .CssClass {
43
+ color: #9B703F;
44
+ }
45
+ pre.twilight .StringConstant {
46
+ color: #DDF2A4;
47
+ }
48
+ pre.twilight .CssAtRule {
49
+ color: #8693A5;
50
+ }
51
+ pre.twilight .MetaTagInline {
52
+ color: #E0C589;
53
+ }
54
+ pre.twilight .MarkupHeading {
55
+ color: #CF6A4C;
56
+ }
57
+ pre.twilight .CssTagName {
58
+ color: #CDA869;
59
+ }
60
+ pre.twilight .SupportConstant {
61
+ color: #CF6A4C;
62
+ }
63
+ pre.twilight .DiffDeleted {
64
+ background-color: #420E09;
65
+ color: #F8F8F8;
66
+ }
67
+ pre.twilight .CCCPreprocessorLine {
68
+ color: #8996A8;
69
+ }
70
+ pre.twilight .StringRegexpSpecial {
71
+ color: #CF7D34;
72
+ }
73
+ pre.twilight .EmbeddedSourceBright {
74
+ background-color: #9C9EA4;
75
+ }
76
+ pre.twilight .InvalidIllegal {
77
+ background-color: #241A24;
78
+ color: #F8F8F8;
79
+ }
80
+ pre.twilight .SupportFunction {
81
+ color: #DAD085;
82
+ }
83
+ pre.twilight .CssAdditionalConstants {
84
+ color: #CA7840;
85
+ }
86
+ pre.twilight .MetaTagAll {
87
+ color: #AC885B;
88
+ }
89
+ pre.twilight .StringRegexp {
90
+ color: #E9C062;
91
+ }
92
+ pre.twilight .StringEmbeddedSource {
93
+ color: #DAEFA3;
94
+ }
95
+ pre.twilight .EntityInheritedClass {
96
+ color: #9B5C2E;
97
+ font-style: italic;
98
+ }
99
+ pre.twilight .CssId {
100
+ color: #8B98AB;
101
+ }
102
+ pre.twilight .CssPseudoClass {
103
+ color: #8F9D6A;
104
+ }
105
+ pre.twilight .StringVariable {
106
+ color: #8A9A95;
107
+ }
108
+ pre.twilight .String {
109
+ color: #8F9D6A;
110
+ }
111
+ pre.twilight .Keyword {
112
+ color: #CDA869;
113
+ }
114
+ pre.twilight {
115
+ background-color: #141414;
116
+ color: #F8F8F8;
117
+ }
118
+ pre.twilight .CssPropertyName {
119
+ color: #C5AF75;
120
+ }
121
+ pre.twilight .DoctypeXmlProcessing {
122
+ color: #494949;
123
+ }
124
+ pre.twilight .InvalidDeprecated {
125
+ color: #D2A8A1;
126
+ font-style: italic;
127
+ }
128
+ pre.twilight .Variable {
129
+ color: #7587A6;
130
+ }
131
+ pre.twilight .Entity {
132
+ color: #9B703F;
133
+ }
134
+ pre.twilight .Comment {
135
+ color: #5F5A60;
136
+ font-style: italic;
137
+ }
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Webby S5
3
+ created_at: 2008-05-18 22:10:21.995012 -06:00
4
+ author: You
5
+ company: Company
6
+ copyright: Creative Commons
7
+ filter:
8
+ - erb
9
+ - textile
10
+ - slides
11
+ layout: presentation
12
+ ---
13
+ h1. Webby S5 Generator
14
+
15
+ Clever introductory text that will grab the audience's attention.
16
+
17
+
18
+ h1. Title of the First Slide
19
+
20
+ A little more build up before really getting into the meat of it.
21
+
22
+
23
+ h1. Title of the Second Slide
24
+
25
+ Finally, some code!
26
+
27
+ <% uv :lang => "ragel", :theme => 'twilight' do -%>
28
+ action dgt { printf("DGT: %c\n", fc); }
29
+ action dec { printf("DEC: .\n"); }
30
+ action exp { printf("EXP: %c\n", fc); }
31
+ action exp_sign { printf("SGN: %c\n", fc); }
32
+ action number { /*NUMBER*/ }
33
+
34
+ number = (
35
+ [0-9]+ $dgt ( '.' @dec [0-9]+ $dgt )?
36
+ ( [eE] ( [+\-] $exp_sign )? [0-9]+ $exp )?
37
+ ) %number;
38
+
39
+ main := ( number '\n' )*;
40
+ <% end -%>
41
+
42
+
43
+ h1. Title of the Third Slide
44
+
45
+ This code comes from a partial
46
+
47
+ <%= render :partial => 'sample_code', :guard => true %>
48
+
49
+
50
+ h1. Title of the Fourth Slide
51
+
52
+ A quadratic equation with real or complex coefficients has two (not necessarily distinct) solutions, called roots, which may or may not be real, given by the quadratic formula:
53
+
54
+ <% tex2img 'quadratic', :path => 'images', :alt => 'quadratic', :resolution => '300x300' do -%>
55
+ x = \frac{-b\pm\sqrt[]{b^2-4ac}}{2a}
56
+ <% end -%>
57
+
58
+
59
+ h1. The Final Slide
60
+
61
+ And that about sums it up!
62
+
63
+ Thanks for visiting