henshin 0.0.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. data/.gitignore +2 -0
  2. data/VERSION +1 -1
  3. data/bin/henshin +7 -1
  4. data/henshin.gemspec +6 -149
  5. data/lib/henshin.rb +22 -6
  6. data/lib/henshin/categories.rb +19 -0
  7. data/lib/henshin/ext.rb +47 -2
  8. data/lib/henshin/gen.rb +8 -11
  9. data/lib/henshin/plugin.rb +9 -0
  10. data/lib/henshin/plugins/liquid.rb +1 -1
  11. data/lib/henshin/post.rb +38 -14
  12. data/lib/henshin/site.rb +68 -29
  13. data/lib/henshin/tags.rb +19 -0
  14. data/test/site/_site/2010/10/20-testing-stuff/index.html +14 -6
  15. data/test/site/_site/2010/5/15-lorem-ipsum/index.html +14 -6
  16. data/test/site/_site/css/print.css +10 -24
  17. data/test/site/_site/index.html +82 -1
  18. data/test/site/index.html +2 -0
  19. data/test/site/layouts/main.html +35 -1
  20. data/test/site/layouts/post.html +7 -5
  21. data/test/site/options.yaml +5 -2
  22. data/test/site/plugins/test.rb +11 -0
  23. data/test/site/posts/Testing-Stuff.markdown +1 -0
  24. metadata +7 -150
  25. data/.yardoc/checksums +0 -10
  26. data/.yardoc/objects/Hash.dat +0 -0
  27. data/.yardoc/objects/Hash/to_options_i.dat +0 -0
  28. data/.yardoc/objects/Henshin.dat +0 -0
  29. data/.yardoc/objects/Henshin/CSSGenerator.dat +0 -0
  30. data/.yardoc/objects/Henshin/CSSGenerator/generate_i.dat +0 -0
  31. data/.yardoc/objects/Henshin/Defaults.dat +0 -0
  32. data/.yardoc/objects/Henshin/Gen.dat +0 -0
  33. data/.yardoc/objects/Henshin/Gen/config_3D_i.dat +0 -0
  34. data/.yardoc/objects/Henshin/Gen/config_i.dat +0 -0
  35. data/.yardoc/objects/Henshin/Gen/content_3D_i.dat +0 -0
  36. data/.yardoc/objects/Henshin/Gen/content_i.dat +0 -0
  37. data/.yardoc/objects/Henshin/Gen/date_3D_i.dat +0 -0
  38. data/.yardoc/objects/Henshin/Gen/date_i.dat +0 -0
  39. data/.yardoc/objects/Henshin/Gen/extension_3D_i.dat +0 -0
  40. data/.yardoc/objects/Henshin/Gen/extension_i.dat +0 -0
  41. data/.yardoc/objects/Henshin/Gen/initialize_i.dat +0 -0
  42. data/.yardoc/objects/Henshin/Gen/layout_3D_i.dat +0 -0
  43. data/.yardoc/objects/Henshin/Gen/layout_i.dat +0 -0
  44. data/.yardoc/objects/Henshin/Gen/override_i.dat +0 -0
  45. data/.yardoc/objects/Henshin/Gen/path_3D_i.dat +0 -0
  46. data/.yardoc/objects/Henshin/Gen/path_i.dat +0 -0
  47. data/.yardoc/objects/Henshin/Gen/payload_i.dat +0 -0
  48. data/.yardoc/objects/Henshin/Gen/process_i.dat +0 -0
  49. data/.yardoc/objects/Henshin/Gen/read_yaml_i.dat +0 -0
  50. data/.yardoc/objects/Henshin/Gen/render_i.dat +0 -0
  51. data/.yardoc/objects/Henshin/Gen/site_3D_i.dat +0 -0
  52. data/.yardoc/objects/Henshin/Gen/site_i.dat +0 -0
  53. data/.yardoc/objects/Henshin/Gen/title_3D_i.dat +0 -0
  54. data/.yardoc/objects/Henshin/Gen/title_i.dat +0 -0
  55. data/.yardoc/objects/Henshin/Gen/write_i.dat +0 -0
  56. data/.yardoc/objects/Henshin/HTMLGenerator.dat +0 -0
  57. data/.yardoc/objects/Henshin/HTMLGenerator/generate_i.dat +0 -0
  58. data/.yardoc/objects/Henshin/JSGenerator.dat +0 -0
  59. data/.yardoc/objects/Henshin/JSGenerator/generate_i.dat +0 -0
  60. data/.yardoc/objects/Henshin/LayoutParser.dat +0 -0
  61. data/.yardoc/objects/Henshin/LayoutParser/generate_i.dat +0 -0
  62. data/.yardoc/objects/Henshin/Post.dat +0 -0
  63. data/.yardoc/objects/Henshin/Post/author_3D_i.dat +0 -0
  64. data/.yardoc/objects/Henshin/Post/author_i.dat +0 -0
  65. data/.yardoc/objects/Henshin/Post/category_3D_i.dat +0 -0
  66. data/.yardoc/objects/Henshin/Post/category_i.dat +0 -0
  67. data/.yardoc/objects/Henshin/Post/date_3D_i.dat +0 -0
  68. data/.yardoc/objects/Henshin/Post/date_i.dat +0 -0
  69. data/.yardoc/objects/Henshin/Post/initialize_i.dat +0 -0
  70. data/.yardoc/objects/Henshin/Post/override_i.dat +0 -0
  71. data/.yardoc/objects/Henshin/Post/payload_i.dat +0 -0
  72. data/.yardoc/objects/Henshin/Post/permalink_i.dat +0 -0
  73. data/.yardoc/objects/Henshin/Post/process_i.dat +0 -0
  74. data/.yardoc/objects/Henshin/Post/read_name_i.dat +0 -0
  75. data/.yardoc/objects/Henshin/Post/read_yaml_i.dat +0 -0
  76. data/.yardoc/objects/Henshin/Post/tags_3D_i.dat +0 -0
  77. data/.yardoc/objects/Henshin/Post/tags_i.dat +0 -0
  78. data/.yardoc/objects/Henshin/Post/title_3D_i.dat +0 -0
  79. data/.yardoc/objects/Henshin/Post/title_i.dat +0 -0
  80. data/.yardoc/objects/Henshin/Post/write_i.dat +0 -0
  81. data/.yardoc/objects/Henshin/Site.dat +0 -0
  82. data/.yardoc/objects/Henshin/Site/archives_3D_i.dat +0 -0
  83. data/.yardoc/objects/Henshin/Site/archives_i.dat +0 -0
  84. data/.yardoc/objects/Henshin/Site/categories_3D_i.dat +0 -0
  85. data/.yardoc/objects/Henshin/Site/categories_i.dat +0 -0
  86. data/.yardoc/objects/Henshin/Site/config_3D_i.dat +0 -0
  87. data/.yardoc/objects/Henshin/Site/config_i.dat +0 -0
  88. data/.yardoc/objects/Henshin/Site/gens_3D_i.dat +0 -0
  89. data/.yardoc/objects/Henshin/Site/gens_i.dat +0 -0
  90. data/.yardoc/objects/Henshin/Site/initialize_i.dat +0 -0
  91. data/.yardoc/objects/Henshin/Site/layouts_3D_i.dat +0 -0
  92. data/.yardoc/objects/Henshin/Site/layouts_i.dat +0 -0
  93. data/.yardoc/objects/Henshin/Site/payload_i.dat +0 -0
  94. data/.yardoc/objects/Henshin/Site/plugins_3D_i.dat +0 -0
  95. data/.yardoc/objects/Henshin/Site/plugins_i.dat +0 -0
  96. data/.yardoc/objects/Henshin/Site/posts_3D_i.dat +0 -0
  97. data/.yardoc/objects/Henshin/Site/posts_i.dat +0 -0
  98. data/.yardoc/objects/Henshin/Site/process_i.dat +0 -0
  99. data/.yardoc/objects/Henshin/Site/read_i.dat +0 -0
  100. data/.yardoc/objects/Henshin/Site/read_layouts_i.dat +0 -0
  101. data/.yardoc/objects/Henshin/Site/read_others_i.dat +0 -0
  102. data/.yardoc/objects/Henshin/Site/read_posts_i.dat +0 -0
  103. data/.yardoc/objects/Henshin/Site/render_i.dat +0 -0
  104. data/.yardoc/objects/Henshin/Site/reset_i.dat +0 -0
  105. data/.yardoc/objects/Henshin/Site/statics_3D_i.dat +0 -0
  106. data/.yardoc/objects/Henshin/Site/statics_i.dat +0 -0
  107. data/.yardoc/objects/Henshin/Site/tags_3D_i.dat +0 -0
  108. data/.yardoc/objects/Henshin/Site/tags_i.dat +0 -0
  109. data/.yardoc/objects/Henshin/Site/write_i.dat +0 -0
  110. data/.yardoc/objects/Henshin/StandardPlugin.dat +0 -0
  111. data/.yardoc/objects/Henshin/configure_c.dat +0 -0
  112. data/.yardoc/objects/Henshin/extensions_c.dat +0 -0
  113. data/.yardoc/objects/Henshin/load_plugins_c.dat +0 -0
  114. data/.yardoc/objects/LiquidPlugin.dat +0 -0
  115. data/.yardoc/objects/LiquidPlugin/extensions_3D_i.dat +0 -0
  116. data/.yardoc/objects/LiquidPlugin/extensions_i.dat +0 -0
  117. data/.yardoc/objects/LiquidPlugin/generate_i.dat +0 -0
  118. data/.yardoc/objects/LiquidPlugin/initialize_i.dat +0 -0
  119. data/.yardoc/objects/LiquidPlugin/read_i.dat +0 -0
  120. data/.yardoc/objects/MarukuPlugin.dat +0 -0
  121. data/.yardoc/objects/MarukuPlugin/extensions_3D_i.dat +0 -0
  122. data/.yardoc/objects/MarukuPlugin/extensions_i.dat +0 -0
  123. data/.yardoc/objects/MarukuPlugin/generate_i.dat +0 -0
  124. data/.yardoc/objects/MarukuPlugin/initialize_i.dat +0 -0
  125. data/.yardoc/objects/PygmentsPlugin.dat +0 -0
  126. data/.yardoc/objects/PygmentsPlugin/extensions_3D_i.dat +0 -0
  127. data/.yardoc/objects/PygmentsPlugin/extensions_i.dat +0 -0
  128. data/.yardoc/objects/PygmentsPlugin/generate_i.dat +0 -0
  129. data/.yardoc/objects/PygmentsPlugin/initialize_i.dat +0 -0
  130. data/.yardoc/objects/SassPlugin.dat +0 -0
  131. data/.yardoc/objects/SassPlugin/extensions_3D_i.dat +0 -0
  132. data/.yardoc/objects/SassPlugin/extensions_i.dat +0 -0
  133. data/.yardoc/objects/SassPlugin/generate_i.dat +0 -0
  134. data/.yardoc/objects/SassPlugin/initialize_i.dat +0 -0
  135. data/.yardoc/objects/String.dat +0 -0
  136. data/.yardoc/objects/String/directory_i.dat +0 -0
  137. data/.yardoc/objects/String/extension_i.dat +0 -0
  138. data/.yardoc/objects/String/file_name_i.dat +0 -0
  139. data/.yardoc/objects/String/slugify_i.dat +0 -0
  140. data/.yardoc/objects/root.dat +0 -0
  141. data/.yardoc/proxy_types +0 -2
  142. data/doc/Hash.html +0 -179
  143. data/doc/Henshin.html +0 -479
  144. data/doc/Henshin/CSSGenerator.html +0 -186
  145. data/doc/Henshin/Gen.html +0 -1225
  146. data/doc/Henshin/HTMLGenerator.html +0 -186
  147. data/doc/Henshin/JSGenerator.html +0 -182
  148. data/doc/Henshin/LayoutParser.html +0 -186
  149. data/doc/Henshin/Post.html +0 -1159
  150. data/doc/Henshin/Site.html +0 -1462
  151. data/doc/Henshin/StandardPlugin.html +0 -99
  152. data/doc/LiquidPlugin.html +0 -399
  153. data/doc/MarukuPlugin.html +0 -325
  154. data/doc/PygmentsPlugin.html +0 -325
  155. data/doc/SassPlugin.html +0 -325
  156. data/doc/String.html +0 -371
  157. data/doc/_index.html +0 -239
  158. data/doc/class_list.html +0 -36
  159. data/doc/css/common.css +0 -1
  160. data/doc/css/full_list.css +0 -50
  161. data/doc/css/style.css +0 -273
  162. data/doc/file.README.html +0 -133
  163. data/doc/file_list.html +0 -38
  164. data/doc/frames.html +0 -13
  165. data/doc/index.html +0 -133
  166. data/doc/js/app.js +0 -111
  167. data/doc/js/full_list.js +0 -117
  168. data/doc/js/jquery.js +0 -19
  169. data/doc/method_list.html +0 -611
  170. data/doc/top-level-namespace.html +0 -89
  171. data/test/site/_site/css/screen.css +0 -15
