zenweb 2.18.1 → 3.0.0.b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.autotest +18 -0
  3. data/.gemtest +0 -0
  4. data/History.txt +6 -0
  5. data/Manifest.txt +52 -50
  6. data/README.txt +27 -22
  7. data/Rakefile +8 -9
  8. data/example-site/.isolate.rb +8 -0
  9. data/example-site/Rakefile +32 -0
  10. data/example-site/_config.yml +3 -0
  11. data/example-site/_includes/analytics.html.erb +11 -0
  12. data/example-site/_includes/header.html.erb +3 -0
  13. data/example-site/_includes/page_list_item.html +5 -0
  14. data/example-site/_includes/post_list_item.html +5 -0
  15. data/example-site/_layouts/post.erb +13 -0
  16. data/example-site/_layouts/project.erb +39 -0
  17. data/example-site/_layouts/site.erb +62 -0
  18. data/example-site/about/index.html.md +8 -0
  19. data/example-site/atom.xml.erb +43 -0
  20. data/example-site/blog/2012-01-02-page1.html.md +5 -0
  21. data/example-site/blog/2012-01-03-page2.html.md +5 -0
  22. data/example-site/blog/2012-01-04-page3.html.md +5 -0
  23. data/example-site/blog/_config.yml +1 -0
  24. data/example-site/blog/index.html.erb +19 -0
  25. data/example-site/config.ru +33 -0
  26. data/example-site/css/colors.css.less +71 -0
  27. data/example-site/css/styles.css +223 -0
  28. data/example-site/css/syntax.css +171 -0
  29. data/example-site/img/bg.png +0 -0
  30. data/example-site/index.html.erb +27 -0
  31. data/example-site/js/jquery.js +154 -0
  32. data/example-site/js/site.js +37 -0
  33. data/example-site/pages/index.html.erb +17 -0
  34. data/example-site/pages/nonblogpage.html.md +8 -0
  35. data/example-site/projects/index.html.erb +18 -0
  36. data/example-site/projects/zenweb.html.erb +9 -0
  37. data/example-site/sitemap.xml.erb +24 -0
  38. data/lib/zenweb.rb +12 -0
  39. data/lib/zenweb/config.rb +126 -0
  40. data/lib/zenweb/extensions.rb +51 -0
  41. data/lib/zenweb/page.rb +409 -0
  42. data/lib/zenweb/plugins/disqus.rb +18 -0
  43. data/lib/zenweb/plugins/erb.rb +43 -0
  44. data/lib/zenweb/plugins/google.rb +20 -0
  45. data/lib/zenweb/plugins/less.rb +10 -0
  46. data/lib/zenweb/plugins/markdown.rb +121 -0
  47. data/lib/zenweb/site.rb +237 -0
  48. data/lib/zenweb/tasks.rake +165 -0
  49. data/test/helper.rb +53 -0
  50. data/test/test_zenweb_config.rb +90 -0
  51. data/test/test_zenweb_extensions.rb +33 -0
  52. data/test/test_zenweb_page.rb +381 -0
  53. data/test/test_zenweb_plugins_disqus.rb +41 -0
  54. data/test/test_zenweb_plugins_erb.rb +60 -0
  55. data/test/test_zenweb_plugins_google.rb +38 -0
  56. data/test/test_zenweb_plugins_less.rb +33 -0
  57. data/test/test_zenweb_plugins_markdown.rb +227 -0
  58. data/test/test_zenweb_site.rb +294 -0
  59. metadata +230 -86
  60. metadata.gz.sig +0 -0
  61. data/bin/zenweb +0 -27
  62. data/bin/zenwebpage +0 -66
  63. data/bin/zenwebsite +0 -39
  64. data/design/REQUIREMENTS.txt +0 -52
  65. data/design/ZENWEB_2.txt +0 -69
  66. data/design/heirarchy.png +0 -0
  67. data/design/heirarchy.tgif +0 -311
  68. data/docs/Customizing +0 -76
  69. data/docs/FAQ +0 -12
  70. data/docs/Features +0 -128
  71. data/docs/Presentation +0 -88
  72. data/docs/QuickStart +0 -32
  73. data/docs/Renderers +0 -85
  74. data/docs/SiteMap +0 -13
  75. data/docs/YourOwnWebsite +0 -32
  76. data/docs/index +0 -14
  77. data/docs/metadata.txt +0 -10
  78. data/lib/ZenWeb.rb +0 -850
  79. data/lib/ZenWeb/CalendarRenderer.rb +0 -162
  80. data/lib/ZenWeb/CompactRenderer.rb +0 -45
  81. data/lib/ZenWeb/CompositeRenderer.rb +0 -63
  82. data/lib/ZenWeb/FileAttachmentRenderer.rb +0 -57
  83. data/lib/ZenWeb/FooterRenderer.rb +0 -38
  84. data/lib/ZenWeb/GenericRenderer.rb +0 -143
  85. data/lib/ZenWeb/HeaderRenderer.rb +0 -52
  86. data/lib/ZenWeb/HtmlRenderer.rb +0 -81
  87. data/lib/ZenWeb/HtmlTableRenderer.rb +0 -94
  88. data/lib/ZenWeb/HtmlTemplateRenderer.rb +0 -173
  89. data/lib/ZenWeb/MetadataRenderer.rb +0 -83
  90. data/lib/ZenWeb/RelativeRenderer.rb +0 -97
  91. data/lib/ZenWeb/RubyCodeRenderer.rb +0 -56
  92. data/lib/ZenWeb/SitemapRenderer.rb +0 -56
  93. data/lib/ZenWeb/StandardRenderer.rb +0 -40
  94. data/lib/ZenWeb/StupidRenderer.rb +0 -91
  95. data/lib/ZenWeb/SubpageRenderer.rb +0 -45
  96. data/lib/ZenWeb/TextToHtmlRenderer.rb +0 -219
  97. data/lib/ZenWeb/TocRenderer.rb +0 -60
  98. data/lib/ZenWeb/XXXRenderer.rb +0 -32
  99. data/test/SiteMap +0 -14
  100. data/test/Something +0 -4
  101. data/test/include.txt +0 -3
  102. data/test/index +0 -8
  103. data/test/metadata.txt +0 -10
  104. data/test/ryand/SiteMap +0 -10
  105. data/test/ryand/blah +0 -4
  106. data/test/ryand/blah-blah +0 -4
  107. data/test/ryand/index +0 -52
  108. data/test/ryand/metadata.txt +0 -2
  109. data/test/ryand/stuff/index +0 -4
  110. data/test/test_zenweb.rb +0 -1619
