uformats 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +8 -0
- data/COPYING +4 -0
- data/README +36 -0
- data/lib/uformats.rb +158 -0
- data/lib/uformats/basic.rb +268 -0
- data/lib/uformats/hcalendar.rb +23 -0
- data/lib/uformats/hcard.rb +100 -0
- data/lib/uformats/hreview.rb +182 -0
- data/lib/uformats/pluralizer.rb +32 -0
- data/test/all.rb +4 -0
- data/test/basic_test.rb +441 -0
- data/test/hcalendar_test.rb +157 -0
- data/test/hcard_test.rb +438 -0
- data/test/hreview_test.rb +500 -0
- data/test/pluralizer_test.rb +24 -0
- data/test/test_helper.rb +13 -0
- data/test/uformats_test.rb +235 -0
- metadata +70 -0
@@ -0,0 +1,157 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'uformats/hcalendar'
|
3
|
+
|
4
|
+
class HCalendarTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_should_parse_sample_web_2_0
|
7
|
+
e = event(:web_2_0)
|
8
|
+
assert_equal('http://www.web2con.com/', e.url)
|
9
|
+
assert_equal(2005, e.dtstart.year)
|
10
|
+
assert_equal(10, e.dtstart.month)
|
11
|
+
assert_equal(5, e.dtstart.day)
|
12
|
+
assert_equal(2005, e.dtend.year)
|
13
|
+
assert_equal(10, e.dtend.month)
|
14
|
+
assert_equal(8, e.dtend.day)
|
15
|
+
assert_equal('Argent Hotel, San Francisco, CA', e.location)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_parse_sample_web_2_0_readable
|
19
|
+
e = event(:web_2_0_readable)
|
20
|
+
assert_equal('http://www.web2con.com/', e.url)
|
21
|
+
assert_equal(2005, e.dtstart.year)
|
22
|
+
assert_equal(10, e.dtstart.month)
|
23
|
+
assert_equal(5, e.dtstart.day)
|
24
|
+
assert_equal(2005, e.dtend.year)
|
25
|
+
assert_equal(10, e.dtend.month)
|
26
|
+
assert_equal(8, e.dtend.day)
|
27
|
+
assert_equal('Argent Hotel, San Francisco, CA', e.location)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_parse_sample_elecciones
|
31
|
+
e = event(:elecciones)
|
32
|
+
assert_equal('http://yovoto.pehuen.org', e.url)
|
33
|
+
assert_equal(2005, e.dtstart.year)
|
34
|
+
assert_equal(12, e.dtstart.month)
|
35
|
+
assert_equal(11, e.dtstart.day)
|
36
|
+
assert_equal('Holanda', e.location)
|
37
|
+
assert_equal('Por el derecho a voto de los Chilenos en el Exterior', e.description)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_parse_sample_cc_italia
|
41
|
+
e = event(:cc_italia)
|
42
|
+
assert_equal('http://www.creativecommons.it/ccit2005/programma_new.html', e.url)
|
43
|
+
assert_equal('2005-11-19T08:00:00Z', e.dtstart.utc.xmlschema)
|
44
|
+
assert_equal('2005-11-19T22:59:00Z', e.dtend.utc.xmlschema)
|
45
|
+
assert_equal('Creative Commons IT 2005', e.summary)
|
46
|
+
assert_equal('Torino', e.location)
|
47
|
+
assert_equal('L’evento di Creative Commons Italia', e.description)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_parse_sample_eclipsecon
|
51
|
+
e = event(:eclipsecon, 'http://www.midgard-project.org/community/events/')
|
52
|
+
assert_equal('http://www.midgard-project.org/community/events/205f1d146720b563dd726368389f3da7.html', e.url)
|
53
|
+
# Yes, these people don't understand time zones!
|
54
|
+
assert_equal('2006-03-20T08:00:00Z', e.dtstart.utc.xmlschema)
|
55
|
+
assert_equal('2006-03-23T19:00:00Z', e.dtend.utc.xmlschema)
|
56
|
+
assert_equal('1970-01-01T00:33:26Z', e.dtstamp.utc.xmlschema)
|
57
|
+
assert_equal('EclipseCon 2006', e.summary)
|
58
|
+
assert_equal('Santa Clara, California', e.location)
|
59
|
+
assert_equal('205f1d146720b563dd726368389f3da7', e.uid)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_parse_sample_meaningful_xhtml
|
63
|
+
e = event(:meaningful_xhtml)
|
64
|
+
assert_equal('Theme: Coding Audience: All Geek-o-meter rating: 3', e.description)
|
65
|
+
assert_equal('The Elements of Meaningful XHTML', e.summary)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_should_parse_sample_pretzel_day
|
69
|
+
e = event(:pretzel_day)
|
70
|
+
assert_equal(2006, e.dtstart.year)
|
71
|
+
assert_equal(4, e.dtstart.month)
|
72
|
+
assert_equal(26, e.dtstart.day)
|
73
|
+
assert_equal('National Pretzel Day', e.summary)
|
74
|
+
assert_equal('Eat your heart out on pretzels, but be sure not to choke.', e.description)
|
75
|
+
end
|
76
|
+
|
77
|
+
def event(name, url=nil)
|
78
|
+
Microformats::HCalendar::Event.first(SOURCES[name], url)
|
79
|
+
end
|
80
|
+
|
81
|
+
SOURCES = {
|
82
|
+
:web_2_0 => %{
|
83
|
+
<span class="vevent">
|
84
|
+
<a class="url" href="http://www.web2con.com/">
|
85
|
+
<span class="summary">Web 2.0 Conference</span>:
|
86
|
+
<abbr class="dtstart" title="2005-10-05">October 5</abbr>-
|
87
|
+
<abbr class="dtend" title="2005-10-08">7</abbr>,
|
88
|
+
at the <span class="location">Argent Hotel, San Francisco, CA</span>
|
89
|
+
</a>
|
90
|
+
</span>
|
91
|
+
},
|
92
|
+
:web_2_0_readable => %{
|
93
|
+
<span class="vevent">
|
94
|
+
<a class="url" href="http://www.web2con.com/">
|
95
|
+
<span class="summary">Web 2.0 Conference</span>:
|
96
|
+
<abbr class="dtstart" title="20051005">October 5</abbr>-
|
97
|
+
<abbr class="dtend" title="20051008">7</abbr>,
|
98
|
+
at the <span class="location">Argent Hotel, San Francisco, CA</span>
|
99
|
+
</a>
|
100
|
+
</span>
|
101
|
+
},
|
102
|
+
:elecciones => %{
|
103
|
+
<div class="vevent">
|
104
|
+
<a class="url" href="http://yovoto.pehuen.org">
|
105
|
+
<abbr class="dtstart" title="20051211"> December 11, 2005 </abbr> -
|
106
|
+
<span class="summary"> Elecciones 2005 Chile - desde el exterior </span> - at
|
107
|
+
<span class="location"> Holanda </span> </a>
|
108
|
+
<div class="description"> Por el derecho a voto de los Chilenos en el Exterior </div>
|
109
|
+
</div>
|
110
|
+
},
|
111
|
+
:cc_italia => %{
|
112
|
+
<div class="vevent">
|
113
|
+
<a class="url" href="http://www.creativecommons.it/ccit2005/programma_new.html">
|
114
|
+
<abbr class="dtstart" title="20051119T0900++0100"> 19 Novembre, 2005 - 09:00 </abbr> -
|
115
|
+
<abbr class="dtend" title="20051119T2359++0100"> 23:59 </abbr> -
|
116
|
+
<span class="summary"> Creative Commons IT 2005 </span> - a
|
117
|
+
<span class="location"> Torino </span> </a><br />
|
118
|
+
<div class="description"> L’evento di Creative Commons Italia </div>
|
119
|
+
</div>
|
120
|
+
},
|
121
|
+
:eclipsecon => %{
|
122
|
+
<li class="vevent" id="205f1d146720b563dd726368389f3da7">
|
123
|
+
<abbr class="dtstart" title="2006-03-20T08:00:00Z">Monday 20. March 09:00</abbr> -
|
124
|
+
<abbr class="dtend" title="2006-03-23T19:00:00Z">Thursday 23. 20:00</abbr>
|
125
|
+
|
126
|
+
<a class="url" href="/community/events/205f1d146720b563dd726368389f3da7.html"><span class="summary">EclipseCon 2006</span></a>
|
127
|
+
<span class="location">Santa Clara, California</span>
|
128
|
+
<abbr class="dtstamp" style="display: none;" title="1970-01-01T00:33:26Z">1970-01-01T00:33:26Z</abbr>
|
129
|
+
<span class="uid" style="display: none;">205f1d146720b563dd726368389f3da7</span>
|
130
|
+
</li>
|
131
|
+
},
|
132
|
+
:meaningful_xhtml => %{
|
133
|
+
<td class="vevent" colspan="2" headers="guthrie t945">
|
134
|
+
<p>
|
135
|
+
<strong><a href="presenters.cfm#Çelik">Tantek Çelik</a></strong><br />
|
136
|
+
<em class="summary"><a href="http://tantek.com/presentations/2005/09/elements-of-xhtml/">The Elements of Meaningful XHTML</a></em><br />
|
137
|
+
<span class="description">Theme: Coding<br />
|
138
|
+
Audience: All<br />
|
139
|
+
|
140
|
+
Geek-o-meter rating: 3</span><br />
|
141
|
+
<a href="http://mp3.we05.com/podcast/mp3/we05-2-tantek-celik.mp3">PodCast</a> - Duration: 31:56 - File size: 7.31 MB
|
142
|
+
</p>
|
143
|
+
</td>
|
144
|
+
},
|
145
|
+
:pretzel_day => %{
|
146
|
+
<dl class="vevent">
|
147
|
+
<dt>
|
148
|
+
<span style="display: none" class="duration">P1D</span>
|
149
|
+
<abbr style="display: none" class="dtstart" title="20060426">Wednesday, April 26th 2006</abbr>
|
150
|
+
<a class="summary" href="createvcal.php?summary=National%20Pretzel%20Day&description=Eat%20your%20heart%20out%20on%20pretzels%2C%20but%20be%20sure%20not%20to%20choke.&date=20060426&freq=YEARLY&interval=1&bymonth=4" title="National Pretzel Day">National Pretzel Day</a>
|
151
|
+
</dt>
|
152
|
+
<dd class="description">Eat your heart out on pretzels, but be sure not to choke.</dd>
|
153
|
+
</dl>
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
end
|
data/test/hcard_test.rb
ADDED
@@ -0,0 +1,438 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'uformats/hcard'
|
3
|
+
|
4
|
+
class HCardTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_should_parse_sample_cafe_borrone
|
7
|
+
c = hcard(:cafe_borrone)
|
8
|
+
assert_equal('Cafe Borrone', c.fn)
|
9
|
+
assert_equal('1010 El Camino Real', c.adr.street_address)
|
10
|
+
assert_equal('San Francisco', c.adr.locality)
|
11
|
+
assert_equal('CA', c.adr.region)
|
12
|
+
assert_equal('94025', c.adr.postal_code)
|
13
|
+
assert_equal('+1-650-327-0830', c.tel.value)
|
14
|
+
assert_equal('http://cafeborrone.com', c.url)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_parse_sample_chn
|
18
|
+
c = hcard(:chn)
|
19
|
+
assert_not_nil(c)
|
20
|
+
assert_equal('FN', c.fn)
|
21
|
+
assert_equal('user@example.com', c.email.value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_parse_sample_sf
|
25
|
+
c = hcard(:sf)
|
26
|
+
assert_not_nil(c)
|
27
|
+
assert_equal('user@example.com', c.email.value)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_handle_org_properly
|
31
|
+
c_unoptimized = hcard(:org_unoptimized)
|
32
|
+
c_optimized = hcard(:org_optimized)
|
33
|
+
assert_equal('American Snake Oil Company', c_unoptimized.org.organization_name)
|
34
|
+
assert_equal('American Snake Oil Company', c_optimized.org.organization_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_perform_n_optimization
|
38
|
+
c1 = hcard(:n_optimized_1)
|
39
|
+
assert_equal('John', c1.n.given_name)
|
40
|
+
assert_equal('Doe', c1.n.family_name)
|
41
|
+
c2 = hcard(:n_optimized_2)
|
42
|
+
assert_equal('John', c2.n.given_name)
|
43
|
+
assert_equal('Doe', c2.n.family_name)
|
44
|
+
c3 = hcard(:n_optimized_3)
|
45
|
+
assert_equal('J', c3.n.given_name)
|
46
|
+
assert_equal('Doe', c3.n.family_name)
|
47
|
+
c4 = hcard(:n_optimized_4)
|
48
|
+
assert_equal('J', c4.n.given_name)
|
49
|
+
assert_equal('Doe', c4.n.family_name)
|
50
|
+
c5 = hcard(:n_optimized_5)
|
51
|
+
assert_equal('J', c5.n.given_name)
|
52
|
+
assert_equal('Doe', c5.n.family_name)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_should_parse_sample_w3_normal
|
56
|
+
c = hcard(:w3_normal)
|
57
|
+
assert_equal('John', c.n.given_name)
|
58
|
+
assert_equal('Doe', c.n.family_name)
|
59
|
+
assert_equal('John Doe', c.fn)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_parse_sample_w3_two_emails
|
63
|
+
c = hcard(:w3_two_emails)
|
64
|
+
assert_equal('John', c.n.given_name)
|
65
|
+
assert_equal('Doe', c.n.family_name)
|
66
|
+
assert_equal('John Doe', c.fn)
|
67
|
+
assert_equal('doe@example', c.emails[0].value)
|
68
|
+
assert_equal('john.doe@example', c.emails[1].value)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_should_parse_sample_w3_implied_n
|
72
|
+
c = hcard(:w3_implied_n)
|
73
|
+
assert_equal('John', c.n.given_name)
|
74
|
+
assert_equal('Doe', c.n.family_name)
|
75
|
+
assert_equal('John Doe', c.fn)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_should_parse_sample_w3_with_id
|
79
|
+
c = hcard(:w3_with_id)
|
80
|
+
assert_equal('John', c.n.given_name)
|
81
|
+
assert_equal('Doe', c.n.family_name)
|
82
|
+
assert_equal('John Doe', c.fn)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_should_parse_sample_w3_relative_link
|
86
|
+
c = hcard(:w3_relative_link, 'http://dev.w3.org/cvsweb/2001/palmagent/hcardTest.html')
|
87
|
+
assert_equal('John', c.n.given_name)
|
88
|
+
assert_equal('Doe', c.n.family_name)
|
89
|
+
assert_equal('John Doe', c.fn)
|
90
|
+
assert_equal('http://dev.w3.org/cvsweb/2001/palmagent/doe-pg', c.url)
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_should_parse_sample_w3_with_nickname
|
94
|
+
c = hcard(:w3_with_nickname)
|
95
|
+
assert_equal('John', c.n.given_name)
|
96
|
+
assert_equal('Doe', c.n.family_name)
|
97
|
+
assert_equal('Johnny', c.nickname)
|
98
|
+
assert_equal('John Doe', c.fn)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_parse_sample_w3_tabs_in_class_fields
|
102
|
+
c = hcard(:w3_tabs_in_class_fields)
|
103
|
+
assert_equal('John', c.n.given_name)
|
104
|
+
assert_equal('Doe2', c.n.family_name)
|
105
|
+
assert_equal('John Doe2', c.fn)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_should_parse_sample_w3_lfs_in_class_fields
|
109
|
+
c = hcard(:w3_lfs_in_class_fields)
|
110
|
+
assert_equal('John', c.n.given_name)
|
111
|
+
assert_equal('Doe3', c.n.family_name)
|
112
|
+
assert_equal('John Doe3', c.fn)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_should_parse_sample_w3_crs_in_class_fields
|
116
|
+
c = hcard(:w3_crs_in_class_fields)
|
117
|
+
assert_equal('John', c.n.given_name)
|
118
|
+
assert_equal('Doe3', c.n.family_name)
|
119
|
+
assert_equal('John Doe3', c.fn)
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_should_parse_sample_w3_which_name
|
123
|
+
c = hcard(:w3_which_name)
|
124
|
+
assert_equal('Joe', c.n.given_name)
|
125
|
+
assert_equal('Name2', c.n.family_name)
|
126
|
+
assert_equal('Joe Name2', c.fn)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_should_parse_sample_w3_lang_dominating
|
130
|
+
c = hcard(:w3_lang_dominating)
|
131
|
+
assert_equal('John', c.n.given_name)
|
132
|
+
assert_equal('Doe4', c.n.family_name)
|
133
|
+
assert_equal('John Doe4', c.fn)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_should_parse_sample_w3_two_langs_dominating
|
137
|
+
c = hcard(:w3_two_langs_dominating)
|
138
|
+
assert_equal('John', c.n.given_name)
|
139
|
+
assert_equal('Doe4', c.n.family_name)
|
140
|
+
assert_equal('John Doe4', c.fn)
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_should_parse_sample_w3_xml_lang_on_name
|
144
|
+
c = hcard(:w3_xml_lang_on_name)
|
145
|
+
assert_equal('John', c.n.given_name)
|
146
|
+
assert_equal('Doe5', c.n.family_name)
|
147
|
+
assert_equal('John Doe5', c.fn)
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_should_parse_sample_w3_commas_in_photo_uri
|
151
|
+
c = hcard(:w3_commas_in_photo_uri)
|
152
|
+
assert_equal('Comma', c.n.given_name)
|
153
|
+
assert_equal('Photo', c.n.family_name)
|
154
|
+
assert_equal('Comma Photo', c.fn)
|
155
|
+
assert_equal('http://example/uri,with,commas', c.photo)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_parse_sample_dc
|
159
|
+
c = hcard(:dc)
|
160
|
+
assert_equal('Joe User', c.fn)
|
161
|
+
assert_equal('Joe', c.n.given_name)
|
162
|
+
assert_equal('User', c.n.family_name)
|
163
|
+
assert_equal('http://www.example.com/people/joe.jpg', c.photo)
|
164
|
+
assert_equal('123 Something Square', c.adr.street_address)
|
165
|
+
assert_equal('Cambridge', c.adr.locality)
|
166
|
+
assert_equal('MA', c.adr.region)
|
167
|
+
assert_equal('01234', c.adr.postal_code)
|
168
|
+
assert_equal('W3C/MIT', c.org.organization_name)
|
169
|
+
assert_equal('555-5555', c.tel.value)
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_should_parse_sample_jfr
|
173
|
+
c = hcard(:jfr)
|
174
|
+
assert_equal('Joe X. User', c.fn)
|
175
|
+
assert_equal('Joe X.', c.n.given_name)
|
176
|
+
assert_equal('User', c.n.family_name)
|
177
|
+
assert_equal('Somethingstrasse 123', c.adr.street_address)
|
178
|
+
assert_equal('Muenster', c.adr.locality)
|
179
|
+
assert_equal('NW', c.adr.region)
|
180
|
+
assert_equal('Germany', c.adr.country_name)
|
181
|
+
assert_equal('+49 555 5555555', c.tels[0].value)
|
182
|
+
assert_equal('+49 555 6666666', c.tels[1].value)
|
183
|
+
assert_equal('joe.user@example.com', c.email.value)
|
184
|
+
assert_equal('Example GmbH', c.org.organization_name)
|
185
|
+
assert_equal('http://example.com/tech/webdav/', c.url)
|
186
|
+
end
|
187
|
+
|
188
|
+
def hcard(name, url=nil)
|
189
|
+
Microformats::HCard.first(SOURCES[name], url)
|
190
|
+
end
|
191
|
+
|
192
|
+
SOURCES = {
|
193
|
+
:cafe_borrone => %{
|
194
|
+
<div class="item vcard">
|
195
|
+
<div class="fn org summary">Cafe Borrone</div>
|
196
|
+
<span class="adr">
|
197
|
+
<span class="street-address">1010 El Camino Real</span>,
|
198
|
+
<span class="locality">San Francisco</span>,
|
199
|
+
<span class="region">CA</span>
|
200
|
+
<span class="postal-code">94025</span>,
|
201
|
+
</span>
|
202
|
+
<span class="tel"><span class="voice work">+1-650-327-0830</span></span>;
|
203
|
+
<a class="url" href="http://cafeborrone.com">cafeborrone.com</a>
|
204
|
+
</div>},
|
205
|
+
:chn => %{
|
206
|
+
<dl class="data vcard">
|
207
|
+
<dt>Name:</dt>
|
208
|
+
<dd><span class="fn">FN</span></dd>
|
209
|
+
<dt title="Try the first ones first">E-Mail:</dt>
|
210
|
+
<dd><a class="email" href="mailto:user@example.com">user@example.com</a></dd>
|
211
|
+
</dl>
|
212
|
+
},
|
213
|
+
:n_optimized_1 => %{
|
214
|
+
<div class="vcard">
|
215
|
+
<div class="fn">John Doe</div>
|
216
|
+
</div>
|
217
|
+
},
|
218
|
+
:n_optimized_2 => %{
|
219
|
+
<div class="vcard">
|
220
|
+
<div class="fn">Doe, John</div>
|
221
|
+
</div>
|
222
|
+
},
|
223
|
+
:n_optimized_3 => %{
|
224
|
+
<div class="vcard">
|
225
|
+
<div class="fn">Doe, J</div>
|
226
|
+
</div>
|
227
|
+
},
|
228
|
+
:n_optimized_4 => %{
|
229
|
+
<div class="vcard">
|
230
|
+
<div class="fn">Doe J</div>
|
231
|
+
</div>
|
232
|
+
},
|
233
|
+
:n_optimized_5 => %{
|
234
|
+
<div class="vcard">
|
235
|
+
<div class="fn">Doe J.</div>
|
236
|
+
</div>
|
237
|
+
},
|
238
|
+
:org_optimized => %{
|
239
|
+
<tr class="vcard">
|
240
|
+
<td>
|
241
|
+
<a class="fn url" href="http://www.example.com/">John Doe</a>
|
242
|
+
</td>
|
243
|
+
<td class="title">Chairman and CEO</td>
|
244
|
+
<td class="org">American Snake Oil Company</td>
|
245
|
+
</tr>
|
246
|
+
},
|
247
|
+
:org_unoptimized => %{
|
248
|
+
<tr class="vcard">
|
249
|
+
<td>
|
250
|
+
<a class="fn url" href="http://www.example.com/">John Doe</a>
|
251
|
+
</td>
|
252
|
+
<td class="title">Chairman and CEO</td>
|
253
|
+
<td class="org organization_name">American Snake Oil Company</td>
|
254
|
+
</tr>
|
255
|
+
},
|
256
|
+
:sf => %{
|
257
|
+
<div class="vcard">
|
258
|
+
<div class="org">Company, LLC</div>
|
259
|
+
<div class="adr">
|
260
|
+
<div class="street-address">13 Acacia Ave.</div>
|
261
|
+
<div class="extended-address">Suite 9999-99</div>
|
262
|
+
<span class="locality">Altamonte Springs</span>,
|
263
|
+
<span class="region">FL</span>
|
264
|
+
|
265
|
+
<span class="postal-code">99999</span>
|
266
|
+
</div>
|
267
|
+
<div class="tel"><span class="type">voice</span>: <span class="value">(555) 555-1428</span></div>
|
268
|
+
<div class="tel"><span class="type">fax</span>: <span class="value">(555) 555-2962</span></div>
|
269
|
+
<div class="email"><a class="internet" href="mailto:user@example.com">user@example.com</a></div>
|
270
|
+
</div>
|
271
|
+
},
|
272
|
+
:w3_normal => %{
|
273
|
+
<div class="vcard">
|
274
|
+
<span class="fn">John Doe</span>
|
275
|
+
<span class="n">
|
276
|
+
<span class="given-name">John</span>
|
277
|
+
<span class="family-name">Doe</span>
|
278
|
+
</span>
|
279
|
+
<span class="note">normal card</span>
|
280
|
+
</div>
|
281
|
+
},
|
282
|
+
:w3_two_emails => %{
|
283
|
+
<div class="vcard">
|
284
|
+
<span class="fn">John Doe</span>
|
285
|
+
<span class="n">
|
286
|
+
<span class="given-name">John</span>
|
287
|
+
<span class="family-name">Doe</span>
|
288
|
+
</span>
|
289
|
+
<div class="email">doe@example</div>
|
290
|
+
|
291
|
+
<div class="email pref">john.doe@example</div>
|
292
|
+
<span class="note">card with 2 email addresses</span>
|
293
|
+
</div>
|
294
|
+
},
|
295
|
+
:w3_implied_n => %{
|
296
|
+
<div class="vcard">
|
297
|
+
<span class="fn">John Doe</span>
|
298
|
+
<span class="note">normal card, with implied N</span>
|
299
|
+
</div>
|
300
|
+
},
|
301
|
+
:w3_with_id => %{
|
302
|
+
<div class="vcard" id="thisOne">
|
303
|
+
<span class="fn">John Doe</span>
|
304
|
+
<span class="note">card with an ID</span>
|
305
|
+
</div>
|
306
|
+
},
|
307
|
+
:w3_relative_link => %{
|
308
|
+
<div class="vcard">
|
309
|
+
<a class="fn url" href="doe-pg">John Doe</a>
|
310
|
+
|
311
|
+
<span class="n">
|
312
|
+
<span class="given-name">John</span>
|
313
|
+
<span class="family-name">Doe</span>
|
314
|
+
</span>
|
315
|
+
<span class="note">card with relative link</span>
|
316
|
+
</div>
|
317
|
+
},
|
318
|
+
:w3_with_nickname => %{
|
319
|
+
<div class="vcard">
|
320
|
+
<span class="fn">John Doe</span>
|
321
|
+
<span class="n">
|
322
|
+
<span class="given-name">John</span>
|
323
|
+
<span class="family-name">Doe</span>
|
324
|
+
</span>
|
325
|
+
<span class="nickname">Johnny</span>
|
326
|
+
<span class="note">card with nickname.</span>
|
327
|
+
</div>
|
328
|
+
},
|
329
|
+
:w3_tabs_in_class_fields => %{
|
330
|
+
<div class="vcard ">
|
331
|
+
<span class="\tfn">John Doe2</span>
|
332
|
+
<span class="note">tabs in class fields</span>
|
333
|
+
</div>
|
334
|
+
},
|
335
|
+
:w3_lfs_in_class_fields => %{
|
336
|
+
<div class="vcard\nstuff">
|
337
|
+
<span class="\nfn">John Doe3</span>
|
338
|
+
<span class="note">LFs in class fields</span>
|
339
|
+
</div>
|
340
|
+
},
|
341
|
+
:w3_crs_in_class_fields => %{
|
342
|
+
<div class="vcard\rstuff">
|
343
|
+
<span class="\rfn">John Doe3</span>
|
344
|
+
<span class="note">CRs in class fields</span>
|
345
|
+
</div>
|
346
|
+
},
|
347
|
+
:w3_which_name => %{
|
348
|
+
<div class="vcard">
|
349
|
+
<a href="http://example/pg"
|
350
|
+
class="url fn" rel="contact" title="Joe Name1">Joe Name2</a>
|
351
|
+
<span class="note">which name counts?</span>
|
352
|
+
</div>
|
353
|
+
},
|
354
|
+
:w3_lang_dominating => %{
|
355
|
+
<div lang="es">
|
356
|
+
<div class="vcard">
|
357
|
+
<span class="fn">John Doe4</span>
|
358
|
+
|
359
|
+
<span class="note">lang dominating vcard</span>
|
360
|
+
</div>
|
361
|
+
</div>
|
362
|
+
},
|
363
|
+
:w3_two_langs_dominating => %{
|
364
|
+
<div lang="de">
|
365
|
+
<div lang="es">
|
366
|
+
<div class="vcard">
|
367
|
+
<span class="fn">John Doe4</span>
|
368
|
+
<span class="note">2langs dominating vcard</span>
|
369
|
+
</div>
|
370
|
+
</div>
|
371
|
+
</div>
|
372
|
+
},
|
373
|
+
:w3_xml_lang_on_name => %{
|
374
|
+
<div class="vcard">
|
375
|
+
<span class="fn" xml:lang="de">John Doe5</span>
|
376
|
+
<span class="note">xml:lang on name elt</span>
|
377
|
+
</div>
|
378
|
+
},
|
379
|
+
:w3_commas_in_photo_uri => %{
|
380
|
+
<div class="vcard">
|
381
|
+
<span class="fn">Comma Photo</span>
|
382
|
+
<span class="note">comma in photo URI</span>
|
383
|
+
<img src="http://example/uri,with,commas" alt="commas in photo uri"
|
384
|
+
class="photo"/>
|
385
|
+
</div>
|
386
|
+
},
|
387
|
+
:dc => %{
|
388
|
+
<div class="vcard">
|
389
|
+
<img style="float:left; margin-right:4px" src="http://www.example.com/people/joe.jpg" alt="photo" class="photo"/>
|
390
|
+
<a class="url fn" href="http://www.w3.org/">Joe User</a>
|
391
|
+
<div class="org">W3C/MIT</div>
|
392
|
+
|
393
|
+
<div class="adr">
|
394
|
+
<div class="street-address">123 Something Square</div>
|
395
|
+
<span class="locality">Cambridge</span>,
|
396
|
+
<span class="region">MA</span>
|
397
|
+
<span class="postal-code">01234</span>
|
398
|
+
</div>
|
399
|
+
<div class="tel">555-5555</div>
|
400
|
+
|
401
|
+
</div>
|
402
|
+
},
|
403
|
+
:jfr => %{
|
404
|
+
<address class="vcard">
|
405
|
+
<span class="vcardline"><span class="fn">Joe X. User</span>
|
406
|
+
<span class="n" style="display: none">
|
407
|
+
<span class="family-name">User</span>
|
408
|
+
<span class="given-name">Joe X.</span>
|
409
|
+
|
410
|
+
</span>
|
411
|
+
</span>
|
412
|
+
<span class="org vcardline">Example GmbH</span>
|
413
|
+
<span class="adr vcardline">
|
414
|
+
<span class="street street-address vcardline">Somethingstrasse 123</span>
|
415
|
+
<span class="vcardline">
|
416
|
+
<span class="locality">Muenster</span>, <span class="region">NW</span> <span class="postal-Code">55555</span>
|
417
|
+
|
418
|
+
</span>
|
419
|
+
<span class="country-name vcardline">Germany</span>
|
420
|
+
</span>
|
421
|
+
<span class="vcardline">Phone: <a href="tel:+495555555555">
|
422
|
+
<span class="tel"><span class="voice">+49 555 5555555</span></span>
|
423
|
+
</a></span>
|
424
|
+
<span class="vcardline">Fax: <a href="fax:+495556666666">
|
425
|
+
|
426
|
+
<span class="tel"><span class="fax">+49 555 6666666</span></span>
|
427
|
+
</a></span>
|
428
|
+
<span class="vcardline">EMail: <a href="mailto:joe.user@example.com">
|
429
|
+
<span class="email">joe.user@example.com</span></a>
|
430
|
+
</span>
|
431
|
+
<span class="vcardline">URI: <a href="http://example.com/tech/webdav/"
|
432
|
+
class="url">http://example.com/tech/webdav/</a></span>
|
433
|
+
|
434
|
+
</address>
|
435
|
+
}
|
436
|
+
}
|
437
|
+
|
438
|
+
end
|