data/lib/henshin/post.rb CHANGED
@@ -10,6 +10,9 @@ module Henshin
10
10
  @config = site.config
11
11
  @extension = path.extension
12
12
  @layout = site.layouts[ site.config[:layout] ]
13
+ @author = @config[:author]
14
+ @tags = []
15
+ @date = Time.now
13
16
  end
14
17
 
15
18
 
@@ -45,9 +48,9 @@ module Henshin
45
48
  file_data.each_with_index do |data, i|
46
49
  if data_order[i].include? 'title'
47
50
  if data_order[i].include? 'dashes'
48
- override[:title] = data.gsub(/-/, ' ')
51
+ override[:title] = data.gsub(/-/, ' ').titlize
49
52
  else
50
- override[:title] = data
53
+ override[:title] = data.titlize
51
54
  end
52
55
  elsif data_order[i].include? 'date'
53
56
  override[:date] = data
@@ -75,13 +78,19 @@ module Henshin
75
78
  #
76
79
  # @param [Hash] override data to override settings with
77
80
  def override( override )
78
- @title ||= override[:title]
79
- @layout ||= @site.layouts[ override[:layout] ]
80
- @date ||= Time.parse( override[:date] ) unless override[:date].nil?
81
- @tags ||= override[:tags]
82
- @category ||= override[:category]
83
- @author ||= override[:author]
84
- @extension ||= override[:extension]
81
+ @title = override[:title] if override[:title]
82
+ @layout = @site.layouts[ override[:layout] ] if override[:layout]
83
+ @date = Time.parse( override[:date] ) if override[:date]
84
+ @tags = override[:tags].split(', ') if override[:tags]
85
+ @category = override[:category] if override[:category]
86
+ @author = override[:author] if override[:author]
87
+ @extension = override[:extension] if override[:extension]
88
+ @category = override[:category] if override[:category]
89
+
90
+ if override[:tags]
91
+ @tags << override[:tags].split(', ')
92
+ @tags.flatten!
93
+ end
85
94
  end