data.tar.gz.sig CHANGED
Binary file
data/.autotest ADDED
@@ -0,0 +1,18 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'autotest/restart'
4
+ require 'autotest/isolate'
5
+ require 'autotest/rcov' if ENV['RCOV']
6
+
7
+ Autotest.add_hook :initialize do |at|
8
+ at.testlib = "minitest/autorun"
9
+
10
+ at.add_exception /isolate/
11
+
12
+ at.extra_class_map["Zenweb::Site"] = "lib/zenweb/site.rb"
13
+ at.extra_class_map["Zenweb::Page"] = "lib/zenweb/page.rb"
14
+ at.extra_class_map["Zenweb::Config"] = "lib/zenweb/config.rb"
15
+ at.extra_class_map["TestZenwebPageErb"] = "test/test_zenweb_plugins_erb.rb"
16
+ at.extra_class_map["TestZenwebPageMarkdown"] = "test/test_zenweb_plugins_markdown.rb"
17
+ at.extra_class_map["TestZenwebPageLess"] = "test/test_zenweb_plugins_less.rb"
18
+ end
data/.gemtest ADDED
File without changes
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ === 3.0.0.b1 / 2012-05-25
2
+
3
+ * 1 major enhancement:
4
+
5
+ * Complete Rewrite! Not backwards compatible at all! Clean! Pretty! Woot!
6
+
1
7
  === 2.18.1 / 2009-06-23
2
8
 
3
9
  * 1 minor enhancement:
