microformats2 1.0.2 → 2.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +5 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +117 -26
  8. data/Rakefile +65 -9
  9. data/lib/microformats2.rb +30 -115
  10. data/lib/microformats2/collection.rb +71 -0
  11. data/lib/microformats2/format.rb +101 -0
  12. data/lib/microformats2/format_parser.rb +59 -0
  13. data/lib/microformats2/implied_property/foundation.rb +58 -0
  14. data/lib/microformats2/implied_property/name.rb +34 -0
  15. data/lib/microformats2/implied_property/photo.rb +24 -0
  16. data/lib/microformats2/implied_property/url.rb +20 -0
  17. data/lib/microformats2/property.rb +10 -0
  18. data/lib/microformats2/property/date_time.rb +31 -0
  19. data/lib/microformats2/property/embedded.rb +9 -0
  20. data/lib/microformats2/property/foundation.rb +80 -0
  21. data/lib/microformats2/property/text.rb +16 -0
  22. data/lib/microformats2/property/url.rb +18 -0
  23. data/lib/microformats2/property_parser.rb +54 -0
  24. data/lib/microformats2/version.rb +3 -0
  25. data/microformats2.gemspec +30 -0
  26. data/spec/lib/microformats2/collection_spec.rb +181 -0
  27. data/spec/lib/microformats2/implied_property/name_spec.rb +31 -0
  28. data/spec/lib/microformats2/implied_property/photo_spec.rb +31 -0
  29. data/spec/lib/microformats2/implied_property/url_spec.rb +31 -0
  30. data/spec/lib/microformats2_spec.rb +30 -0
  31. data/spec/spec_helper.rb +10 -0
  32. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-0.html +3 -0
  33. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-0.js +10 -0
  34. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-1.html +10 -0
  35. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-1.js +16 -0
  36. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-2.html +12 -0
  37. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-2.js +16 -0
  38. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-3.html +6 -0
  39. data/spec/support/cases/microformat2-node.jit.su/h-adr/h-adr-3.js +12 -0
  40. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-0.html +3 -0
  41. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-0.js +10 -0
  42. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-1.html +3 -0
  43. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-1.js +11 -0
  44. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-2.html +4 -0
  45. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-2.js +12 -0
  46. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-3.html +11 -0
  47. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-3.js +15 -0
  48. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-4.html +6 -0
  49. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-4.js +26 -0
  50. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-5.html +6 -0
  51. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-5.js +30 -0
  52. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-6.html +6 -0
  53. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-6.js +29 -0
  54. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-7.html +16 -0
  55. data/spec/support/cases/microformat2-node.jit.su/h-card/h-card-7.js +15 -0
  56. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-0.html +4 -0
  57. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-0.js +10 -0
  58. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-1.html +3 -0
  59. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-1.js +11 -0
  60. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-2.html +21 -0
  61. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-2.js +28 -0
  62. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-3.html +22 -0
  63. data/spec/support/cases/microformat2-node.jit.su/h-entry/h-entry-3.js +21 -0
  64. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-0.html +3 -0
  65. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-0.js +10 -0
  66. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-1.html +3 -0
  67. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-1.js +11 -0
  68. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-2.html +14 -0
  69. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-2.js +57 -0
  70. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-3.html +15 -0
  71. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-3.js +35 -0
  72. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-4.html +9 -0
  73. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-4.js +12 -0
  74. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-5.html +45 -0
  75. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-5.js +22 -0
  76. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-6.html +51 -0
  77. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-6.js +21 -0
  78. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-7.html +22 -0
  79. data/spec/support/cases/microformat2-node.jit.su/h-event/h-event-7.js +20 -0
  80. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-0.html +5 -0
  81. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-0.js +10 -0
  82. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-1.html +7 -0
  83. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-1.js +12 -0
  84. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-2.html +10 -0
  85. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-2.js +13 -0
  86. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-3.html +12 -0
  87. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-3.js +12 -0
  88. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-4.html +12 -0
  89. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-4.js +12 -0
  90. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-5.html +6 -0
  91. data/spec/support/cases/microformat2-node.jit.su/h-geo/h-geo-5.js +12 -0
  92. data/spec/support/cases/microformat2-node.jit.su/h-news/h-news-0.html +26 -0
  93. data/spec/support/cases/microformat2-node.jit.su/h-news/h-news-0.js +37 -0
  94. data/spec/support/cases/microformat2-node.jit.su/h-news/h-news-1.html +37 -0
  95. data/spec/support/cases/microformat2-node.jit.su/h-news/h-news-1.js +48 -0
  96. data/spec/support/cases/microformat2-node.jit.su/h-org/h-org-0.html +3 -0
  97. data/spec/support/cases/microformat2-node.jit.su/h-org/h-org-0.js +10 -0
  98. data/spec/support/cases/microformat2-node.jit.su/h-org/h-org-1.html +3 -0
  99. data/spec/support/cases/microformat2-node.jit.su/h-org/h-org-1.js +11 -0
  100. data/spec/support/cases/microformat2-node.jit.su/h-org/h-org-2.html +6 -0
  101. data/spec/support/cases/microformat2-node.jit.su/h-org/h-org-2.js +12 -0
  102. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-0.html +3 -0
  103. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-0.js +10 -0
  104. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-1.html +3 -0
  105. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-1.js +11 -0
  106. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-2.html +11 -0
  107. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-2.js +23 -0
  108. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-3.html +22 -0
  109. data/spec/support/cases/microformat2-node.jit.su/h-product/h-product-3.js +42 -0
  110. data/spec/support/cases/microformat2-node.jit.su/h-recipe/h-recipe-0.html +9 -0
  111. data/spec/support/cases/microformat2-node.jit.su/h-recipe/h-recipe-0.js +11 -0
  112. data/spec/support/cases/microformat2-node.jit.su/h-recipe/h-recipe-1.html +67 -0
  113. data/spec/support/cases/microformat2-node.jit.su/h-recipe/h-recipe-1.js +51 -0
  114. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-0.html +3 -0
  115. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-0.js +10 -0
  116. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-1.html +20 -0
  117. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-1.js +39 -0
  118. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-2.html +17 -0
  119. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-2.js +54 -0
  120. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-3.html +15 -0
  121. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-3.js +54 -0
  122. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-4.html +15 -0
  123. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-4.js +12 -0
  124. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-5.html +13 -0
  125. data/spec/support/cases/microformat2-node.jit.su/h-resume/h-resume-5.js +27 -0
  126. data/spec/support/cases/microformat2-node.jit.su/h-review-aggregate/h-review-aggregate-0.html +10 -0
  127. data/spec/support/cases/microformat2-node.jit.su/h-review-aggregate/h-review-aggregate-0.js +19 -0
  128. data/spec/support/cases/microformat2-node.jit.su/h-review-aggregate/h-review-aggregate-1.html +20 -0
  129. data/spec/support/cases/microformat2-node.jit.su/h-review-aggregate/h-review-aggregate-1.js +26 -0
  130. data/spec/support/cases/microformat2-node.jit.su/h-review-aggregate/h-review-aggregate-2.html +15 -0
  131. data/spec/support/cases/microformat2-node.jit.su/h-review-aggregate/h-review-aggregate-2.js +23 -0
  132. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-0.html +3 -0
  133. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-0.js +10 -0
  134. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-1.html +3 -0
  135. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-1.js +11 -0
  136. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-2.html +3 -0
  137. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-2.js +11 -0
  138. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-3.html +6 -0
  139. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-3.js +19 -0
  140. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-4.html +8 -0
  141. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-4.js +20 -0
  142. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-5.html +24 -0
  143. data/spec/support/cases/microformat2-node.jit.su/h-review/h-review-5.js +37 -0
  144. data/spec/support/cases/microformat2-node.jit.su/includes/includes-0.html +18 -0
  145. data/spec/support/cases/microformat2-node.jit.su/includes/includes-0.js +43 -0
  146. data/spec/support/cases/microformat2-node.jit.su/includes/includes-1.html +26 -0
  147. data/spec/support/cases/microformat2-node.jit.su/includes/includes-1.js +54 -0
  148. data/spec/support/cases/microformat2-node.jit.su/includes/includes-2.html +13 -0
  149. data/spec/support/cases/microformat2-node.jit.su/includes/includes-2.js +20 -0
  150. data/spec/support/cases/microformat2-node.jit.su/includes/includes-3.html +20 -0
  151. data/spec/support/cases/microformat2-node.jit.su/includes/includes-3.js +40 -0
  152. data/spec/support/cases/microformat2-node.jit.su/includes/includes-4.html +23 -0
  153. data/spec/support/cases/microformat2-node.jit.su/includes/includes-4.js +42 -0
  154. data/spec/support/cases/microformat2-node.jit.su/rel/rel-0.html +3 -0
  155. data/spec/support/cases/microformat2-node.jit.su/rel/rel-0.js +10 -0
  156. data/spec/support/cases/microformat2-node.jit.su/rel/rel-1.html +3 -0
  157. data/spec/support/cases/microformat2-node.jit.su/rel/rel-1.js +10 -0
  158. data/spec/support/cases/microformat2-node.jit.su/rel/rel-2.html +12 -0
  159. data/spec/support/cases/microformat2-node.jit.su/rel/rel-2.js +19 -0
  160. data/spec/support/cases/microformat2-node.jit.su/rel/rel-3.html +21 -0
  161. data/spec/support/cases/microformat2-node.jit.su/rel/rel-3.js +26 -0
  162. data/spec/support/cases/microformat2-node.jit.su/rel/rel-4.html +15 -0
  163. data/spec/support/cases/microformat2-node.jit.su/rel/rel-4.js +42 -0
  164. data/spec/support/cases/microformats.org/microformats-2/microformats-2-0.html +2 -0
  165. data/spec/support/cases/microformats.org/microformats-2/microformats-2-0.js +9 -0
  166. data/spec/support/cases/microformats.org/microformats-2/microformats-2-1.html +2 -0
  167. data/spec/support/cases/microformats.org/microformats-2/microformats-2-1.js +10 -0
  168. data/spec/support/cases/microformats.org/microformats-2/microformats-2-2.html +5 -0
  169. data/spec/support/cases/microformats.org/microformats-2/microformats-2-2.js +11 -0
  170. data/spec/support/cases/microformats.org/microformats-2/microformats-2-3.html +17 -0
  171. data/spec/support/cases/microformats.org/microformats-2/microformats-2-3.js +20 -0
  172. data/spec/support/cases/microformats.org/microformats-2/microformats-2-4.html +16 -0
  173. data/spec/support/cases/microformats.org/microformats-2/microformats-2-4.js +24 -0
  174. data/spec/support/cases/microformats.org/microformats-2/microformats-2-5.html +7 -0
  175. data/spec/support/cases/microformats.org/microformats-2/microformats-2-5.js +11 -0
  176. data/spec/support/cases/microformats.org/microformats-2/microformats-2-6.html +9 -0
  177. data/spec/support/cases/microformats.org/microformats-2/microformats-2-6.js +18 -0
  178. data/spec/support/cases/microformats.org/microformats-2/microformats-2-7.html +9 -0
  179. data/spec/support/cases/microformats.org/microformats-2/microformats-2-7.js +18 -0
  180. data/spec/support/cases/microformats.org/microformats-2/microformats-2-8.html +9 -0
  181. data/spec/support/cases/microformats.org/microformats-2/microformats-2-8.js +17 -0
  182. data/spec/support/cases/microformats.org/microformats-2/microformats-2-9.html +9 -0
  183. data/spec/support/cases/microformats.org/microformats-2/microformats-2-9.js +17 -0
  184. data/spec/support/lib/microformats2/implied_property/name-fail.html +60 -0
  185. data/spec/support/lib/microformats2/implied_property/name-pass.html +30 -0
  186. data/spec/support/lib/microformats2/implied_property/photo-fail.html +60 -0
  187. data/spec/support/lib/microformats2/implied_property/photo-pass.html +30 -0
  188. data/spec/support/lib/microformats2/implied_property/url-fail.html +18 -0
  189. data/spec/support/lib/microformats2/implied_property/url-pass.html +12 -0
  190. data/spec/support/lib/microformats2/nested-format-with-property.html +12 -0
  191. data/spec/support/lib/microformats2/nested-format-with-property.js +15 -0
  192. data/spec/support/lib/microformats2/nested-format-without-property.html +13 -0
  193. data/spec/support/lib/microformats2/nested-property.html +12 -0
  194. data/spec/support/lib/microformats2/nested-property.js +9 -0
  195. data/spec/support/lib/microformats2/simple.html +19 -0
  196. data/spec/support/lib/microformats2/simple.js +10 -0
  197. metadata +535 -85
  198. data/.autotest +0 -23
  199. data/.gemtest +0 -0
  200. data/History.txt +0 -19
  201. data/Manifest.txt +0 -10
  202. data/bin/microformats2 +0 -3
  203. data/test/IndieWebCamp.html +0 -351
  204. data/test/simple.html +0 -30
  205. data/test/test_microformats2.rb +0 -185