86
95
 
87
96
 
@@ -92,14 +101,25 @@ module Henshin
92
101
  {
93
102
  'yield' => @content,
94
103
  'site' => @site.payload['site'],
95
- 'post' => {'title' => @title,
96
- 'author' => @author,
97
- 'date' => @date,
98
- 'tags' => @tags,
99
- 'category' => @category}
104
+ 'post' => self.to_hash
100
105
  }
101
106
  end
102
107
 
108
+ # Turns all of the post data into a hash
109
+ #
110
+ # @return [Hash]
111
+ def to_hash
112
+ {
113
+ 'title' => @title,
114
+ 'author' => @author,
115
+ 'url' => self.permalink,
116
+ 'date' => @date,
117
+ 'category' => @category,
118
+ 'tags' => @tags,
119
+ 'content' => @content
120
+ }
121
+ end
122
+
103
123
 
104
124
  ##
105
125
  # Writes the file to the correct place
@@ -122,6 +142,10 @@ module Henshin
122
142
  end
123
143
  end
124
144
 
145
+ def inspect
146
+ "#<Post:#{@path}>"
147
+ end
148
+
125
149
  end
126
150
 
127
151
  end
data/lib/henshin/site.rb CHANGED
@@ -2,7 +2,7 @@ module Henshin
2
2
 