data/Manifest.txt CHANGED
@@ -1,54 +1,56 @@
1
+ .autotest
1
2
  History.txt
2
3
  Manifest.txt
3
4
  README.txt
4
5
  Rakefile
5
- bin/zenweb
6
- bin/zenwebpage
7
- bin/zenwebsite
8
- design/REQUIREMENTS.txt
9
- design/ZENWEB_2.txt
10
- design/heirarchy.png
11
- design/heirarchy.tgif
12
- docs/Customizing
13
- docs/FAQ
14
- docs/Features
15
- docs/Presentation
16
- docs/QuickStart
17
- docs/Renderers
18
- docs/SiteMap
19
- docs/YourOwnWebsite
20
- docs/index
21
- docs/metadata.txt
22
- lib/ZenWeb.rb
23
- lib/ZenWeb/CalendarRenderer.rb
24
- lib/ZenWeb/CompactRenderer.rb
25
- lib/ZenWeb/CompositeRenderer.rb
26
- lib/ZenWeb/FileAttachmentRenderer.rb
27
- lib/ZenWeb/FooterRenderer.rb
28
- lib/ZenWeb/GenericRenderer.rb
29
- lib/ZenWeb/HeaderRenderer.rb
30
- lib/ZenWeb/HtmlRenderer.rb
31
- lib/ZenWeb/HtmlTableRenderer.rb
32
- lib/ZenWeb/HtmlTemplateRenderer.rb
33
- lib/ZenWeb/MetadataRenderer.rb
34
- lib/ZenWeb/RelativeRenderer.rb
35
- lib/ZenWeb/RubyCodeRenderer.rb
36
- lib/ZenWeb/SitemapRenderer.rb
37
- lib/ZenWeb/StandardRenderer.rb
38
- lib/ZenWeb/StupidRenderer.rb
39
- lib/ZenWeb/SubpageRenderer.rb
40
- lib/ZenWeb/TextToHtmlRenderer.rb
41
- lib/ZenWeb/TocRenderer.rb
42
- lib/ZenWeb/XXXRenderer.rb
43
- test/SiteMap
44
- test/Something
45
- test/include.txt
46
- test/index
47
- test/metadata.txt
48
- test/ryand/SiteMap
49
- test/ryand/blah
50
- test/ryand/blah-blah
51
- test/ryand/index
52
- test/ryand/metadata.txt
53
- test/ryand/stuff/index
54
- test/test_zenweb.rb
6
+ example-site/.isolate.rb
7
+ example-site/Rakefile
8
+ example-site/_config.yml
9
+ example-site/_includes/analytics.html.erb
10
+ example-site/_includes/header.html.erb
11
+ example-site/_includes/page_list_item.html
12
+ example-site/_includes/post_list_item.html
13
+ example-site/_layouts/post.erb
14
+ example-site/_layouts/project.erb
15
+ example-site/_layouts/site.erb
16
+ example-site/about/index.html.md
17
+ example-site/atom.xml.erb
18
+ example-site/blog/2012-01-02-page1.html.md
19
+ example-site/blog/2012-01-03-page2.html.md
20
+ example-site/blog/2012-01-04-page3.html.md
21
+ example-site/blog/_config.yml
22
+ example-site/blog/index.html.erb
23
+ example-site/config.ru
24
+ example-site/css/colors.css.less
25
+ example-site/css/styles.css
26
+ example-site/css/syntax.css
27
+ example-site/img/bg.png
28
+ example-site/index.html.erb
29
+ example-site/js/jquery.js
30
+ example-site/js/site.js
31
+ example-site/pages/index.html.erb
32
+ example-site/pages/nonblogpage.html.md
33
+ example-site/projects/index.html.erb
34
+ example-site/projects/zenweb.html.erb
35
+ example-site/sitemap.xml.erb
36
+ lib/zenweb.rb
37
+ lib/zenweb/config.rb
38
+ lib/zenweb/extensions.rb
39
+ lib/zenweb/page.rb
40
+ lib/zenweb/plugins/disqus.rb
41
+ lib/zenweb/plugins/erb.rb
42
+ lib/zenweb/plugins/google.rb
43
+ lib/zenweb/plugins/less.rb
44
+ lib/zenweb/plugins/markdown.rb
45
+ lib/zenweb/site.rb
46
+ lib/zenweb/tasks.rake
47
+ test/helper.rb
48
+ test/test_zenweb_config.rb
49
+ test/test_zenweb_extensions.rb
50
+ test/test_zenweb_page.rb
51
+ test/test_zenweb_plugins_disqus.rb
52
+ test/test_zenweb_plugins_erb.rb
53
+ test/test_zenweb_plugins_google.rb
54
+ test/test_zenweb_plugins_less.rb
55
+ test/test_zenweb_plugins_markdown.rb
56
+ test/test_zenweb_site.rb
data/README.txt CHANGED
@@ -1,47 +1,52 @@
1
1
  = ZenWeb