data/.autotest DELETED
@@ -1,23 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'autotest/restart'
4
-
5
- # Autotest.add_hook :initialize do |at|
6
- # at.extra_files << "../some/external/dependency.rb"
7
- #
8
- # at.libs << ":../some/external"
9
- #
10
- # at.add_exception 'vendor'
11
- #
12
- # at.add_mapping(/dependency.rb/) do |f, _|
13
- # at.files_matching(/test_.*rb$/)
14
- # end
15
- #
16
- # %w(TestA TestB).each do |klass|
17
- # at.extra_class_map[klass] = "test/test_misc.rb"
18
- # end
19
- # end
20
-
21
- # Autotest.add_hook :run_command do |at|
22
- # system "rake build"
23
- # end
data/.gemtest DELETED
File without changes
data/History.txt DELETED
@@ -1,19 +0,0 @@
1
- === 1.0.2 / 2011-06-28
2
-
3
- * 2 bug fix
4
-
5
- * parse d-duration as a string not a date
6
- * change "class" to "klass" on elements with "class='p-class'"
7
-
8
- === 1.0.1 / 2011-06-28
9
-
10
- * 1 bug fix
11
-
12
- * fixed duplicate microformat problem
13
-
14
- === 1.0.0 / 2011-06-14
15
-
16
- * 1 major enhancement
17
-
18
- * Birthday!
19
-
data/Manifest.txt DELETED
@@ -1,10 +0,0 @@
1
- .autotest
2
- History.txt
3
- Manifest.txt
4
- README.md
5
- Rakefile
6
- bin/microformats2
7
- lib/microformats2.rb
8
- test/test_microformats2.rb
9
- test/simple.html
10
- test/IndieWebCamp.html
data/bin/microformats2 DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- abort "you need to write me"
@@ -1,351 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
3
-
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- <meta http-equiv="Content-Style-Type" content="text/css" />
7
- <meta name="generator" content="MediaWiki 1.15.4" />
8
- <meta name="keywords" content="Main Page,Guest List,Schedule,Projects,Sessions,Planning,Issues,Why,Contribute,why,Session Notes" />
9
- <link rel="alternate" type="application/x-wiki" title="Edit" href="/wiki/index.php?title=Main_Page&amp;action=edit" />
10
- <link rel="edit" title="Edit" href="/wiki/index.php?title=Main_Page&amp;action=edit" />
11
- <link rel="shortcut icon" href="/favicon.ico" />
12
- <link rel="search" type="application/opensearchdescription+xml" href="/wiki/opensearch_desc.php" title="IndieWebCamp (en)" />
13
- <link title="Creative Commons" type="application/rdf+xml" href="/wiki/index.php?title=Main_Page&amp;action=creativecommons" rel="meta" />
14
- <link rel="copyright" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" />
15
- <link rel="alternate" type="application/rss+xml" title="IndieWebCamp RSS feed" href="/wiki/index.php?title=Special:RecentChanges&amp;feed=rss" />
16
- <link rel="alternate" type="application/atom+xml" title="IndieWebCamp Atom feed" href="/wiki/index.php?title=Special:RecentChanges&amp;feed=atom" />
17
- <title>IndieWebCamp</title>
18
- <style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "/wiki/skins/indieweb/gumax_main.css?207"; /*]]>*/</style>
19
- <link rel="stylesheet" type="text/css" media="print" href="/wiki/skins/common/commonPrint.css?207" />
20
- <link rel="stylesheet" type="text/css" media="handheld" href="/wiki/skins/indieweb/handheld.css?207" />
21
- <link rel="stylesheet" type="text/css" media="print" href="/wiki/skins/indieweb/print.css?207" />
22
- <!--[if lt IE 5.5000]><style type="text/css">@import "/wiki/skins/indieweb/IE50Fixes.css?207";</style><![endif]-->
23
- <!--[if IE 5.5000]><style type="text/css">@import "/wiki/skins/indieweb/IE55Fixes.css?207";</style><![endif]-->
24
- <!--[if IE 6]><style type="text/css">@import "/wiki/skins/indieweb/IE60Fixes.css?207";</style><![endif]-->
25
- <!--[if IE 7]><style type="text/css">@import "/wiki/skins/indieweb/IE70Fixes.css?207";</style><![endif]-->
26
- <!--[if lt IE 7]><script type="text/javascript" src="/wiki/skins/common/IEFixes.js?207"></script>
27
- <meta http-equiv="imagetoolbar" content="no" /><![endif]-->
28
- <meta property="og:title" content="IndieWebCamp" />
29
- <meta property="og:type" content="event" />
30
- <meta property="og:url" content="http://indiewebcamp.com" />
31
- <meta property="og:image" content="http://indiewebcamp.com/wiki/skins/indieweb/images/indiewebcamp_logo_color.png" />
32
- <meta property="og:site_name" content="IndieWebCamp" />
33
- <meta property="fb:admins" content="11500459,31600719,214611" />
34
- <script language="javascript" type="text/javascript" src="/files/jquery.js"></script>
35
- <script type= "text/javascript">/*<![CDATA[*/
36
- var skin = "IndieWeb";
37
- var stylepath = "/wiki/skins";
38
- var wgArticlePath = "/$1";
39
- var wgScriptPath = "/wiki";
40
- var wgScript = "/wiki/index.php";
41
- var wgVariantArticlePath = false;
42
- var wgActionPaths = {};
43
- var wgServer = "http://indiewebcamp.com";
44
- var wgCanonicalNamespace = "";
45
- var wgCanonicalSpecialPageName = false;
46
- var wgNamespaceNumber = 0;
47
- var wgPageName = "Main_Page";
48
- var wgTitle = "Main Page";
49
- var wgAction = "view";
50
- var wgArticleId = "1";
51
- var wgIsArticle = true;
52
- var wgUserName = "Iamshane.com";
53
- var wgUserGroups = ["*", "user", "autoconfirmed"];
54
- var wgUserLanguage = "en";
55
- var wgContentLanguage = "en";
56
- var wgBreakFrames = false;
57
- var wgCurRevisionId = 428;
58
- var wgVersion = "1.15.4";
59
- var wgEnableAPI = true;
60
- var wgEnableWriteAPI = true;
61
- var wgSeparatorTransformTable = ["", ""];
62
- var wgDigitTransformTable = ["", ""];
63
- var wgRestrictionEdit = [];
64
- var wgRestrictionMove = [];
65
- var wgAjaxWatch = {"watchMsg": "Watch", "unwatchMsg": "Unwatch", "watchingMsg": "Watching...", "unwatchingMsg": "Unwatching..."};
66
- /*]]>*/</script>
67
-
68
- <script type="text/javascript" src="/wiki/skins/common/wikibits.js?207"><!-- wikibits js --></script>
69
- <script type="text/javascript" src="/wiki/index.php?title=-&amp;action=raw&amp;smaxage=0&amp;gen=js&amp;useskin=IndieWeb"><!-- site js --></script>
70
- <!-- Head Scripts -->
71
- <script type="text/javascript" src="/wiki/skins/common/ajax.js?207"></script>
72
- <script type="text/javascript" src="/wiki/skins/common/ajaxwatch.js?207"></script>
73
- <style type="text/css">/*<![CDATA[*/ .firstHeading, .subtitle, #siteSub, #contentSub, .pagetitle { display:none; } /*]]>*/</style>
74
- </head>
75
-
76
- <body class="mediawiki ltr ns-0 ns-subject page-Main_Page">
77
-
78
- <div class="gumax-center" align="center">
79
- <div id="gumax-rbox" align="left">
80
- <div class="gumax-rbroundbox"><div class="gumax-rbtop"><div><div>
81
- <a href="/" class="headContent"><h1>IndieWebCamp</h1></a>
82
- </div></div></div>
83
- <div class="gumax-rbcontentwrap"><div class="gumax-rbcontent">
84
-
85
- <!-- =================== gumax-page =================== -->
86
- <div id="gumax-page">
87
-
88
- <!-- ===== Header ===== -->
89
- <div id="gumax-header">
90
- <div id="header-text"> IndieWebCamp is a 2-day dev camp in Portland, Oregon focused on building a more open Web.</div>
91
- <a id="topHeader"></a>
92
-
93
- <!-- Search -->
94
- <!--
95
- <div id="gumax-p-search" class="gumax-portlet">
96
- <div id="gumax-searchBody" class="gumax-pBody">
97
- <form action="/Special:Search" id="searchform"><div>
98
- <input id="searchInput" name="search" type="text" accesskey="f" value="" />
99
- <input type='submit' name="go" class="searchButton" id="searchGoButton" value="Go" />
100
- <input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="Search" />
101
- </div></form>
102
- </div>
103
- </div> --> <!-- end of gumax-p-search DIV -->
104
- <!-- end of Search -->
105
-
106
- </div> <!-- end of header DIV -->
107
- <!-- ===== end of Header ===== -->
108
-
109
- <!-- ===== Content body ===== -->
110
- <div id="gumax-content-body">
111
-
112
- <table id="gumax-content-body-table"><tr><td class="gumax-content-left">
113
- <!-- Navigation Menu -->
114
- <div id="gumax-p-navigation-wrapper">
115
-
116
- <div class='gumax-portlet' id='p-navigation'>
117
- <h5>Navigation</h5>
118
- <div class="gumax-p-navigation">
119
- <ul>
120
- <li id="n-mainpage-description"><a href="/Main_Page">Main page</a></li>
121
- <li id="n-Log-in-with-your-OpenID"><a href="/Special:OpenIDLogin">Log in with your OpenID</a></li>
122
- <li id="n-Guest-List"><a href="/Guest_List">Guest List</a></li>
123
- <li id="n-Schedule"><a href="/Schedule">Schedule</a></li>
124
- <li id="n-Sessions"><a href="/Sessions">Sessions</a></li>
125
- <li id="n-Sponsors"><a href="/Sponsors">Sponsors</a></li>
126
- <li id="n-recentchanges"><a href="/Special:RecentChanges">Recent changes</a></li>
127
- </ul>
128
- </div>
129
- </div>
130
- <div class='gumax-portlet' id='p-Resources'>
131
- <h5>Resources</h5>
132
- <div class="gumax-p-navigation">
133
- <ul>
134
- <li id="n-Projects"><a href="/Projects">Projects</a></li>
135
- <li id="n-Set-up-your-domain"><a href="/How_to_set_up_OpenID_on_your_own_domain">Set up your domain</a></li>
136
- <li id="n-search"><a href="/Special:Search">Search</a></li>
137
- </ul>
138
- </div>
139
- </div>
140
-
141
- <div class="gumax-portlet" id="p-Links">
142
- <div class="gumax-p-navigation banners">
143
- <ul style="border: 0;">
144
- <li style="border: 0; margin-top: 20px;">
145
- <a href="/Sponsors"><img src="http://indiewebcamp.com/wiki/images/thumb/1/1f/ualogo.png/160px-ualogo.png" alt="Urban Airship" border="0" width="160" /></a>
146
- </li>
147
- <li style="border: 0; margin-top: 20px;">
148
- <a href="/Sponsors"><img src="http://indiewebcamp.com/wiki/images/thumb/4/41/tropologo-vert.png/110px-tropologo-vert.png" alt="Tropo" border="0" width="110" /></a>
149
- </li>
150
- <li style="border: 0; margin-top: 20px;">
151
- <a href="/Sponsors"><img src="http://indiewebcamp.com/wiki/images/5/54/wklogo.png" alt="Wieden+Kennedy" border="0" width="157" /></a>
152
- </li>
153
- </ul>
154
- </div>
155
- </div>
156
-
157
-
158
- </div>
159
- <!-- end of Navigation Menu -->
160
-
161
- </td><td class="gumax-content-right"> <!-- Main Content TD -->
162
-
163
- <!-- Main Content -->
164
- <div id="content">
165
-
166
- <a name="top" id="top"></a>
167
- <h1 class="firstHeading">Main Page</h1>
168
- <div id= "bodyContent" class="gumax-bodyContent">
169
- <div id="contentSub"></div>
170
- <!-- start content -->
171
- <p><br />
172
- </p>
173
- <div class="vevent h-event">
174
- <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
175
- <ul>
176
- <li class="toclevel-1"><a href="#IndieWebCamp"><span class="tocnumber">1</span> <span class="toctext">IndieWebCamp</span></a></li>
177
- <li class="toclevel-1"><a href="#Session_Notes"><span class="tocnumber">2</span> <span class="toctext">Session Notes</span></a></li>
178
- <li class="toclevel-1"><a href="#When"><span class="tocnumber">3</span> <span class="toctext">When</span></a></li>
179
- <li class="toclevel-1"><a href="#Where"><span class="tocnumber">4</span> <span class="toctext">Where</span></a>
180
- <ul>
181
- <li class="toclevel-2"><a href="#Travel"><span class="tocnumber">4.1</span> <span class="toctext">Travel</span></a></li>
182
- </ul>
183
- </li>
184
- <li class="toclevel-1"><a href="#Who"><span class="tocnumber">5</span> <span class="toctext">Who</span></a></li>
185
- <li class="toclevel-1"><a href="#What"><span class="tocnumber">6</span> <span class="toctext">What</span></a></li>
186
- <li class="toclevel-1"><a href="#Why"><span class="tocnumber">7</span> <span class="toctext">Why</span></a></li>
187
- <li class="toclevel-1"><a href="#How"><span class="tocnumber">8</span> <span class="toctext">How</span></a></li>
188
- <li class="toclevel-1"><a href="#More"><span class="tocnumber">9</span> <span class="toctext">More</span></a></li>
189
- </ul>
190
- </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
191
- <a name="IndieWebCamp" id="IndieWebCamp"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: IndieWebCamp">edit</a>]</span> <span class="mw-headline"> <span class="summary p-summary p-name">IndieWebCamp</span> </span></h2>
192
- <div class="description p-description">
193
- <p>Rather than posting content on many third-party silos of data, we should all begin owning the data we're creating. Publish short status updates on your own domain, and syndicate to Twitter. Publish photos on your own domain, syndicate to Flickr, etc, etc.
194
- </p><p>This is the basis of the "Indie Web" movement (see <a href="/why" title="why">why</a> for more). We'll get together for a weekend to talk about what has been done in the field, and what still needs to be done. There will be workshops and breakout sessions.
195
- </p>
196
- </div>
197
- <p><a href="/Planning" title="Planning">Planners</a>: <span class="organizer vcard p-organizer h-card"><span class="fn"><a href="http://tantek.com" class="external text" title="http://tantek.com">Tantek Çelik</a></span></span>, <span class="organizer vcard p-organizer h-card"><span class="fn"><a href="http://aaron.pk" class="external text" title="http://aaron.pk">Aaron Parecki</a></span></span>, <span class="organizer vcard p-organizer h-card"><span class="fn"><a href="http://caseorganic.com" class="external text" title="http://caseorganic.com">Amber Case</a></span></span>, and <span class="organizer vcard p-organizer h-card"><span class="fn"><a href="http://skinnywhitegirl.com" class="external text" title="http://skinnywhitegirl.com">Crystal Beasley</a></span></span>. Want to help? <a href="/Planning" title="Planning">Sign up to volunteer!</a>.
198
- </p>
199
- <a name="Session_Notes" id="Session_Notes"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=2" title="Edit section: Session Notes">edit</a>]</span> <span class="mw-headline"> Session Notes </span></h2>
200
- <p>See the <b><a href="/Schedule" title="Schedule">Schedule</a></b> to read and add session notes. Click on the session title to add notes to the page. To see all session notes, see <b><a href="/Category:Session_Notes" title="Category:Session Notes">Category:Session Notes</a></b>
201
- </p>
202
- <a name="When" id="When"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=3" title="Edit section: When">edit</a>]</span> <span class="mw-headline"> When </span></h2>
203
- <p>IndieWebCamp was on <span class="dtstart d-start">2011-06-25</span> and <span class="dtend d-end">2011-06-26</span>. See the <a href="/Schedule" title="Schedule">Schedule</a> for more details. Note: <a href="http://opensourcebridge.org/" class="external text" title="http://opensourcebridge.org/">OSBridge</a> was June 21-24 immediately beforehand, consider attending that as well.
204
- </p>
205
- <a name="Where" id="Where"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=4" title="Edit section: Where">edit</a>]</span> <span class="mw-headline"> Where </span></h2>
206
- <p><b><span class="location vcard p-location h-card"><span class="fn org p-name p-org">Urban Airship</span>, <span class="adr p-adr"><a href="http://maps.google.com/maps?q=334+NW+11th+Ave.,+Portland,+Oregon" class="external text" title="http://maps.google.com/maps?q=334+NW+11th+Ave.,+Portland,+Oregon">334 NW 11th Ave., Portland, Oregon</a></span></span></b>.
207
- </p><p><a href="http://urbanairship.com/company/" class="external text" title="http://urbanairship.com/company/">Urban Airship</a> is graciously providing the space for IndieWebCamp.
208
- </p>
209
- <a name="Travel" id="Travel"></a><h3><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=5" title="Edit section: Travel">edit</a>]</span> <span class="mw-headline"> Travel </span></h3>
210
- <p>Flights: If you're flying from the SF/Bay Area to Portland (PDX), Alaska Airlines and Southwest Airlines are recommended and have frequent flights to PDX.
211
- </p>
212
- <a name="Who" id="Who"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=6" title="Edit section: Who">edit</a>]</span> <span class="mw-headline"> Who </span></h2>
213
- <p>To get on the <a href="/Guest_List" title="Guest List">guest list</a>, <a href="/Special:OpenIDLogin" title="Special:OpenIDLogin">log in</a> to this wiki with your personal OpenID and <a href="/Guest_List" title="Guest List">add yourself</a>!
214
- </p><p><i>IndieWebCamp is for active builders only in order to focus the limited time we have on productive real world discussions and code/design/ux sharing that will help us move forward.</i>
215
- </p><p>Attendees must have a personal URL enabled with OpenID, or be an apprentice to someone who has one in order to attend.
216
- </p>
217
- </div>
218
- <a name="What" id="What"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=7" title="Edit section: What">edit</a>]</span> <span class="mw-headline"> What </span></h2>
219
- <ul><li> <a href="/Projects" title="Projects">Projects</a>
220
- </li><li> <a href="/Sessions" title="Sessions">Sessions</a>
221
- </li></ul>
222
- <a name="Why" id="Why"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=8" title="Edit section: Why">edit</a>]</span> <span class="mw-headline"> Why </span></h2>
223
- <ul><li> <a href="/Why" title="Why">Why</a>
224
- </li></ul>
225
- <a name="How" id="How"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=9" title="Edit section: How">edit</a>]</span> <span class="mw-headline"> How </span></h2>
226
- <ul><li> How to <a href="/Contribute" title="Contribute">Contribute</a>
227
- </li></ul>
228
- <a name="More" id="More"></a><h2><span class="editsection">[<a href="/wiki/index.php?title=Main_Page&amp;action=edit&amp;section=10" title="Edit section: More">edit</a>]</span> <span class="mw-headline"> More </span></h2>
229
- <ul><li> <a href="/Issues" title="Issues">Issues</a> - any problems with the wiki, the website, or anything else to do with IndiWebCamp
230
- </li><li> <a href="/Planning" title="Planning">Planning</a> - want to help out with IndieWebCamp? <a href="/Planning" title="Planning">Volunteer!</a>.
231
- </li><li> <a href="irc://irc.freenode.net/indiewebcamp" class="external free" title="irc://irc.freenode.net/indiewebcamp">irc://irc.freenode.net/indiewebcamp</a>
232
- </li></ul>
233
-
234
- <!--
235
- NewPP limit report
236
- Preprocessor node count: 50/1000000
237
- Post-expand include size: 0/2097152 bytes
238
- Template argument size: 0/2097152 bytes
239
- Expensive parser function count: 0/100
240
- -->
241
-
242
- <!-- Saved in parser cache with key indiewebcamp:pcache:idhash:1-0!1!0!!en!2 and timestamp 20110627011606 -->
243
- <div class="printfooter">
244
- Retrieved from "<a href="http://indiewebcamp.com/Main_Page">http://indiewebcamp.com/Main_Page</a>"</div>
245
- <!-- end content -->
246
- <div class="visualClear"></div>
247
- </div>
248
- </div>
249
- <!-- end of Main Content -->
250
- </td></tr></table>
251
- </div>
252
- <!-- ===== end of Content body ===== -->
253
-
254
- </div> <!-- end of gumax-page DIV -->
255
- <!-- =================== end of gumax-page =================== -->
256
-
257
- <!-- ===== gumax-page-actions ===== -->
258
- <div id="gumax-page-actions">
259
- <div id="gumax-content-actions">
260
- <ul>
261
- <li id="ca-nstab-main" class="selected" ><a href="/Main_Page">Page</a> </li>
262
- <li id="ca-talk" class="new" ><a href="/wiki/index.php?title=Talk:Main_Page&amp;action=edit&amp;redlink=1">Discussion</a> </li>
263
- <li id="ca-edit" ><a href="/wiki/index.php?title=Main_Page&amp;action=edit">Edit</a> </li>
264
- <li id="ca-history" ><a href="/wiki/index.php?title=Main_Page&amp;action=history">History</a> </li>
265
- <li id="ca-move" ><a href="/Special:MovePage/Main_Page">Move</a> </li>
266
- <li id="ca-watch" ><a href="/wiki/index.php?title=Main_Page&amp;action=watch">Watch</a> </li>
267
-
268
- <!-- show back to top link only if the body is longer than the window height -->
269
- <!--
270
- <script type="text/javascript">
271
- var winheight = parseInt(document.documentElement.clientHeight)
272
- var boheight = parseInt(document.body.clientHeight)
273
- if(winheight <= boheight) {
274
- document.write('<li><a href="#" onclick="window.scrollTo(0,0);return false;" title="Back to the top of the page">Back to top</a></li>');
275
- }
276
- </script>
277
- -->
278
- <!-- end of show back to top link only -->
279
-
280
- </ul>
281
- </div>
282
- </div>
283
- <!-- ===== end of gumax-page-actions ===== -->
284
-
285
- <!-- =================== gumax-page-footer =================== -->
286
- <div id="gumax-page-footer">
287
-
288
- <!-- personal tools -->
289
- <div id="gumax-personal-tools">
290
- <ul>
291
- <li id="t-upload"><a href="/Special:Upload">Upload file</a> | </li>
292
- <li id="t-specialpages"><a href="/Special:SpecialPages">Special pages</a> </li>
293
- <li id="t-permalink"> | <a href="/wiki/index.php?title=Main_Page&amp;oldid=428">Permanent link</a></li>
294
- </ul>
295
-
296
-
297
- <!-- Login -->
298
- <div id="gumax-footer-login">
299
- <ul>
300
- <li id="gumax-pt-userpage"><a href="/User:Iamshane.com">Iamshane.com</a>
301
- |</li>
302
- <li id="gumax-pt-mytalk"><a href="/User_talk:Iamshane.com" class="new">My talk</a>
303
- |</li>
304
- <li id="gumax-pt-preferences"><a href="/Special:Preferences">My preferences</a>
305
- |</li>
306
- <li id="gumax-pt-watchlist"><a href="/Special:Watchlist">My watchlist</a>
307
- |</li>
308
- <li id="gumax-pt-mycontris"><a href="/Special:Contributions/Iamshane.com">My contributions</a>
309
- |</li>
310
- <li id="gumax-pt-logout"><a href="/wiki/index.php?title=Special:UserLogout&amp;returnto=Main_Page">Log out</a>
311
- </li>
312
- </ul>
313
- </div>
314
- <!-- end of Login -->
315
-
316
- </div> <!-- end of personal-tools DIV -->
317
- <!-- end of personal tools -->
318
-
319
- <!-- gumax-footer -->
320
- <div id="gumax-footer">
321
- <div id="gumax-f-message">
322
- <span id="f-lastmod"> This page was last modified on 26 June 2011, at 18:16.</span>
323
- <span id="f-viewcount">This page has been accessed 23,017 times. </span>
324
- </div>
325
- </div>
326
- <!-- end of gumax-footer -->
327
-
328
- <script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
329
- </div>
330
- <!-- =================== end of gumax-page-footer =================== -->
331
-
332
- </div></div>
333
- <div class="gumax-rbbot"><div><div></div></div></div></div>
334
- </div>
335
- </div>
336
-
337
- <!-- Served in 0.136 secs. --><script type="text/javascript">
338
-
339
- var _gaq = _gaq || [];
340
- _gaq.push(['_setAccount', 'UA-16359758-21']);
341
- _gaq.push(['_trackPageview']);
342
-
343
- (function() {
344
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
345
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
346
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
347
- })();
348
-
349
- </script>
350
-
351
- </body></html>
data/test/simple.html DELETED
@@ -1,30 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Simple hCard</title>
4
- </head>
5
-
6
- <body>
7
- <h1 class="h-card">
8
- <a class="p-fn u-url" href="http://factoryjoe.com/">
9
- <span class="foxtrot echo niner p-given-name">Chris</span>
10
- <abbr class="p-additional-name">R.</abbr>
11
- <span class="p-family-name">Messina</span>
12
- </a>
13
- </h1>
14
-
15
- <h1 class="panda h-card">
16
- <a class="p-fn u-url" href="http://iamshane.com">
17
- <span class="p-given-name">Shane</span>
18
- <abbr class="p-additional-name">B</abbr>
19
- <span class="p-family-name">Becker</span>
20
- </a>
21
- </h1>
22
-
23
- <h1 class="h-mitch">
24
- <a class="p-snap" href="http://iamshane.com">
25
- <span class="p-krackle">Breakfast</span>
26
- <span class="p-pop">Cereal</span>
27
- </a>
28
- </h1>
29
- </body>
30
- </html>
@@ -1,185 +0,0 @@
1
- require "test/unit"
2
- require "microformats2"
3
-
4
- class TestMicroformats2 < Test::Unit::TestCase
5
- def test_throw_exception_on_non_string_params
6
- assert_raise Microformats2::LoadError do
7
- Microformats2.parse(nil)
8
- end
9
- end
10
-
11
- def test_returns_hash_of_microformat_objects
12
- result = Microformats2.parse("A String")
13
- assert_equal Hash, result.class
14
- end
15
-
16
- def test_only_parse_microformats
17
- result = Microformats2.parse("<html><body><p>Something</p></body></html>")
18
- assert_equal 0, result.size
19
- end
20
-
21
- def test_extracts_hcard_from_an_html_file
22
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "simple.html")))
23
- assert_equal HCard, result[:hcard].first.class
24
- assert_equal 2, result[:hcard].length
25
- end
26
-
27
- def test_extracts_name_from_tag_with_multiple_classes
28
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "simple.html")))
29
- assert_equal "Chris", result[:hcard].first.given_name
30
- end
31
-
32
- def test_extracts_hcalendar_from_an_indiewebcamp_html_file
33
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "IndieWebCamp.html")))
34
- assert_equal 1, result[:hevent].length
35
- assert result[:hcard].map { |h| h.name }.include?("Urban Airship")
36
- end
37
-
38
- def test_extracts_dates_in_an_hcalendar_from_an_html_file
39
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "hcalendar.html")))
40
- assert_equal result[:hevent].first.dtstart, DateTime.parse("2007-09-08")
41
- end
42
-
43
- def test_extracts_date_durations_as_a_string_from_an_html_file
44
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "hcalendar.html")))
45
- assert_equal result[:hevent].first.duration, "P2D"
46
- end
47
-
48
- def test_turns_class_values_of_class_to_klass_from_an_html_file
49
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "hcalendar.html")))
50
- assert_equal result[:hevent].first.klass, "public"
51
- end
52
-
53
- def test_extracts_hcalendar_from_an_html_file
54
- result = Microformats2.parse(File.open(File.join(File.dirname(__FILE__), "IndieWebCamp.html")))
55
- assert_equal 1, result[:hevent].length
56
- assert result[:hcard].map { |h| h.name }.include?("Urban Airship")
57
- end
58
-
59
- def test_extracts_hcard_from_html
60
- hcard = <<-END
61
- <html>
62
- <head>
63
- <title>Simple hCard</title>
64
- </head>
65
-
66
- <body>
67
- <h1 class="h-card">Chris</h1>
68
- </body>
69
- </html>
70
- END
71
- result = Microformats2.parse(hcard)
72
- assert_equal HCard, result[:hcard].first.class
73
- end
74
-
75
- def test_constructs_properties_from_hcard
76
- hcard = <<-END
77
- <html>
78
- <head>
79
- <title>Simple hCard</title>
80
- </head>
81
-
82
- <body>
83
- <h1 class="h-card">
84
- <a class="p-fn u-url" href="http://factoryjoe.com/">
85
- <span class="p-given-name">Chris</span>
86
- <abbr class="p-additional-name">R.</abbr>
87
- <span class="p-family-name">Messina</span>
88
- </a>
89
- </h1>
90
- </body>
91
- </html>
92
- END
93
- result = Microformats2.parse(hcard)
94
- mycard = result[:hcard].first
95
-
96
- assert_equal "Chris", mycard.given_name
97
- assert_equal "R.", mycard.additional_name
98
- assert_equal "Messina", mycard.family_name
99
- assert_equal "Chris R. Messina", mycard.fn
100
- end
101
-
102
- def test_constructs_dates
103
- hcard = <<-END
104
- <html>
105
- <head>
106
- <title>Simple hCard</title>
107
- </head>
108
-
109
- <body>
110
- <h1 class="h-card">
111
- <span class="d-bday">1979-09-18</span>
112
- <span class="d-epoch" title="1970-01-01">EPOCH!</span>
113
- </h1>
114
- </body>
115
- </html>
116
- END
117
- result = Microformats2.parse(hcard)
118
- mycard = result[:hcard].first
119
-
120
- assert_equal DateTime.parse("1979-09-18"), mycard.bday
121
- assert_equal DateTime.parse("1970-01-01"), mycard.epoch
122
- end
123
-
124
- def test_constructs_times
125
- hcard = <<-END
126
- <html>
127
- <head>
128
- <title>Simple hCard</title>
129
- </head>
130
-
131
- <body>
132
- <h1 class="h-card">
133
- <span class="t-start">09:30</span>
134
- <span class="t-end" title="6:00">Leaving time</span>
135
- </h1>
136
- </body>
137
- </html>
138
- END
139
- result = Microformats2.parse(hcard)
140
- mycard = result[:hcard].first
141
-
142
- assert_equal Time.parse("09:30"), mycard.start
143
- assert_equal Time.parse("06:00"), mycard.end
144
- end
145
-
146
- def test_ignores_pattern_matches_not_at_the_beginning_of_class
147
- hcard = <<-END
148
- <html>
149
- <head>
150
- <title>Simple hCard</title>
151
- </head>
152
-
153
- <body>
154
- <h1 class="h-card">
155
- <span class="p-n-x">Chris</span>
156
- </h1>
157
- </body>
158
- </html>
159
- END
160
- result = Microformats2.parse(hcard)
161
- mycard = result[:hcard].first
162
-
163
- assert_equal "Chris", mycard.n_x
164
- assert mycard.n_x.is_a?(String)
165
- end
166
-
167
- def test_constructs_urls_from_hcard
168
- hcard = <<-END
169
- <html>
170
- <head>
171
- <title>Simple hCard</title>
172
- </head>
173
-
174
- <body>
175
- <h1 class="h-card">
176
- <a class="p-fn u-url" href="http://factoryjoe.com/">Chris</a>
177
- </h1>
178
- </body>
179
- </html>
180
- END
181
- result = Microformats2.parse(hcard)
182
- mycard = result[:hcard].first
183
- assert_equal "http://factoryjoe.com/", mycard.url
184
- end
185
- end