3
3
  class Site
4
4
 
5
- attr_accessor :posts, :gens, :statics, :archives, :tags, :categories, :plugins
5
+ attr_accessor :posts, :gens, :statics, :archive, :tags, :categories, :plugins
6
6
  attr_accessor :layouts, :config
7
7
 
8
8
  def initialize( config )
@@ -15,9 +15,9 @@ module Henshin
15
15
  @posts = []
16
16
  @gens = []
17
17
  @statics = []
18
- @archives = {}
19
- @tags = {}
20
- @categories = {}
18
+ @archive = {}
19
+ @tags = Hash.new { |h, k| h[k] = Tag.new(k) }
20
+ @categories = Hash.new { |h, k| h[k] = Category.new(k) }
21
21
  @layouts = {}
22
22
  end
23
23
 
@@ -44,7 +44,6 @@ module Henshin
44
44
  def read_posts
45
45
  path = File.join(config[:root], 'posts')
46
46
  Dir.glob(path + '/*.*').each do |post|
47
- # should really create a new post object but I haven't made one yet
48
47
  @posts << Post.new(post, self)
49
48
  end
50
49
  end
@@ -53,25 +52,28 @@ module Henshin
53
52
  def read_others
54
53
  path = File.join(config[:root], '**', '*.*')
55
54
  items = Dir.glob(path)