2
2
 
3
- * http://rubyforge.org/projects/zenweb/
3
+ * https://github.com/seattlerb/zenweb/
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- ZenWeb is a set of classes/tools for organizing and formating a
7
+ Zenweb is a set of classes/tools for organizing and formating a
8
8
  website. It is website oriented rather than webpage oriented, unlike
9
9
  most rendering tools. It is content oriented, rather than style
10
- oriented, unlike most rendering tools. It provides a plugin system of
11
- renderers and filters to provide a very flexible, and powerful system.
10
+ oriented, unlike most rendering tools. It uses a rubygems plugin
11
+ system to provide a very flexible, and powerful system.
12
12
 
13
- Documentation is available in the docs directory, and can be generated
14
- into html (in docshtml) simply by running make. See QuickStart and
15
- YourOwnWebsite for setup and starting to build a website.
16
-
17
- (EXPERIMENTAL) If you are running apache, you might try 'make apache'
18
- which will run a private version of apache that points to the
19
- generated documenation. Point your browser to port 8080 of localhost
20
- or whatever machine you are running on.
13
+ Zenweb 3 was inspired by jekyll. The filesystem layout is similar to
14
+ jekyll's layout, but zenweb isn't focused on blogs. It can do any sort
15
+ of website just fine.
16
+
17
+ Zenweb uses rake to handle dependencies. As a result, scanning a
18
+ website and regenerating incrementally is not just possible, it is
19
+ blazingly fast.
21
20
 
22
21
  == FEATURES:
23
22
 
24
- * SiteMap oriented for a comprehensive website.
25
- * Generic architecture w/ a set of plugins to extend any page or directory.
26
- * Incremental page builds for very fast generation.
27
- * Simple text-to-html markup makes creating large websites easy.
28
- * ZenTest 1.0 compliant. http://sf.net/projects/zentest/
29
- * Much much more... I should probably add that here, huh?
23
+ * Uses rake to do intelligent incremental builds.
24
+ * Uses rubygems to provide a flexible plugin system.
25
+ * Provides plugins for less, markdown, and erb out of the box.
26
+ * Uses a hierarchical config/variable system making pages cleaner.
27
+ * Has syntax highlighting via coderay.
28
+ * Blazingly fast.
29
+ * Stupidly flexible.
30
+ * TODO: provide more templates via gem extensions.
31
+ * TODO: provide more migrators via gem extensions.
30
32
 
31
33
  == REQUIREMENTS:
32
34
 
33
- * Ruby - 1.6.5-7 and 1.7.2 have been tested.
34
- * Test::Unit testing framework via RAA on http://www.ruby-lang.org/.
35
+ * rubygems
36
+ * rake
37
+ * kramdown
38
+ * coderay
39
+ * rb-fsevent
35
40
 
36
41
  == INSTALL:
37
42
 
38
- * make test && sudo make install
43
+ * gem install zenweb
39
44
 
40
45
  == LICENSE:
41
46
 
42
47
  (The MIT License)
43
48
 
44
- Copyright (c) 2001-2009 Ryan Davis, Zen Spider Software
49
+ Copyright (c) Ryan Davis, Seattle.rb
45
50
 
46
51
  Permission is hereby granted, free of charge, to any person obtaining
47
52
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -4,19 +4,18 @@ require 'rubygems'
4
4
  require 'hoe'
