ballonizer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/examples/ballonizer_app/config.ru +59 -0
  3. data/examples/ballonizer_app/index.html +159 -0
  4. data/examples/ballonizer_js_module/index.html +196 -0
  5. data/lib/assets/javascripts/ballonizer.js +482 -0
  6. data/lib/assets/stylesheets/ballonizer.css +78 -0
  7. data/lib/ballonizer.rb +201 -36
  8. data/spec/ballonizer_spec.rb +153 -2
  9. data/spec/javascripts/ballonizer_spec.js +568 -0
  10. data/spec/javascripts/fixtures/ballonized-xkcd-with-anchor-in-image.html +163 -0
  11. data/spec/javascripts/fixtures/ballonized-xkcd-with-ballons.html +163 -0
  12. data/spec/javascripts/fixtures/ballonized-xkcd-without-ballons.html +163 -0
  13. data/spec/javascripts/fixtures/xkcd.css +191 -0
  14. data/spec/javascripts/helpers/jasmine-jquery.js +660 -0
  15. data/spec/javascripts/helpers/jquery.simulate-ext.js +32 -0
  16. data/spec/javascripts/helpers/jquery.simulate.drag-n-drop.js +583 -0
  17. data/spec/javascripts/helpers/jquery.simulate.js +328 -0
  18. data/spec/javascripts/support/jasmine.yml +99 -0
  19. data/vendor/assets/javascripts/jquery-2.0.1.js +8837 -0
  20. data/vendor/assets/javascripts/jquery-ui-1.10.3.custom.min.js +6 -0
  21. data/vendor/assets/javascripts/jquery.json-2.4.min.js +24 -0
  22. data/vendor/assets/stylesheets/ui-lightness/images/animated-overlay.gif +0 -0
  23. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  24. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  25. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  26. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  27. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  28. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  29. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  30. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  31. data/vendor/assets/stylesheets/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  32. data/vendor/assets/stylesheets/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  33. data/vendor/assets/stylesheets/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  34. data/vendor/assets/stylesheets/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  35. data/vendor/assets/stylesheets/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  36. data/vendor/assets/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  37. data/vendor/assets/stylesheets/ui-lightness/jquery-ui-1.10.3.custom.min.css +5 -0
  38. metadata +51 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b02cccd0f9fc456b32c0172a91aa790b3d06132
4
- data.tar.gz: 0ca2e4a60db0d971dc0b1aa443e208efef0d7a5b
3
+ metadata.gz: b5d1bbd1e907d9bca6cf807a94caefc63a94b164
4
+ data.tar.gz: fe4987187244948facaa3a1bcf89b4240f1a385a
5
5
  SHA512:
