dang 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+ require "spectory/helper"
2
+
3
+ describe "attributes" do
4
+ it "transforms Dang tag[attr=value] into HTML tag with an attribute and value" do
5
+ Dang.it("<time[datetime=1979-09-18] a while ago time>").must_equal "<time datetime='1979-09-18'>a while ago</time>"
6
+ end
7
+
8
+ it "transforms data attributes" do
9
+ Dang.it("<span[data-lon=-104.6982][data-lat=44.5889] Devil's Tower span>").must_equal "<span data-lon='-104.6982' data-lat='44.5889'>Devil's Tower</span>"
10
+ end
11
+
12
+ it "transforms nested data attributes" do
13
+ Dang.it("<span[data[lon=-104.6982][lat=44.5889]] Devil's Tower span>").must_equal "<span data-lon='-104.6982' data-lat='44.5889'>Devil's Tower</span>"
14
+ end
15
+
16
+ it "transforms boolean attributes" do
17
+ Dang.it("<option[selected] California option>").must_equal "<option selected>California</option>"
18
+ end
19
+
20
+ it "transforms attributes with whitespace in attribute values" do
21
+ Dang.it("<a[href=/][title=Internet Homesite Webpage] Home a>").must_equal "<a href='/' title='Internet Homesite Webpage'>Home</a>"
22
+ end
23
+
24
+ it "allows brackets in quoted values" do
25
+ Dang.it("<textarea[name='user[bio]'] super awesome dude, right? textarea>").must_equal "<textarea name='user[bio]'>super awesome dude, right?</textarea>"
26
+ end
27
+
28
+ it "allows quoted attributes" do
29
+ Dang.it("<html[xmlns=http://www.w3.org/1999/xhtml]['xml:lang'=en][lang=en] ... html>").must_equal "<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>...</html>"
30
+ end
31
+
32
+ it "allows quoted attribute values" do
33
+ Dang.it("<html[xmlns='http://www.w3.org/1999/xhtml'][xml:lang='en'][lang='en'] ... html>").must_equal "<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>...</html>"
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ require "spectory/helper"
2
+
3
+ describe "comments" do
4
+ it "transforms Dang <! comment !> comments into html comments" do
5
+ Dang.it("<! comment !>").must_equal "<!-- comment -->"
6
+ end
7
+
8
+ it "transforms multiline Dang <! comment !> comments into multiline html comments" do
9
+ Dang.it("<!
10
+ comment
11
+ !>").must_equal "<!--
12
+ comment
13
+ -->"
14
+ end
15
+
16
+ it "transforms trailing <! comments !> into html comments" do
17
+ Dang.it("<html markups html> <! html !>").must_equal "<html>markups</html> <!-- html -->"
18
+ end
19
+
20
+ it "transforms <! comments! !> with !s in them into html comments" do
21
+ Dang.it("<b bold text b> <! b! !>").must_equal "<b>bold text</b> <!-- b! -->"
22
+ end
23
+ end
@@ -0,0 +1,56 @@
1
+ require "spectory/helper"
2
+
3
+ # from
4
+ # <! [if IE] !>
5
+ # <! [endif] !>
6
+ # to
7
+ # <!--[if IE]>
8
+ # <![endif]-->
9
+
10
+ describe "conditional comments" do
11
+ it "transforms Dang conditional comment start into HTML conditional comment start" do
12
+ Dang.it("<! [if lt IE 6] !>").must_equal "<!--[if lt IE 6]>"
13
+ Dang.it("<! [if lte IE 6] !>").must_equal "<!--[if lte IE 6]>"
14
+ Dang.it("<! [if gt IE 6] !>").must_equal "<!--[if gt IE 6]>"
15
+ Dang.it("<! [if gte IE 6] !>").must_equal "<!--[if gte IE 6]>"
16
+ Dang.it("<! [if IE] !>").must_equal "<!--[if IE]>"
17
+ Dang.it("<! [if IE] !>abc").must_equal "<!--[if IE]>abc"
18
+ Dang.it("<! [if IE] !>").must_equal "<!--[if IE]>"
19
+ Dang.it("<! [if !IE] !>").must_equal "<!--[if !IE]>"
20
+ Dang.it("<! [if !IE 6] !>").must_equal "<!--[if !IE 6]>"
21
+ Dang.it("<! [if !IE 5.5] !>").must_equal "<!--[if !IE 5.5]>"
22
+ Dang.it("<! [if IE 5] !>").must_equal "<!--[if IE 5]>"
23
+ Dang.it("<! [if IE 5.5] !>").must_equal "<!--[if IE 5.5]>"
24
+ Dang.it("<! [if IE 5.50] !>").must_equal "<!--[if IE 5.50]>"
25
+ Dang.it("<! [if IE 6] !>").must_equal "<!--[if IE 6]>"
26
+ end
27
+
28
+ it "transforms Dang conditional comment closers" do
29
+ Dang.it("<! [endif] !>").must_equal "<![endif]-->"
30
+ end
31
+
32
+ it "transforms Dang conditional comment closers with whitespace" do
33
+ Dang.it("<! [endif] !>").must_equal "<![endif]-->"
34
+ end
35
+
36
+ it "transforms conditional comments with boolean operators" do
37
+ Dang.it("<! [if (gt IE 5)&(lt IE 7)] !>").must_equal "<!--[if (gt IE 5)&(lt IE 7)]>"
38
+ Dang.it("<! [if (IE 6)|(IE 7)] !>").must_equal "<!--[if (IE 6)|(IE 7)]>"
39
+ end
40
+
41
+ it "transforms Dang conditional comment closers with leading content" do
42
+ Dang.it("xyz <! [endif] !>").must_equal "xyz <![endif]-->"
43
+ end
44
+
45
+ it "transforms Dang conditional comment closers with directly leading content" do
46
+ Dang.it("xyz<! [endif] !>").must_equal "xyz<![endif]-->"
47
+ end
48
+
49
+ it "transforms one line Dang conditional comments" do
50
+ Dang.it("<! [if IE] !>...<! [endif] !>").must_equal "<!--[if IE]>...<![endif]-->"
51
+ end
52
+
53
+ it "allows the body to dangified" do
54
+ Dang.it("<! [if IE] !><h1 THIS IS IE h1><! [endif] !>").must_equal "<!--[if IE]><h1>THIS IS IE</h1><![endif]-->"
55
+ end
56
+ end
@@ -0,0 +1,11 @@
1
+ require "spectory/helper"
2
+
3
+ describe "data attributes" do
4
+ it "transforms normal data attributes comments" do
5
+ Dang.it("<span[data-foo=party][data-bar=time] now span>").must_equal "<span data-foo='party' data-bar='time'>now</span>"
6
+ end
7
+
8
+ it "transforms nested data attributes comments" do
9
+ Dang.it("<span[data[foo=party][bar=time]] now span>").must_equal "<span data-foo='party' data-bar='time'>now</span>"
10
+ end
11
+ end
@@ -0,0 +1,38 @@
1
+ require "spectory/helper"
2
+
3
+ describe "doctypes" do
4
+ # based largely on HAML's doctype with a minor variation
5
+ # http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#doctype_
6
+
7
+ it "transforms !!! into html doctype" do
8
+ Dang.it("!!!").must_equal "<!doctype html>"
9
+ Dang.it("!!! html5").must_equal "<!doctype html>"
10
+ end
11
+
12
+ it "transforms HTML4 doctypes" do
13
+ Dang.it("!!! html4").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
14
+ Dang.it("!!! html4 transitional").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
15
+ Dang.it("!!! html4 strict").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
16
+ Dang.it("!!! html4 frameset").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
17
+ end
18
+
19
+ it "transforms XHTML doctypes" do
20
+ Dang.it("!!! xhtml 1").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
21
+ Dang.it("!!! xhtml 1 transitional").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
22
+ Dang.it("!!! xhtml 1 strict").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
23
+ Dang.it("!!! xhtml 1 frameset").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
24
+ Dang.it("!!! xhtml 1.1").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
25
+ Dang.it("!!! xhtml 1.1 basic").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">'
26
+ Dang.it("!!! xhtml 1.2 mobile").must_equal '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
27
+ Dang.it("!!! xhtml rdfa").must_equal '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">'
28
+ Dang.it("!!! xhtml 5").must_equal '<!DOCTYPE html>'
29
+ end
30
+
31
+ it "transforms xml utf8 encoding" do
32
+ Dang.it("!!! xml iso-8859-1").must_equal "<?xml version='1.0' encoding='iso-8859-1' ?>"
33
+ end
34
+
35
+ it "transforms doctype AND a tag" do
36
+ Dang.it("!!!\n<html yo html>").must_equal "<!doctype html>\n<html>yo</html>"
37
+ end
38
+ end
@@ -0,0 +1,33 @@
1
+ require "spectory/helper"
2
+
3
+ describe "embedded ruby" do
4
+ it "farms out to Ruby for and does not return any output" do
5
+ Dang.it("<time <: Time.now :> time>").must_equal "<time></time>"
6
+ end
7
+
8
+ it "farms out to Ruby for and prints the returned output" do
9
+ t = Time.now
10
+ Dang.it("<time <| t |> time>", binding).must_equal "<time>#{t}</time>"
11
+ end
12
+
13
+ it "handles both printing and non-printing ruby" do
14
+ dang = "<: 5.times do |i| :><| i |><: end :>"
15
+ html = "01234"
16
+ Dang.it(dang).must_equal html
17
+ end
18
+
19
+ it "transforms Dang, printing Ruby and non-printing Ruby" do
20
+ dang = "<ul <: 5.times do |i| :><li <| i |> li><: end :> ul>"
21
+ html = "<ul><li>0</li><li>1</li><li>2</li><li>3</li><li>4</li></ul>"
22
+ Dang.it(dang).must_equal html
23
+ end
24
+
25
+ it "handles dang inside a p" do
26
+ t = Time.now
27
+
28
+ dang = "<x The time is <| Time.now |> x>"
29
+ html = "<x>The time is #{t}</x>"
30
+
31
+ Dang.it(dang, binding).must_equal html
32
+ end
33
+ end
@@ -0,0 +1,13 @@
1
+ require "spectory/helper"
2
+
3
+ describe "files" do
4
+ it "can transform a whole document" do
5
+ dang_path = File.expand_path("../files/iamshane-com.html.dang", __FILE__)
6
+ html_path = File.expand_path("../files/iamshane-com.html", __FILE__)
7
+
8
+ dang = File.open(dang_path, "rb").read
9
+ html = File.open(html_path, "rb").read
10
+
11
+ Dang.it(dang).must_equal html
12
+ end
13
+ end
@@ -0,0 +1,229 @@
1
+ <!doctype html>
2
+ <html dir='ltr' lang='en-US'><head>
3
+ <meta charset='UTF-8' />
4
+ <title>The Internet Home Site of Shane Becker</title>
5
+ <script src='/javascripts/html5shiv.js?1293826648'></script>
6
+ <script src='/javascripts/jquery.js?1293826648'></script>
7
+ <script src='/javascripts/paging_keys.js?1293826648'></script>
8
+ <link href='/stylesheets/reset.css?1293826648' media='screen' rel='stylesheet' />
9
+ <link href='/stylesheets/application.css?1293826648' media='screen' rel='stylesheet' />
10
+ <link href='/feed' rel='alternate' title='I Am Shane Becker' type='application/atom+xml' />
11
+ <link id='short_url' href='http://sbb.me' rel='shorturl' type='text/html' />
12
+ <meta name='csrf-param' content='authenticity_token' />
13
+ <meta name='csrf-token' content='wPLyoaxee/y1v+3RUGYzcZqH1fbU526Nf7qYYoJakaY=' />
14
+
15
+ <style>
16
+ body {
17
+ background: red;
18
+ }
19
+
20
+ p:after {
21
+ content: "style>";
22
+ }
23
+ </style>
24
+ </head>
25
+
26
+ <body>
27
+ <header class='site'>
28
+ <h1>I Am Shane Becker</h1>
29
+ </header>
30
+
31
+ <h2 id='callout'><a href='/products/your-slides-suck'>NEW <strong>$15 Screencast</strong> Your Slides Suck</a></h2>
32
+
33
+ <ol class='hfeed'>
34
+
35
+
36
+ <li>thing one to show non/printing ruby</li>
37
+
38
+ <li>thing two to show non/printing ruby</li>
39
+
40
+ <li>dinosaur to show non/printing ruby</li>
41
+
42
+
43
+ <li>
44
+ <article class='status hentry' id='status_1191'>
45
+ <header>
46
+ <h1 class='entry-content entry-title'>
47
+ Growing is Forever :
48
+ <a class='link' rel='external' href='http://t.co/qc3LDIN'>http://t.co/qc3LDIN</a>
49
+ /cc
50
+ <a class='at_username' rel='external' href='http://twitter.com/tjnelsonjr'>@tjnelsonjr</a>
51
+ </h1>
52
+ </header>
53
+
54
+ <footer>
55
+ <h1 class='vcard'>
56
+ <a class='email' href='mailto:veganstraightedge@gmail.com'><span class='author fn'>Shane Becker</span></a>
57
+ <span class='verb'>published</span>
58
+ <span class='preposition'>this</span>
59
+ <span class='object-type'>status</span>
60
+ <span class='preposition'>on</span>
61
+
62
+ <time datetime='2011-02-06T06:02' pubdate><a class='bookmark' href='/statuses/2011/2/5/4' rel='bookmark'>February, 06, 2011
63
+ <span class='preposition'>at</span>
64
+ 06:38:40
65
+ </a>
66
+ </time>
67
+ </h1> <!-- .vcard -->
68
+
69
+ <table class='urls'>
70
+ <tr>
71
+ <th><label class='short_url' for='short_url_status_1191'>Short URL</label></th>
72
+ <th><label class='long_url' for='long_url_status_1191'>Long URL</label></th>
73
+ </tr>
74
+ <tr>
75
+ <td><input class='short_url' id='short_url_status_1191' name='name_url' type='url' value='http://sbb.me/s4AA4' /></td>
76
+ <td><input class='long_url' id='long_url_status_1191' name='long_url' type='url' value='http://iamshane.com/statuses/2011/2/5/4' /></td>
77
+ </tr>
78
+ </table> <!-- .urls -->
79
+
80
+ <h3 class='redistribution'>
81
+ Also published at
82
+ <a href='http://twitter.com/veganstraightedge/statuses/34138891636178944' rel='me'>http://twitter.com/veganstraightedge/statuses/34138891636178944</a>
83
+ </h3> <!-- .redistribution -->
84
+ </footer> <!-- footer -->
85
+ </article> <!-- article -->
86
+ </li> <!-- li -->
87
+
88
+ <li>
89
+ <article class='status hentry' id='status_800'>
90
+ <header>
91
+ <h1 class='entry-content entry-title'>
92
+ <a class='at_username' rel='external' href='http://twitter.com/gilesgoatboy'>@gilesgoatboy</a>
93
+ Oh shit. You're right. It was the jigga man. My bad.
94
+ </h1>
95
+ </header>
96
+
97
+ <footer>
98
+ <h1 class='vcard'>
99
+ <a class='email' href='mailto:veganstraightedge@gmail.com'><span class='author fn'>Shane Becker</span></a>
100
+ <span class='verb'>published</span>
101
+ <span class='preposition'>this</span>
102
+ <span class='object-type'>status</span>
103
+ <span class='preposition'>on</span>
104
+
105
+ <time datetime='2011-02-06T04:02' pubdate><a class='bookmark' href='/statuses/2011/2/5/3' rel='bookmark'>February, 06, 2011
106
+ <span class='preposition'>at</span>
107
+ 04:18:28
108
+ </a>
109
+ </time>
110
+ </h1> <!-- .vcard -->
111
+
112
+ <table class='urls'>
113
+ <tr>
114
+ <th><label class='short_url' for='short_url_status_800'>Short URL</label></th>
115
+ <th><label class='long_url' for='long_url_status_800'>Long URL</label></th>
116
+ </tr>
117
+ <tr>
118
+ <td><input class='short_url' id='short_url_status_800' name='name_url' type='url' value='"http://sbb.me/s4AA3' /></td>
119
+ <td><input class='long_url' id='long_url_status_800' name='long_url' type='url' value='"http://iamshane.com/statuses/2011/2/5/3' /></td>
120
+ </tr>
121
+ </table> <!-- .urls -->
122
+
123
+ <h3 class='redistribution'>
124
+ Also published at
125
+ <a href='http://twitter.com/veganstraightedge/statuses/34103607427076098' rel='me'>http://twitter.com/veganstraightedge/statuses/34103607427076098</a>
126
+ </h3> <!-- .redistribution -->
127
+ </footer> <!-- footer -->
128
+ </article> <!-- article -->
129
+ </li> <!-- li -->
130
+
131
+ </ol> <!-- ol.hfeed -->
132
+
133
+ <div class='pagination'>
134
+ <span class='disabled previous_page'>&#8592; Previous</span>
135
+ <em>1</em>
136
+ <a href='/page/2' rel='next'>2</a>
137
+ <a href='/page/3'>3</a>
138
+ <a href='/page/4'>4</a>
139
+ <a href='/page/5'>5</a>
140
+ <a href='/page/6'>6</a>
141
+ <a href='/page/7'>7</a>
142
+ <a href='/page/8'>8</a>
143
+ <a href='/page/9'>9</a>
144
+ <span class='gap'>&hellip;</span>
145
+ <a href='/page/415'>415</a>
146
+ <a href='/page/416'>416</a>
147
+ <a class='next_page' href='/page/2' rel='next'>Next &#8594;</a>
148
+ </div> <!-- .pagination -->
149
+
150
+ <footer class='site' id='bottom'>
151
+ <h1>A Bit More About Me&hellip; /h1>
152
+ <p>
153
+ My name is <span class='fn'><span class='given-name'>Shane</span> <span class='family-name'>Becker</span></span>.
154
+ I live in <span class='adr'><span class='locality'>Los Angeles</span>, <span class='region'>CA</span></span>.
155
+ I make websites for fun and for profit.
156
+ I&rsquo;m still vegan, still straightedge. I&rsquo;m an anarchist and an atheist.
157
+ My <a href='http://flickr.com/photos/veganstraightedge/tags/civ' rel='me'>dog</a> is
158
+ <a href='http://twitter.com/civthedog' rel='me'>Civ</a>.
159
+ </p>
160
+
161
+ <h2>
162
+ I&rsquo;ve made some things (sometimes along side
163
+ <a href='http://eliduke.com' rel='friend'>Eli Duke</a> and
164
+ <a href='http://iambookis.com' rel='friend'>Bookis Smuin</a>).
165
+ </h2>
166
+ <ul>
167
+ <li><a href='http://zinedistro.org' rel='me'>Zine Distro</a></li>
168
+ <li><a href='http://listyourlist.com' rel='me'>ListYourList</a></li>
169
+ <li><a href='http://theresistancearmy.com' rel='me'>The Resistance Army</a></li>
170
+ <li><a href='http://foodsquatting.com' rel='me'>Food Squatting</a></li>
171
+ <li><a href='http://thegreatamericanaroadtrip.com' rel='me'>The Great Americana Road Trip</a></li>
172
+ <li><a href='http://iamshanebecker.com' rel='me'>My Resume</a></li>
173
+ </ul>
174
+
175
+ <h2>I have profiles on other websites.</h2>
176
+ <ul>
177
+ <li><a href='http://twitter.com/veganstraightedge' rel='me'>Twitter</a></li>
178
+ <li><a href='http://flickr.com/veganstraightedge' rel='me'>Flickr</a></li>
179
+ <li><a href='http://facebook.com/veganstraightedge' rel='me'>Facebook</a></li>
180
+ <li><a href='http://vimeo.com/veganstraightedg' rel='me'>Vimeo</a></li>
181
+ <li><a href='http://youtube.com/user/veganstraightedge' rel='me'>YouTube</a></li>
182
+ <li><a href='http://dribbble.com/players/veganstraightedge' rel='me'>Dribble</a></li>
183
+ <li><a href='http://foursquare.com/user/veganstraightedge' rel='me'>FourSquare</a></li>
184
+ <li><a href='http://gowalla.com/users/seanbonner' rel='me'>Gowalla</a></li>
185
+ <li><a href='http://last.fm/user/vegansxe' rel='me'>Last.FM</a></li>
186
+ <li><a href='http://listyourlist.com/veganstraightedge' rel='me'>ListYourList</a></li>
187
+ <li><a href='http://github.com/veganstraightedge' rel='me'>GitHub</a></li>
188
+ <li><a href='http://www.google.com/profiles/veganstraightedge' rel='me'>Google Profile</a></li>
189
+ <li><a href='http://del.icio.us/veganstraightedge' rel='me'>Delicious</a></li>
190
+ <li><a href='http://del.icio.us/shaners' rel='me'>Delicious</a></li>
191
+ <li><a href='http://pinboard.in/u:veganstraightedge' rel='me'>Pinboard</a></li>
192
+ </ul>
193
+
194
+ <p id='contact'>
195
+ You can contact me by email (<a class='email' href='mailto:veganstraightedge@gmail.com'>veganstraightedge@gmail.com</a>)
196
+ or by phone (<span class='tel'>801-898-9481</span>). Please, no spam.
197
+ You can <a href='http://h2vx.com/vcf/iamshane.com'>download my vCard</a> for your address book.
198
+ All content on this site (unless created by someone else) is licensed under
199
+ <a href='http://creativecommons.org/licenses/by/2.0/deed.en' rel='license'>Creative Commons Attribution License</a>
200
+ which means you can republish whatever you want as long as you attribute me and link back to the original page.
201
+ </p>
202
+
203
+ <p id='no_comments'>
204
+ A quick note about comments on posts. The short and long of it is, I&rsquo;m over comments.
205
+ They&rsquo;re a lot of work for very little benefit. In migrating my blog posts to this version of my site,
206
+ I threw out most of the comments which were total trash or meaningless drivel.
207
+ I&rsquo;ve made a few exceptions where I felt like they added some value.
208
+ Comments are off and are staying off. If you&rsquo;ve got something to say to me that&rsquo;s private,
209
+ <a href='mailto:veganstraightedge@gmail.com'>email me</a>. If you want to say it in the public,</a>
210
+ <a href='http://twitter.com/home?status=@veganstraightedge%20-'>write it on Twitter</a>
211
+ or your own blog (they&rsquo;re
212
+ <a href='http://wordpress.com'>free</a> and <a href='http://tumblr.com'>easy</a>).
213
+ </p>
214
+ </footer> <!-- footer -->
215
+
216
+ <script>
217
+ var _gaq = _gaq || [];
218
+ _gaq.push(['_setAccount', 'UA-193482-20']);
219
+ _gaq.push(['_trackPageview']);
220
+
221
+ (function() {
222
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
223
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
224
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
225
+ })();
226
+ </script>
227
+
228
+ </body> <!-- body -->
229
+ </html> <!-- html -->