5
5
 
6
6
  Hoe.plugin :seattlerb
7
+ Hoe.plugin :isolate
8
+ Hoe.plugin :rcov
7
9
 
8
10
  Hoe.spec 'zenweb' do
9
11
  developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
10
12
 
11
- clean_globs.push(*"testhtml docshtml httpd.conf httpd.pid *.log".split)
13
+ dependency "rake", "~> 0.9", :development
14
+ dependency "makerakeworkwell", "~> 1.0", :development
15
+ dependency "less", "~> 1.2"
16
+ dependency "coderay", "~> 1.0"
17
+ dependency "kramdown", "~> 0.13"
18
+ dependency "rcov", "~> 0.9", :development
12
19
  end
13
20
 
14
- task :docs do
15
- ruby "-w -Ilib bin/zenweb docs"
16
- end
17
-
18
- # TODO:
19
- # apache: docs
20
- # grep -v CustomLog $$(httpd -V | grep SERVER_CONFIG_FILE | cut -f 2 -d= | cut -f 2 -d\") > httpd.conf; httpd -X -d $$PWD/docshtml -f $$PWD/httpd.conf -c "PidFile $$PWD/httpd.pid" -c "Port 8080" -c "ErrorLog $$PWD/error.log" -c "TransferLog $$PWD/access.log" -c "DocumentRoot $$PWD/docshtml"
21
-
22
21
  # vim: syntax=ruby