56
- items = items.select {|i| !i.include?(config[:root] + '/_site')}
57
55
 
58
- items -= ["#{config[:root]}/options.yaml"]
56
+ ['/_site', '/plugins'].each do |r|
57
+ items = items.select {|i| !i.include?( File.join(config[:root], r) )}
58
+ end
59
+
60
+ ignored = ['/options.yaml'] + config[:exclude]
61
+ ignored.each do |r|
62
+ items -= [File.join(config[:root], r)]
63
+ items -= items.select {|i| i.include?( File.join(config[:root], r) )}
64
+ end
65
+
59
66
  items -= @posts.collect {|i| i.path}
60
67
  items -= @layouts.collect {|k, v| v}
61
68
 
62
69
  gens = items.select {|i| config[:extensions].include?(i.extension) }
63
- gens = gens.select do |i|
64
- if i.extension == "html"
65
- File.open(i, "r").read(3) == "---"
66
- else
67
- true
68
- end
69
- end
70
-
70
+ gens += items.select {|i| File.open(i, "r").read(3) == "---" }
71
+
71
72
  gens.each do |g|
72
73
  @gens << Gen.new(g, self)
73
74
  end
74
75
 
76
+
75
77
  static = items - @gens.collect {|i| i.path}
76
78
  static.each do |s|
77
79
  @statics << Static.new(s, self)
@@ -82,36 +84,73 @@ module Henshin
82
84
  ##
83
85
  # Processes all of the necessary files
84
86
  def process
85
- @posts.each {|p| p.process}
86
- @gens.each {|g| g.process}
87
+ @posts.each_parallel {|p| p.process}
88
+ @gens.each_parallel {|g| g.process}
89
+
90
+ self.build_tags
91
+ self.build_categories
92
+ self.build_archive
87
93
  end
88
94
 
89
- # Creates the data to be sent to the layout engine
90
- #
91
95
  # @return [Hash] the payload for the layout engine
92
96
  def payload
93
- {'site' => {'author' => self.config[:author],
94
- 'title' => self.config[:title],
95
- 'description' => self.config[:description],
96
- 'time_zone' => self.config[:time_zone],
97
- 'created_at' => Time.now} }
97
+ {
98
+ 'site' => {
99
+ 'author' => @config[:author],
100
+ 'title' => @config[:title],
101
+ 'description' => @config[:description],
102
+ 'time_zone' => @config[:time_zone],
103
+ 'created_at' => Time.now,
104
+ 'posts' => @posts.collect {|i| i.to_hash},
105
+ 'tags' => @tags.collect {|k, t| t.to_hash},
106
+ 'categories' => @categories.collect {|k, t| t.to_hash},
107
+ 'archive' => @archive
108
+ }
109
+ }
110
+ end
111
+
112
+ # Creates tags from posts and adds them to @tags
113
+ def build_tags
114
+ @posts.each do |p|
115
+ p.tags.each do |t|
116
+ @tags[t].posts << p
117
+ end
118
+ end
98
119
  end