6
- metadata.gz: f6fdc80bedf5f03cca40990d7608acd67e402f6c4e21923610389c20a285a2639a50eedd8456e983584303bf405e5ce1cf7764cce9f35a9e87e6887dbb965027
7
- data.tar.gz: d599207ecde8c8dd194a05c5b4582ec0ccda398def397d26618a9526cd1242a91e3197c18bbea8d0b279d3b640dd3f8050dc23c6c1e11cddea82a1d681396b5e
6
+ metadata.gz: 81fbd87f25f016c28f7233a03c7fb04eef1634c52fae9211f451283eb2637b484c1b7c9b0118b1a2f75e54c1cb931a7ac60ab7fa08be256694cc11eb8f841362
7
+ data.tar.gz: ec5b3571b0f30841b5d8f74bddab3c9d4e819c5959914fd0085d6b8a872ad08bc4a9ceeb5b3dde4229c9ef9110d252f35afc934ad3c0d0214842e657112dac19
@@ -0,0 +1,59 @@
1
+ require 'sequel'
2
+ require 'sqlite3'
3
+ require 'sprockets'
4
+ require 'ballonizer'
5
+
6
+ path_rake_to_app = 'examples/ballonizer_app/'
7
+ db_name = 'test.db'
8
+ db_path = "#{path_rake_to_app}#{db_name}"
9
+ db_uri = "sqlite://#{db_path}"
10
+
11
+ DB = nil
12
+ if File.exists?(db_path)
13
+ DB = Sequel.connect(db_uri)
14
+ else
15
+ DB = Sequel.connect(db_uri)
16
+ Ballonizer.create_tables(DB)
17
+ end
18
+
19
+ html_name = 'index.html'
20
+ html = File.read("#{path_rake_to_app}#{html_name}")
21
+
22
+ ballonizer = Ballonizer.new(DB, {
23
+ form_handler_url: '/request_handler',
24
+ add_required_css: true,
25
+ css_asset_path_for_link: '/assets',
26
+ add_required_js_libs_for_edition: true,
27
+ js_asset_path_for_link: '/assets'
28
+ })
29
+
30
+ app = Rack::Builder.new do
31
+
32
+ map '/' do
33
+ run(lambda do | env |
34
+ # the url is needed to make relative paths to images absolute
35
+ request = Rack::Request.new(env)
36
+ ballonized_page = ballonizer.ballonize_page(html, request.url)
37
+
38
+ [200, {}, [ballonized_page]]
39
+ end)
40
+ end
41
+
42
+ map '/assets' do
43
+ run Ballonizer.assets_app
44
+ end
45
+
46
+ map '/request_handler' do
47
+ run(lambda do | env |
48
+ begin
49
+ ballonizer.process_submit(env)
50
+ [200, {}, ['your changes are made with success']]
51
+ rescue Ballonizer::SubmitError => e
52
+ [200, {}, [e.message]]
53
+ end
54
+ end)
55
+ end
56
+ end
57
+
58
+ run app
59
+
@@ -0,0 +1,159 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+ <head>
5
+ <title>Um título qualquer</title>
6
+ <meta http-equiv="content-type"
7
+ content="application/xhtml+xml; charset=UTF-8" />
8
+ <link rel="stylesheet" type="text/css"
9
+ href="http://imgs.xkcd.com/static/styles_short_beta.css"
10
+ title="Default" />
11
+ </head>
12
+ <body>
13
+ <div id="topContainer">
14
+ <div id="topLeft">
15
+ <ul>
16
+ <li>
17
+ <a href="http://xkcd.com/archive">Archive</a>
18
+ </li>
19
+ <li>
20
+ <a href="http://what-if.xkcd.com">What If?</a>
21
+ </li>
22
+ <li>
23
+ <a href="http://blag.xkcd.com">Blag</a>
24
+ </li>
25
+ <li>
26
+ <a href="http://store.xkcd.com/">Store</a>
27
+ </li>
28
+ <li>
29
+ <a rel="author" href="http://xkcd.com/about">About</a>
30
+ </li>
31
+ </ul>
32
+ </div>
33
+ <div id="topRight">
34
+ <div id="masthead">
35
+ <span>
36
+ <a href="http://xkcd.com/">
37
+ <img src="http://imgs.xkcd.com/static/terrible_small_logo.png"
38
+ alt="xkcd.com logo" height="83" width="185" />
39
+ </a>
40
+ </span>
41
+ <span id="slogan">A webcomic of romance,
42
+ <br />sarcasm, math, and language.</span>
43
+ </div>
44
+ <div id="news">You can get the Subways comic as a
45
+ <a href="http://store-xkcd-com.myshopify.com/products/subways">
46
+ poster</a>!</div>
47
+ </div>
48
+ <div id="bgLeft" class="bg box"></div>
49
+ <div id="bgRight" class="bg box"></div>
50
+ </div>
51
+ <div id="middleContainer" class="box">
52
+ <div id="ctitle">Cells</div>
53
+ <ul class="comicNav">
54
+ <li>
55
+ <a href="http://xkcd.com/1/">|&lt;</a>
56
+ </li>
57
+ <li>
58
+ <a rel="prev" href="http://xkcd.com/1216/" accesskey="p">&lt; Prev</a>
59
+ </li>
60
+ <li>
61
+ <a href="http://dynamic.xkcd.com/random/comic/">Random</a>
62
+ </li>
63
+ <li>
64
+ <a rel="next" href="http://xkcd.com/#" accesskey="n">Next &gt;</a>
65
+ </li>
66
+ <li>
67
+ <a href="http://xkcd.com/">&gt;|</a>
68
+ </li>
69
+ </ul>
70
+ <div id="comic">
71
+ <img class="to_ballonize" src="http://imgs.xkcd.com/comics/cells.png"
72
+ title="Now, if it selectively kills cancer cells in a petri dish, you can be sure it's at least a great breakthrough for everyone suffering from petri dish cancer."
73
+ width="218px"
74
+ height="339px"
75
+ alt="Cells" />
76
+ </div>
77
+ <ul class="comicNav">
78
+ <li>
79
+ <a href="http://xkcd.com/1/">|&lt;</a>
80
+ </li>
81
+ <li>
82
+ <a rel="prev" href="http://xkcd.com/1216/" accesskey="p">&lt; Prev</a>
83
+ </li>
84
+ <li>
85
+ <a href="http://dynamic.xkcd.com/random/comic/">Random</a>
86
+ </li>
87
+ <li>
88
+ <a rel="next" href="http://xkcd.com/#" accesskey="n">Next &gt;</a>
89
+ </li>
90
+ <li>
91
+ <a href="http://xkcd.com/">&gt;|</a>
92
+ </li>
93
+ </ul>
94
+ <br />Permanent link to this comic: http://xkcd.com/1217/
95
+ <br />Image URL (for hotlinking/embedding):
96
+ http://imgs.xkcd.com/comics/cells.png
97
+ <div id="transcript" style="display: none">When you see a claim
98
+ that a common drug or vitamin "kills cancer cells in a petri
99
+ dish," keep in mind: [[A scientist stands on a chair next to a
100
+ desk, pointing a gun at a petri dish. There is a microscope on
101
+ the desk.]] So does a handgun. {{Title text: Now, if it
102
+ selectively kills cancer cells in a petri dish, you can be sure
103
+ it's at least a great breakthrough for everyone suffering from
104
+ petri dish cancer.}}</div></div>
105
+ <div id="bottom" class="box">
106
+ <img src="http://imgs.xkcd.com/s/a899e84.jpg" width="520"
107
+ height="100" alt="Selected Comics" usemap="#comicmap" />
108
+ <map id="comicmap">
109
+ <!-- http://code.google.com/p/chromium/issues/detail?id=108489 Might be MIME dependant. -->
110
+ <area shape="rect" coords="0,0,100,100" href="http://xkcd.com/150/"
111
+ alt="Grownups" />
112
+ <area shape="rect" coords="104,0,204,100" href="http://xkcd.com/730/"
113
+ alt="Circuit Diagram" />
114
+ <area shape="rect" coords="208,0,308,100" href="http://xkcd.com/162/"
115
+ alt="Angular Momentum" />
116
+ <area shape="rect" coords="312,0,412,100" href="http://xkcd.com/688/"
117
+ alt="Self-Description" />
118
+ <area shape="rect" coords="416,0,520,100" href="http://xkcd.com/556/"
119
+ alt="Alternative Energy Revolution" />
120
+ </map>
121
+ <a href="http://xkcd.com/rss.xml">RSS Feed</a>-
122
+ <a href="http://xkcd.com/atom.xml">Atom Feed</a></div>
123
+ <br />
124
+ <div id="comicLinks">Comics I enjoy:
125
+ <br />
126
+ <a href="http://threewordphrase.com/">Three Word Phrase</a>,
127
+ <a href="http://oglaf.com/">Oglaf</a>(nsfw),
128
+ <a href="http://www.smbc-comics.com/">SMBC</a>,
129
+ <a href="http://www.qwantz.com">Dinosaur Comics</a>,
130
+ <a href="http://www.asofterworld.com">A Softer World</a>,
131
+ <a href="http://buttersafe.com/">Buttersafe</a>,
132
+ <a href="http://pbfcomics.com/">Perry Bible Fellowship</a>,
133
+ <a href="http://questionablecontent.net/">Questionable
134
+ Content</a>,
135
+ <a href="http://www.buttercupfestival.com/">Buttercup
136
+ Festival</a></div>
137
+ <p>Warning: this comic occasionally contains strong language
138
+ (which may be unsuitable for children), unusual humor (which
139
+ may be unsuitable for adults), and advanced mathematics
140
+ (which may be unsuitable for liberal-arts majors).</p>
141
+ <div id="footnote">BTC 1NEPgrUmed3VyXpqbYZom7YVJ8MozYrNWx
142
+ <br />We did not invent the algorithm. The algorithm
143
+ consistently finds Jesus. The algorithm killed Jeeves.
144
+ <br />The algorithm is banned in China. The algorithm is from
145
+ Jersey. The algorithm constantly finds Jesus.
146
+ <br />This is not the algorithm. This is close.</div>
147
+ <div id="licenseText">
148
+ <p>This work is licensed under a
149
+ <a href="http://creativecommons.org/licenses/by-nc/2.5/">
150
+ Creative Commons Attribution-NonCommercial 2.5
151
+ License</a>.</p>
152
+ <p>This means you're free to copy and share these comics
153
+ (but not to sell them).
154
+ <a rel="license" href="http://xkcd.com/license.html">More details</a>.</p>
155
+ </div>
156
+ </div>
157
+ </body>
158
+ </html>
159
+
@@ -0,0 +1,196 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+ <head>
5
+ <title>Um título qualquer</title>
6
+ <meta http-equiv="content-type"
7
+ content="application/xhtml+xml; charset=UTF-8" />
8
+ <link rel="stylesheet" type="text/css"
9
+ href="http://imgs.xkcd.com/static/styles_short_beta.css"
10
+ title="Default" />
11
+ <link rel="stylesheet" type="text/css"
12
+ href="../../lib/ballonizer/ui-lightness/jquery-ui-1.10.3.custom.min.css" />
13
+ <link rel="stylesheet" type="text/css"
14
+ href="../../lib/ballonizer/ballonizer.css" />
15
+ <script type="text/javascript"
16
+ src="../../vendor/assets/javascripts/jquery-2.0.1.js"></script>
17
+ <script type="text/javascript"
18
+ src="../../vendor/assets/javascripts/jquery.json-2.4.min.js"></script>
19
+ <script type="text/javascript"
20
+ src="../../vendor/assets/javascripts/jquery-ui-1.10.3.custom.min.js"></script>
21
+ <script type="text/javascript"
22
+ src="../../lib/ballonizer/ballonizer.js"></script>
23
+ <script type="text/javascript">
24
+ $(document).ready(function() {
25
+ Ballonizer('/path/to/form/submit',
26
+ '.ballonizer_image_container',
27
+ $('body'));
28
+ })
29
+ </script>
30
+ </head>
31
+ <body>
32
+ <div id="topContainer">
33
+ <div id="topLeft">
34
+ <ul>
35
+ <li>
36
+ <a href="http://xkcd.com/archive">Archive</a>
37
+ </li>
38
+ <li>
39
+ <a href="http://what-if.xkcd.com">What If?</a>
40
+ </li>
41
+ <li>
42
+ <a href="http://blag.xkcd.com">Blag</a>
43
+ </li>
44
+ <li>
45
+ <a href="http://store.xkcd.com/">Store</a>
46
+ </li>
47
+ <li>
48
+ <a rel="author" href="http://xkcd.com/about">About</a>
49
+ </li>
50
+ </ul>
51
+ </div>
52
+ <div id="topRight">
53
+ <div id="masthead">
54
+ <span>
55
+ <a href="http://xkcd.com/">
56
+ <img src="http://imgs.xkcd.com/static/terrible_small_logo.png"
57
+ alt="xkcd.com logo" height="83" width="185" />
58
+ </a>
59
+ </span>
60
+ <span id="slogan">A webcomic of romance,
61
+ <br />sarcasm, math, and language.</span>
62
+ </div>
63
+ <div id="news">You can get the Subways comic as a
64
+ <a href="http://store-xkcd-com.myshopify.com/products/subways">
65
+ poster</a>!</div>
66
+ </div>
67
+ <div id="bgLeft" class="bg box"></div>
68
+ <div id="bgRight" class="bg box"></div>
69
+ </div>
70
+ <div id="middleContainer" class="box">
71
+ <div id="ctitle">Cells</div>
72
+ <ul class="comicNav">
73
+ <li>
74
+ <a href="http://xkcd.com/1/">|&lt;</a>
75
+ </li>
76
+ <li>
77
+ <a rel="prev" href="http://xkcd.com/1216/" accesskey="p">&lt; Prev</a>
78
+ </li>
79
+ <li>
80
+ <a href="http://dynamic.xkcd.com/random/comic/">Random</a>
81
+ </li>
82
+ <li>
83
+ <a rel="next" href="http://xkcd.com/#" accesskey="n">Next &gt;</a>
84
+ </li>
85
+ <li>
86
+ <a href="http://xkcd.com/">&gt;|</a>
87
+ </li>
88
+ </ul>
89
+ <div id="comic">
90
+ <div class="ballonizer_image_container"><p style="left: 0px; top: 0px; width: 218px; height: 82px;" class="ballonizer_ballon" >When you see a claim that a common drug or vitamin "kills cancer cells in a petri dish", keep in mind:</p><p style="top: 319px; left: 21px; width: 170px; height: 19px;" class="ballonizer_ballon">So does a handgun.</p><img src="http://imgs.xkcd.com/comics/cells.png"
91
+ title="Now, if it selectively kills cancer cells in a petri dish, you can be sure it's at least a great breakthrough for everyone suffering from petri dish cancer."
92
+ width="218px"
93
+ height="339px"
94
+ alt="Cells" /></div>
95
+ </div>
96
+ <ul class="comicNav">
97
+ <li>
98
+ <a href="http://xkcd.com/1/">|&lt;</a>
99
+ </li>
100
+ <li>
101
+ <a rel="prev" href="http://xkcd.com/1216/" accesskey="p">&lt; Prev</a>
102
+ </li>
103
+ <li>
104
+ <a href="http://dynamic.xkcd.com/random/comic/">Random</a>
105
+ </li>
106
+ <li>
107
+ <a rel="next" href="http://xkcd.com/#" accesskey="n">Next &gt;</a>
108
+ </li>
109
+ <li>
110
+ <a href="http://xkcd.com/">&gt;|</a>
111
+ </li>
112
+ </ul>
113
+ <br />Permanent link to this comic: http://xkcd.com/1217/
114
+ <br />Image URL (for hotlinking/embedding):
115
+ http://imgs.xkcd.com/comics/cells.png
116
+ <div id="transcript" style="display: none">When you see a claim
117
+ that a common drug or vitamin "kills cancer cells in a petri
118
+ dish," keep in mind: [[A scientist stands on a chair next to a
119
+ desk, pointing a gun at a petri dish. There is a microscope on
120
+ the desk.]] So does a handgun. {{Title text: Now, if it
121
+ selectively kills cancer cells in a petri dish, you can be sure
122
+ it's at least a great breakthrough for everyone suffering from
123
+ petri dish cancer.}}</div></div>
124
+ <div id="bottom" class="box">
125
+ <img src="http://imgs.xkcd.com/s/a899e84.jpg" width="520"
126
+ height="100" alt="Selected Comics" usemap="#comicmap" />
127
+ <map id="comicmap">
128
+ <!-- http://code.google.com/p/chromium/issues/detail?id=108489 Might be MIME dependant. -->
129
+ <area shape="rect" coords="0,0,100,100" href="http://xkcd.com/150/"
130
+ alt="Grownups" />
131
+ <area shape="rect" coords="104,0,204,100" href="http://xkcd.com/730/"
132
+ alt="Circuit Diagram" />
133
+ <area shape="rect" coords="208,0,308,100" href="http://xkcd.com/162/"
134
+ alt="Angular Momentum" />
135
+ <area shape="rect" coords="312,0,412,100" href="http://xkcd.com/688/"
136
+ alt="Self-Description" />
137
+ <area shape="rect" coords="416,0,520,100" href="http://xkcd.com/556/"
138
+ alt="Alternative Energy Revolution" />
139
+ </map>
140
+ <div>Search comic titles and transcripts:
141
+ <script type="text/javascript" src="http//www.google.com/jsapi">
142
+ </script>
143
+ <script type="text/javascript">google.load('search',
144
+ '1');google.setOnLoadCallback(function()
145
+ {google.search.CustomSearchControl.attachAutoCompletion('012652707207066138651:zudjtuwe28q',document.getElementById('q'),'cse-search-box');});</script>
146
+ <form action="//www.google.com/cse" id="cse-search-box">
147
+ <div>
148
+ <input type="hidden" name="cx"
149
+ value="012652707207066138651:zudjtuwe28q" />
150
+ <input type="hidden" name="ie" value="UTF-8" />
151
+ <input type="text" name="q" id="q" size="31" />
152
+ <input type="submit" name="sa" value="Search" />
153
+ </div>
154
+ </form>
155
+ <script type="text/javascript"
156
+ src="http://www.google.com/cse/brand?form=cse-search-box&amp;lang=en">
157
+ </script>
158
+ <a href="http://xkcd.com/rss.xml">RSS Feed</a>-
159
+ <a href="http://xkcd.com/atom.xml">Atom Feed</a></div>
160
+ <br />
161
+ <div id="comicLinks">Comics I enjoy:
162
+ <br />
163
+ <a href="http://threewordphrase.com/">Three Word Phrase</a>,
164
+ <a href="http://oglaf.com/">Oglaf</a>(nsfw),
165
+ <a href="http://www.smbc-comics.com/">SMBC</a>,
166
+ <a href="http://www.qwantz.com">Dinosaur Comics</a>,
167
+ <a href="http://www.asofterworld.com">A Softer World</a>,
168
+ <a href="http://buttersafe.com/">Buttersafe</a>,
169
+ <a href="http://pbfcomics.com/">Perry Bible Fellowship</a>,
170
+ <a href="http://questionablecontent.net/">Questionable
171
+ Content</a>,
172
+ <a href="http://www.buttercupfestival.com/">Buttercup
173
+ Festival</a></div>
174
+ <p>Warning: this comic occasionally contains strong language
175
+ (which may be unsuitable for children), unusual humor (which
176
+ may be unsuitable for adults), and advanced mathematics
177
+ (which may be unsuitable for liberal-arts majors).</p>
178
+ <div id="footnote">BTC 1NEPgrUmed3VyXpqbYZom7YVJ8MozYrNWx
179
+ <br />We did not invent the algorithm. The algorithm
180
+ consistently finds Jesus. The algorithm killed Jeeves.
181
+ <br />The algorithm is banned in China. The algorithm is from
182
+ Jersey. The algorithm constantly finds Jesus.
183
+ <br />This is not the algorithm. This is close.</div>
184
+ <div id="licenseText">
185
+ <p>This work is licensed under a
186
+ <a href="http://creativecommons.org/licenses/by-nc/2.5/">
187
+ Creative Commons Attribution-NonCommercial 2.5
188
+ License</a>.</p>
189
+ <p>This means you're free to copy and share these comics
190
+ (but not to sell them).
191
+ <a rel="license" href="http://xkcd.com/license.html">More details</a>.</p>
192
+ </div>
193
+ </div>
194
+ </body>
195
+ </html>
196
+