@@ -0,0 +1,8 @@
1
+ require "isolate"
2
+
3
+ Isolate.now! :path => ".isolate", :system => false do
4
+ gem 'rake', '~> 0.9'
5
+ gem 'less', '~> 1.2'
6
+ gem 'coderay', '~> 1.0'
7
+ gem 'kramdown', '~> 0.13'
8
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require "rubygems"
4
+
5
+ load ".isolate.rb"
6
+
7
+ $: << "../lib"
8
+
9
+ Rake.application.options.rakelib << "../lib/zenweb"
10
+
11
+ def extra_wirings
12
+ site = $website
13
+ pages = site.pages
14
+ html = site.pages.reject { |k,p| p.url_path !~ /\.html/ }
15
+ cats = site.categories
16
+
17
+ pages["sitemap.xml.erb"]. depends_on html
18
+ pages["atom.xml.erb"]. depends_on site.pages_by_date.first(30)
19
+ pages["index.html.erb"]. depends_on html
20
+
21
+ pages["blog/index.html.erb"]. depends_on cats.blog
22
+ pages["projects/index.html.erb"]. depends_on cats.projects
23
+ pages["pages/index.html.erb"]. depends_on cats.pages
24
+ end
25
+
26
+ task :extra_wirings do
27
+ extra_wirings
28
+ end
29
+
30
+ task :push do
31
+ sh "rsync -rv --del .site/ /Library/WebServer/Documents/"
32
+ end
@@ -0,0 +1,3 @@
1
+ exclude: ["Rakefile", "tmp"]
2
+ google_ua: UA-1234567-8
3
+ header: Example Website
@@ -0,0 +1,11 @@
1
+ <script type="text/javascript">
2
+ var _gaq = _gaq || [];
3
+ _gaq.push(['_setAccount', '{{ site.google_ua }}']);
4
+ _gaq.push(['_trackPageview']);
5
+
6
+ (function() {
7
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
8
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
9
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
10
+ })();
11
+ </script>
@@ -0,0 +1,3 @@
1
+ <h1 id="header">
2
+ <a href="/">{{ page.title }} ~ {{ page.header }}</a>
3
+ </h1>
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <h2><a href="{{ page.url }}">{{ page.title }}</a></h2>
3
+ <h3 class="date">{{ page.date | date_to_s }}</h3>
4
+ {% if page.summary %} <p>{{ page.summary }}</p> {% endif %}
5
+ </li>
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
3
+ <h3 class="date">{{ post.date | date_to_s }}</h3>
4
+ {% if post.summary %} <p>{{ post.summary }}</p> {% endif %}
5
+ </li>
@@ -0,0 +1,13 @@
1
+ ---
2
+ layout: site
3
+ header: example.com blog
4
+ ...
5
+
6
+ <div class="post">
7
+ <h1 class="title">{{ page.title }}</h1>
8
+ <h3 class="date">{{ page.date.datetime }}</h3>
9
+
10
+ {{ content }}
11
+
12
+ <a href="/">&laquo; go back</a>
13
+ </div>
@@ -0,0 +1,39 @@
1
+ ---
2
+ layout: site
3
+ header: example.com projects
4
+ ...
5
+
6
+ <div class="project">
7
+ <h1 class="title">{{ page.title }}</h1>
8
+ <h2 class="subtitle">{{ page.subtitle }}</h2>
9
+
10
+ {{ content }}
11
+
12
+ <!-- get the code -->
13
+ <h1 class="section">Get The Code</h1>
14
+ {% if page.gem %}
15
+ If you just want to use {{ page.title }}, you can install it via RubyGems:
16
+ <pre>gem install {{ page.gem }}</pre>
17
+ {% end %}
18
+
19
+ {% if page.github %}
20
+ <a href="http://github.com/{{ page.github }}">
21
+ <img style="position: absolute; top: 80px; right: 0; border: 0;"
22
+ src="http://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
23
+ alt="Fork me on GitHub"
24
+ />
25
+ </a>
26
+
27
+ If you want to hack on {{ page.title }}, clone it from GitHub:
28
+ <pre>git clone git://github.com/{{ page.github }}</pre>
29
+
30
+ <!-- Recent Activity -->
31
+ <h1 class="section">Recent Activity</h1>
32
+ <ul id="recent_activity" class="activity">
33
+ <h3>Loading...</h3>
34
+ </ul>
35
+ <script type="text/javascript">
36
+ fetch_recent_github_activity( "{{ page.github }}" );
37
+ </script>
38
+ {% end %}
39
+ </div>
@@ -0,0 +1,62 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
5
+ <head>
6
+ <title>
7
+ {% if page.title %} {{ page.title }} | {% end %} {{ page.header }}
8
+ </title>
9
+
10
+ <!-- atom feed -->
11
+ <link href="http://blog.example.com/atom.xml" rel="alternate" title="{{ page.title }}" type="application/atom+xml" />
12
+
13
+ <!-- stylesheets -->
14
+ <link rel="stylesheet" href="/css/styles.css" type="text/css" />
15
+ <link rel="stylesheet" href="/css/syntax.css" type="text/css" />
16
+
17
+ <!-- site javascript -->
18
+ <script type="text/javascript" src="/js/jquery.js"></script>
19
+ <script type="text/javascript" src="/js/site.js"></script>
20
+
21
+ <!-- typekit -->
22
+ <script type="text/javascript" src="http://use.typekit.com/sic1xhc.js"></script>
23
+ <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
24
+ </head>
25
+
26
+ <body>
27
+ {{ include "analytics.html.erb", page }}
28
+
29
+ <div id="header">
30
+ <h1><a href="/">{{ page.header }}</a></h1>
31
+
32
+ <ul>
33
+ <li><a href="/">home</a></li>
34
+ <li><a href="/posts">blog</a></li>
35
+ <li><a href="/projects">projects</a></li>
36
+ <li><a href="/releases">releases</a></li>
37
+ <li><a href="/pages">pages</a></li>
38
+ <li><a href="/about">about</a></li>
39
+ </ul>
40
+ </div>
41
+
42
+ <div id="container">
43
+ {{ content }}
44
+ </div>
45
+
46
+ <div id="footer">
47
+ <div id="contact">
48
+ John Doe<br />
49
+ john.doe@example.com<br />
50
+ </div>
51
+
52
+ <div id="presence">
53
+ <a href="http://blog.example.com">nerd blog</a><br />
54
+ <a href="http://github.com/seattlerb">github.com/seattlerb</a>
55
+ </div>
56
+
57
+ <div id="copyright">
58
+ All content &copy; John Doe
59
+ </div>
60
+ </div>
61
+ </body>
62
+ </html>