99
120
 
121
+ # Create categories from posts and add to @categories
122
+ def build_categories
123
+ @posts.each do |p|
124
+ @categories[p.category].posts << p unless p.category.nil?
125
+ end
126
+ end
127
+
128
+ # @return [Hash] archive hash
129
+ def build_archive
130
+ {
131
+ '2010' => {
132
+ '01' => [
133
+ {'post' => 'hash'},
134
+ {'post' => 'hash'}
135
+ ]
136
+ }
137
+ }
138
+ end
100
139
 
101
140
  ##
102
141
  # Renders the files
103
142
  def render
104
- @posts.each {|p| p.render}
105
- @gens.each {|g| g.render}
143
+ @posts.each_parallel {|p| p.render}
144
+ @gens.each_parallel {|g| g.render}
106
145
  end
107
146
 
108
147
 
109
148
  ##
110
149
  # Writes the files
111
150
  def write
112
- @posts.each {|p| p.write}
113
- @gens.each {|g| g.write}
114
- @statics.each {|s| s.write}
151
+ @posts.each_parallel {|p| p.write}
152
+ @gens.each_parallel {|g| g.write}
153
+ @statics.each_parallel {|s| s.write}
115
154
  end
116
155
 
117
156
  end
@@ -0,0 +1,19 @@
1
+ module Henshin
2
+ class Tag
3
+
4
+ attr_accessor :name, :posts
5
+
6
+ def initialize( name )
7
+ @name = name
8
+ @posts = []
9
+ end
10
+
11
+ def to_hash
12
+ hash = {
13
+ 'name' => @name,
14
+ 'posts' => @posts.collect {|i| i.to_hash}
15
+ }
16
+ end
17
+
18
+ end
19
+ end
@@ -2,23 +2,31 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
- <title></title>
5
+ <title>Testing Stuff</title>
6
6
  <link rel="stylesheet" href="" type="text/css" />
7
7
  </head>
8
8
  <body>
9
9
 
10
10
  <header>
11
- <h1>Testing Stuff</h1>
11
+ <h1>Testing Stuff</h1><span>in test</span>
12
12
  <time>2010-10-20 17:33:23 +0100</time>
13
+
13
14
  <ul>
14
- <li>tags</li>
15
- <li>should</li>
16
- <li>be loopable</li>
15
+
16
+ <li>test</li>
17
+
18
+ <li>nolorem</li>
19
+
20
+ <li>test</li>
21
+
22
+ <li>nolorem</li>
23
+
17
24
  </ul>
25
+
18
26
  </header>
19
27
 
20
28
  <p>So Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
21
29
 
22
- <span>Copyright &copy; </span>
30
+ <span>Copyright &copy; Joshua Hawxwell</span>
23
31
  </body>
24
32
  </html>
@@ -2,23 +2,31 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
- <title></title>
5
+ <title>Lorem Ipsum</title>
6
6
  <link rel="stylesheet" href="" type="text/css" />
7
7
  </head>
8
8
  <body>
9
9
 
10
10
  <header>
11
- <h1>lorem ipsum</h1>
11
+ <h1>Lorem Ipsum</h1><span>in </span>
12
12
  <time>2010-05-15 13:23:47 +0100</time>
13
+
13
14
  <ul>
14
- <li>tags</li>
15
- <li>should</li>
16
- <li>be loopable</li>
15
+
16
+ <li>test</li>
17
+
18
+ <li>lorem</li>
19
+
20
+ <li>test</li>
21
+
22
+ <li>lorem</li>
23
+
17
24
  </ul>
25
+
18
26
  </header>
19
27
 
20
28
  <p>So Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
21
29
 
22
- <span>Copyright &copy; </span>
30
+ <span>Copyright &copy; Joshua Hawxwell</span>
23
31
  </body>
24
32
  </html>
@@ -1,33 +1,19 @@
1
- body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {
2
- margin: 0;
3
- padding: 0; }
1
+ body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td { margin: 0; padding: 0; }
4
2
 
5
- table {
6
- border-collapse: collapse;
7
- border-spacing: 0; }
3
+ table { border-collapse: collapse; border-spacing: 0; }
8
4
 
9
- fieldset, img {
10
- border: 0; }
5
+ fieldset, img { border: 0; }
11
6
 
12
- address, caption, cite, code, dfn, em, strong, th, var {
13
- font-style: normal;
14
- font-weight: normal; }
7
+ address, caption, cite, code, dfn, em, strong, th, var { font-style: normal; font-weight: normal; }
15
8
 
16
- ol, ul {
17
- list-style: none; }
9
+ ol, ul { list-style: none; }
18
10
 
19
- caption, th {
20
- text-align: left; }
11
+ caption, th { text-align: left; }
21
12
 
22
- h1, h2, h3, h4, h5, h6 {
23
- font-size: 100%;
24
- font-weight: normal; }
13
+ h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; }
25
14
 
26
- q:before, q:after {
27
- content: ”; }
15
+ q:before, q:after { content: ”; }
28
16
 
29
- abbr, acronym {
30
- border: 0; }
17
+ abbr, acronym { border: 0; }
31
18
 
32
- h1 {
33
- font-size: 2em; }
19
+ h1 { font-size: 2em; }
@@ -1,5 +1,86 @@
1
- <header>
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Test Site</title>
6
+ <link rel="stylesheet" href="screen.css" type="text/css" />
7
+ </head>
8
+ <body>
9
+
10
+ <header>
2
11
  <h1>Joshua Hawxwell</h1>
3
12
  </header>
4
13
 
5
14
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
15
+
16
+
17
+
18
+
19
+
20
+ <h2>A List of Posts</h2>
21
+ <ul>
22
+
23
+ <li><a href="/2010/5/15-lorem-ipsum/index.html">Lorem Ipsum</a> - 2010-05-15 13:23:47 +0100</li>
24
+
25
+ <li><a href="/2010/10/20-testing-stuff/index.html">Testing Stuff</a> - 2010-10-20 17:33:23 +0100</li>
26
+
27
+ </ul>
28
+
29
+ <h2>A List of Tags</h2>
30
+ <ul>
31
+
32
+ <li>
33
+ test
34
+ <ul>
35
+
36
+ <li>Lorem Ipsum - 2010-05-15 13:23:47 +0100</li>
37
+
38
+ <li>Lorem Ipsum - 2010-05-15 13:23:47 +0100</li>
39
+
40
+ <li>Testing Stuff - 2010-10-20 17:33:23 +0100</li>
41
+
42
+ <li>Testing Stuff - 2010-10-20 17:33:23 +0100</li>
43
+
44
+ </ul>
45
+ </li>
46
+
47
+ <li>
48
+ lorem
49
+ <ul>
50
+
51
+ <li>Lorem Ipsum - 2010-05-15 13:23:47 +0100</li>
52
+
53
+ <li>Lorem Ipsum - 2010-05-15 13:23:47 +0100</li>
54
+
55
+ </ul>
56
+ </li>
57
+
58
+ <li>
59
+ nolorem
60
+ <ul>
61
+
62
+ <li>Testing Stuff - 2010-10-20 17:33:23 +0100</li>
63
+
64
+ <li>Testing Stuff - 2010-10-20 17:33:23 +0100</li>
65
+
66
+ </ul>
67
+ </li>
68
+
69
+ </ul>
70
+
71
+ <h2>A List of Categories</h2>
72
+ <ul>
73
+
74
+ <li>test</li>
75
+ <ul>
76
+
77
+ <li>Testing Stuff - 2010-10-20 17:33:23 +0100</li>
78
+
79
+ </ul>
80
+
81
+ </ul>
82
+
83
+
84
+ <span>Copyright &copy; Joshua Hawxwell</span>
85
+ </body>
86
+ </html>