bee_api 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. data/bin/bee_api +84 -0
  2. data/lib/mdpreview.rb +80 -0
  3. data/lib/mdpreview/translator.rb +60 -0
  4. data/lib/mdpreview/version.rb +3 -0
  5. data/test/mdptest.rb +100 -0
  6. data/vendor/HISTORY.md +237 -0
  7. data/vendor/Jakefile.js +316 -0
  8. data/vendor/LICENSE +176 -0
  9. data/vendor/NOTICE +17 -0
  10. data/vendor/README.md +102 -0
  11. data/vendor/app/chrome/documentation.txt +12 -0
  12. data/vendor/app/chrome/manifest.json +24 -0
  13. data/vendor/app/web/ajax.js +43 -0
  14. data/vendor/app/web/app.css +292 -0
  15. data/vendor/app/web/app.js +377 -0
  16. data/vendor/app/web/beta/index.html +17 -0
  17. data/vendor/app/web/datapolicy.txt +48 -0
  18. data/vendor/app/web/doc/doc.css +60 -0
  19. data/vendor/app/web/doc/img/actions_menu.png +0 -0
  20. data/vendor/app/web/doc/img/button_actions_menu.png +0 -0
  21. data/vendor/app/web/doc/img/button_dragarea.png +0 -0
  22. data/vendor/app/web/doc/img/jsoneditor.png +0 -0
  23. data/vendor/app/web/doc/img/jsonformatter.png +0 -0
  24. data/vendor/app/web/doc/img/main_menu.png +0 -0
  25. data/vendor/app/web/doc/img/splitter.png +0 -0
  26. data/vendor/app/web/doc/index.html +201 -0
  27. data/vendor/app/web/favicon.ico +0 -0
  28. data/vendor/app/web/fileretriever.css +54 -0
  29. data/vendor/app/web/fileretriever.js +567 -0
  30. data/vendor/app/web/fileretriever.php +120 -0
  31. data/vendor/app/web/googlea47c4a0b36d11021.html +1 -0
  32. data/vendor/app/web/hash.js +133 -0
  33. data/vendor/app/web/img/description.txt +20 -0
  34. data/vendor/app/web/img/header_background.png +0 -0
  35. data/vendor/app/web/img/icon_128.png +0 -0
  36. data/vendor/app/web/img/icon_16.png +0 -0
  37. data/vendor/app/web/img/icon_gray.svg +151 -0
  38. data/vendor/app/web/img/icon_gray_16.svg +150 -0
  39. data/vendor/app/web/img/icon_orange.svg +151 -0
  40. data/vendor/app/web/img/logo.png +0 -0
  41. data/vendor/app/web/img/logo.xcf +0 -0
  42. data/vendor/app/web/img/logo_app.png +0 -0
  43. data/vendor/app/web/img/logo_app.xcf +0 -0
  44. data/vendor/app/web/index.html +191 -0
  45. data/vendor/app/web/notify.js +150 -0
  46. data/vendor/app/web/queryparams.js +71 -0
  47. data/vendor/app/web/robots.txt +0 -0
  48. data/vendor/app/web/splitter.js +179 -0
  49. data/vendor/app/web/test.html +224 -0
  50. data/vendor/component.json +33 -0
  51. data/vendor/docs/api.md +188 -0
  52. data/vendor/docs/usage.md +137 -0
  53. data/vendor/examples/01_basic_usage.html +45 -0
  54. data/vendor/examples/02_viewer.html +38 -0
  55. data/vendor/examples/03_switch_mode.html +98 -0
  56. data/vendor/examples/cur.file +1 -0
  57. data/vendor/examples/jquery.js +2 -0
  58. data/vendor/examples/meta.js +1 -0
  59. data/vendor/examples/requirejs_demo/requirejs_demo.html +19 -0
  60. data/vendor/examples/requirejs_demo/scripts/main.js +25 -0
  61. data/vendor/examples/requirejs_demo/scripts/require.js +35 -0
  62. data/vendor/img/jsoneditor-icons.png +0 -0
  63. data/vendor/jsoneditor-min.css +1 -0
  64. data/vendor/jsoneditor-min.js +34 -0
  65. data/vendor/jsoneditor.css +597 -0
  66. data/vendor/jsoneditor.js +6069 -0
  67. data/vendor/jsoneditor/css/contextmenu.css +219 -0
  68. data/vendor/jsoneditor/css/img/description.txt +13 -0
  69. data/vendor/jsoneditor/css/img/export.sh +16 -0
  70. data/vendor/jsoneditor/css/img/jsoneditor-icons.png +0 -0
  71. data/vendor/jsoneditor/css/img/jsoneditor-icons.svg +861 -0
  72. data/vendor/jsoneditor/css/jsoneditor.css +220 -0
  73. data/vendor/jsoneditor/css/menu.css +81 -0
  74. data/vendor/jsoneditor/css/searchbox.css +73 -0
  75. data/vendor/jsoneditor/js/appendnode.js +211 -0
  76. data/vendor/jsoneditor/js/contextmenu.js +440 -0
  77. data/vendor/jsoneditor/js/header.js +32 -0
  78. data/vendor/jsoneditor/js/highlighter.js +82 -0
  79. data/vendor/jsoneditor/js/history.js +218 -0
  80. data/vendor/jsoneditor/js/jsoneditor.js +206 -0
  81. data/vendor/jsoneditor/js/module.js +50 -0
  82. data/vendor/jsoneditor/js/node.js +2864 -0
  83. data/vendor/jsoneditor/js/searchbox.js +288 -0
  84. data/vendor/jsoneditor/js/texteditor.js +311 -0
  85. data/vendor/jsoneditor/js/treeeditor.js +770 -0
  86. data/vendor/jsoneditor/js/util.js +582 -0
  87. data/vendor/lib/ace/ace.js +11 -0
  88. data/vendor/lib/ace/mode-json.js +1 -0
  89. data/vendor/lib/ace/theme-jsoneditor.js +144 -0
  90. data/vendor/lib/ace/theme-textmate.js +163 -0
  91. data/vendor/lib/ace/worker-json.js +1 -0
  92. data/vendor/lib/jsonlint/README.md +62 -0
  93. data/vendor/lib/jsonlint/jsonlint.js +432 -0
  94. data/vendor/misc/screenshots/actionsmenu_640x400.png +0 -0
  95. data/vendor/misc/screenshots/codeeditor_640x400.png +0 -0
  96. data/vendor/misc/screenshots/description.json +17 -0
  97. data/vendor/misc/screenshots/jsoneditoronline.png +0 -0
  98. data/vendor/misc/screenshots/jsoneditoronline_640x400.png +0 -0
  99. data/vendor/misc/screenshots/search_640x400.png +0 -0
  100. data/vendor/misc/screenshots/small_tile.xcf +0 -0
  101. data/vendor/misc/screenshots/small_tile_440x280.png +0 -0
  102. data/vendor/misc/todo.txt +101 -0
  103. data/vendor/package.json +28 -0
  104. data/vendor/test/couchdbeditor.html +100 -0
  105. data/vendor/test/largefile.json +12605 -0
  106. data/vendor/test/test_ace.html +60 -0
  107. data/vendor/test/test_editable_div.html +449 -0
  108. metadata +154 -0
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @prototype QueryParams
3
+ * This prototype contains methods to manipulate the query parameters of the
4
+ * web pages url
5
+ */
6
+ function QueryParams () {}
7
+
8
+ /**
9
+ * get an object value with all parameters in the query params
10
+ * @return {Object} query object containing key/values
11
+ */
12
+ QueryParams.prototype.getQuery = function () {
13
+ var search = window.location.search.substring(1); // skip the ? character
14
+ var params = search.split('&');
15
+ var query = {};
16
+ for (var i = 0, iMax = params.length; i < iMax; i++) {
17
+ var keyvalue = params[i].split('=');
18
+ if (keyvalue.length == 2) {
19
+ var key = decodeURIComponent(keyvalue[0]);
20
+ var value = decodeURIComponent(keyvalue[1]);
21
+ query[key] = value;
22
+ }
23
+ }
24
+ return query;
25
+ };
26
+
27
+ /**
28
+ * Set query parameters parameters
29
+ * @param {Object} query object with strings
30
+ */
31
+ QueryParams.prototype.setQuery = function (query) {
32
+ var search = '';
33
+
34
+ for (var key in query) {
35
+ if (query.hasOwnProperty(key)) {
36
+ var value = query[key];
37
+ if (value != undefined) {
38
+ if (search.length) {
39
+ search += '&';
40
+ }
41
+ search += encodeURIComponent(key);
42
+ search += '=';
43
+ search += encodeURIComponent(query[key]);
44
+ }
45
+ }
46
+ }
47
+
48
+ window.location.search = (search.length ? ('#' + search) : '');
49
+ };
50
+
51
+
52
+ /**
53
+ * Retrieve a parameter value from the query params
54
+ * @param {String} key
55
+ * @return {String} value undefined when the value is not found
56
+ */
57
+ QueryParams.prototype.getValue = function (key) {
58
+ var query = this.getQuery();
59
+ return query[key];
60
+ };
61
+
62
+ /**
63
+ * Set an query parameter
64
+ * @param {String} key
65
+ * @param {String} value
66
+ */
67
+ QueryParams.prototype.setValue = function (key, value) {
68
+ var query = this.getQuery();
69
+ query[key] = value;
70
+ this.setQuery(query);
71
+ };
File without changes
@@ -0,0 +1,179 @@
1
+ /**
2
+ * A splitter control.
3
+ * Turns an existing HTML element into an horizontal splitter control.
4
+ * @constructor Splitter
5
+ * @param {Object} params Available parameters:
6
+ * {Element} container HTML container representing
7
+ * the splitter
8
+ * {Number} [snap] Number of pixels to snap to
9
+ * the edges (0 or 1)
10
+ * {function} [change] Callback method called when
11
+ * the splitter value has changed.
12
+ * The callback is called with
13
+ * the new value as parameter
14
+ */
15
+ function Splitter (params) {
16
+ if (!params || !params.container) {
17
+ throw new Error('params.container undefined in Splitter constructor');
18
+ }
19
+
20
+ var me = this;
21
+ jsoneditor.util.addEventListener(params.container, "mousedown", function (event) {
22
+ me.onMouseDown(event);
23
+ });
24
+
25
+ this.container = params.container;
26
+ this.snap = Number(params.snap) || 200; // px
27
+ this.width = undefined;
28
+ this.value = undefined;
29
+ this.onChange = (params.change) ? params.change : function () {};
30
+ this.params = {};
31
+ }
32
+
33
+ /**
34
+ * Handle mouse down event. Start dragging the splitter.
35
+ * @param {Event} event
36
+ * @private
37
+ */
38
+ Splitter.prototype.onMouseDown = function (event) {
39
+ var me = this;
40
+ var leftButtonDown = event.which ? (event.which == 1) : (event.button == 1);
41
+ if (!leftButtonDown) {
42
+ return;
43
+ }
44
+ jsoneditor.util.addClassName(this.container, 'active');
45
+
46
+ if (!this.params.mousedown) {
47
+ this.params.mousedown = true;
48
+ this.params.mousemove =
49
+ jsoneditor.util.addEventListener(document, 'mousemove', function (event) {
50
+ me.onMouseMove(event);
51
+ });
52
+ this.params.mouseup =
53
+ jsoneditor.util.addEventListener(document, 'mouseup', function (event) {
54
+ me.onMouseUp(event);
55
+ });
56
+ this.params.screenX = event.screenX;
57
+ this.params.changed = false;
58
+ this.params.value = this.getValue();
59
+ }
60
+ jsoneditor.util.preventDefault(event);
61
+ jsoneditor.util.stopPropagation(event);
62
+ };
63
+
64
+ /**
65
+ * Handle on mouse move event. Used to drag the splitter
66
+ * @param {Event} event
67
+ * @private
68
+ */
69
+ Splitter.prototype.onMouseMove = function (event) {
70
+ if (this.width != undefined) {
71
+ var diff = event.screenX - this.params.screenX;
72
+
73
+ var value = this.params.value + diff / this.width;
74
+ value = this.setValue(value);
75
+
76
+ if (value != this.params.value) {
77
+ // value has been changed
78
+ this.params.changed = true;
79
+ }
80
+
81
+ this.onChange(value);
82
+ }
83
+
84
+ jsoneditor.util.preventDefault(event);
85
+ jsoneditor.util.stopPropagation(event);
86
+ };
87
+
88
+ /**
89
+ * Handle on mouse up event
90
+ * @param {Event} event
91
+ * @private
92
+ */
93
+ Splitter.prototype.onMouseUp = function (event) {
94
+ jsoneditor.util.removeClassName(this.container, 'active');
95
+
96
+ if (this.params.mousedown) {
97
+ jsoneditor.util.removeEventListener(document, 'mousemove', this.params.mousemove);
98
+ jsoneditor.util.removeEventListener(document, 'mouseup', this.params.mouseup);
99
+ this.params.mousemove = undefined;
100
+ this.params.mouseup = undefined;
101
+ this.params.mousedown = false;
102
+
103
+ var value = this.getValue();
104
+ if (!this.params.changed) {
105
+ // value is unchanged -> unsnap when currently snapped
106
+ if (value == 0) {
107
+ value = this.setValue(0.2);
108
+ this.onChange(value);
109
+ }
110
+ if (value == 1) {
111
+ value = this.setValue(0.8);
112
+ this.onChange(value);
113
+ }
114
+ }
115
+ }
116
+ jsoneditor.util.preventDefault(event);
117
+ jsoneditor.util.stopPropagation(event);
118
+ };
119
+
120
+ /**
121
+ * Set the window width for the splitter
122
+ * @param {Number} width
123
+ */
124
+ Splitter.prototype.setWidth = function (width) {
125
+ this.width = width;
126
+ };
127
+
128
+ /**
129
+ * Set a value for the splitter (UI is not adjusted)
130
+ * @param {Number} value A number between 0 and 1
131
+ * @return {Number} value The stored value
132
+ */
133
+ Splitter.prototype.setValue = function (value) {
134
+ value = Number(value);
135
+
136
+ // snap to 0 or 1 when close
137
+ if (this.width != undefined && this.width > this.snap) {
138
+ if (value < this.snap / this.width) {
139
+ value = 0;
140
+ }
141
+ if (value > (this.width - this.snap) / this.width) {
142
+ value = 1;
143
+ }
144
+ }
145
+
146
+ this.value = value;
147
+
148
+ try {
149
+ localStorage['splitterValue'] = value;
150
+ }
151
+ catch (e) {
152
+ console.log(e);
153
+ }
154
+ return value;
155
+ };
156
+
157
+ /**
158
+ * Get the splitter value from local storage
159
+ * @return {Number} value A value between 0.1 and 0.9
160
+ */
161
+ Splitter.prototype.getValue = function () {
162
+ var value = this.value;
163
+ if (value == undefined) {
164
+ // read from localStorage once
165
+ try {
166
+ if (localStorage['splitterValue'] != undefined) {
167
+ value = Number(localStorage['splitterValue']); // read
168
+ value = this.setValue(value); // verify and store
169
+ }
170
+ }
171
+ catch (e) {
172
+ console.log(e);
173
+ }
174
+ }
175
+ if (value == undefined) {
176
+ value = this.setValue(0.5);
177
+ }
178
+ return value;
179
+ };
@@ -0,0 +1,224 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
5
+
6
+ <title>JSON Editor Online - view, edit and format JSON online</title>
7
+
8
+ <!--
9
+
10
+ @file index_no_ads.html
11
+
12
+ @brief
13
+ JSON Editor Online is a web-based tool to view, edit, and format JSON.
14
+ It shows your data side by side in a clear, editable treeview and in
15
+ a code editor.
16
+
17
+ Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+
18
+
19
+ @license
20
+ This json editor is open sourced with the intention to use the editor as
21
+ a component in your own application. Not to just copy and monetize the editor
22
+ as it is.
23
+
24
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not
25
+ use this file except in compliance with the License. You may obtain a copy
26
+ of the License at
27
+
28
+ http://www.apache.org/licenses/LICENSE-2.0
29
+
30
+ Unless required by applicable law or agreed to in writing, software
31
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
32
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
33
+ License for the specific language governing permissions and limitations under
34
+ the License.
35
+
36
+ Copyright (C) 2011-2013 Jos de Jong, http://jsoneditoronline.org
37
+
38
+ @author Jos de Jong, <wjosdejong@gmail.com>
39
+ @version @@version
40
+ @date @@date
41
+ -->
42
+
43
+ <meta name="description" content="JSON Editor Online is a web-based tool to view, edit, and format JSON. It shows your data side by side in a clear, editable treeview and in a code editor.">
44
+ <meta name="keywords" content="json, editor, formatter, online, format, parser, json editor, json editor online, online json editor, javascript, javascript object notation, tools, tool, json tools, treeview, open source, free, json parser, json parser online, json formatter, json formatter online, online json formatter, online json parser, format json online">
45
+ <meta name="author" content="Jos de Jong">
46
+
47
+ <link rel="shortcut icon" href="favicon.ico">
48
+
49
+ <link href="app.css" rel="stylesheet" type="text/css">
50
+ <link href="fileretriever.css" rel="stylesheet" type="text/css">
51
+ <link href="../../jsoneditor/css/jsoneditor.css" rel="stylesheet" type="text/css">
52
+ <link href="../../jsoneditor/css/menu.css" rel="stylesheet" type="text/css">
53
+ <link href="../../jsoneditor/css/searchbox.css" rel="stylesheet" type="text/css">
54
+ <link href="../../jsoneditor/css/contextmenu.css" rel="stylesheet" type="text/css">
55
+ <!-- TODO: droid font
56
+ <link href='http://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
57
+ -->
58
+
59
+ <script type="text/javascript" src="../../jsoneditor/js/jsoneditor.js"></script>
60
+ <script type="text/javascript" src="../../jsoneditor/js/treeeditor.js"></script>
61
+ <script type="text/javascript" src="../../jsoneditor/js/texteditor.js"></script>
62
+ <script type="text/javascript" src="../../jsoneditor/js/node.js"></script>
63
+ <script type="text/javascript" src="../../jsoneditor/js/appendnode.js"></script>
64
+ <script type="text/javascript" src="../../jsoneditor/js/contextmenu.js"></script>
65
+ <script type="text/javascript" src="../../jsoneditor/js/history.js"></script>
66
+ <script type="text/javascript" src="../../jsoneditor/js/searchbox.js"></script>
67
+ <script type="text/javascript" src="../../jsoneditor/js/highlighter.js"></script>
68
+ <script type="text/javascript" src="../../jsoneditor/js/util.js"></script>
69
+ <script type="text/javascript" src="../../jsoneditor/js/module.js"></script>
70
+ <script type="text/javascript" src="queryparams.js"></script>
71
+ <script type="text/javascript" src="ajax.js"></script>
72
+ <script type="text/javascript" src="fileretriever.js"></script>
73
+ <script type="text/javascript" src="notify.js"></script>
74
+ <script type="text/javascript" src="splitter.js"></script>
75
+ <script type="text/javascript" src="app.js"></script>
76
+ <script type="text/javascript" src="../../lib/jsonlint/jsonlint.js"></script>
77
+
78
+ <script type="text/javascript" src="../../lib/ace/ace.js"></script>
79
+ <script type="text/javascript" src="../../lib/ace/mode-json.js"></script>
80
+ <script type="text/javascript" src="../../lib/ace/theme-textmate.js"></script>
81
+ <script type="text/javascript" src="../../lib/ace/theme-jsoneditor.js"></script>
82
+
83
+ <style type="text/css">
84
+ div.convert-right {
85
+ background: url('../../jsoneditor/css/img/jsoneditor-icons.png') -0 -48px;
86
+ }
87
+ div.convert-left {
88
+ background: url('../../jsoneditor/css/img/jsoneditor-icons.png') -24px -48px;
89
+ }
90
+ </style>
91
+ </head>
92
+
93
+ <body>
94
+
95
+ <div id="header" >
96
+ <a href="http://jsoneditoronline.org" class="header">
97
+ <img alt="JSON Editor Online" title="JSON Editor Online" src="img/logo.png" id="logo">
98
+ </a>
99
+
100
+ <div id="menu">
101
+ <ul>
102
+ <li>
103
+ <a id="clear" title="Clear contents">Clear</a>
104
+ </li>
105
+ <li>
106
+ <a id="open" title="Open file from disk">
107
+ Open
108
+ <span id="openMenuButton" title="Open file from disk or url">
109
+ &#x25BC;
110
+ </span>
111
+ </a>
112
+ <ul id="openMenu">
113
+ <li>
114
+ <a id="menuOpenFile" title="Open file from disk">Open&nbsp;file</a>
115
+ </li>
116
+ <li>
117
+ <a id="menuOpenUrl" title="Open file from url">Open&nbsp;url</a>
118
+ </li>
119
+ </ul>
120
+ </li>
121
+ <li>
122
+ <a id="save" title="Save file to disk">Save</a>
123
+ </li>
124
+ <li>
125
+ <a id="help" title="Open documentation (opens in a new window)" href="doc/index.html" target="_blank">Help</a>
126
+ </li>
127
+ </ul>
128
+ </div>
129
+
130
+ <!-- TODO: info, links, faq -->
131
+ <!--
132
+ <div class="info" style="display:none;">
133
+ JSON, or JavaScript Object Notation, is a lightweight text-based open standard
134
+ designed for human-readable data interchange. It is derived from the JavaScript
135
+ scripting language for representing simple data structures and associative arrays,
136
+ called objects. Despite its relationship to JavaScript, it is language-independent,
137
+ with parsers available for most languages.
138
+ The JSON format was originally specified by Douglas Crockford, and is described
139
+ in RFC 4627. The official Internet media type for JSON is application/json.
140
+ The JSON filename extension is .json.
141
+ The JSON format is often used for serializing and transmitting structured data
142
+ over a network connection. It is used primarily to transmit data between a server
143
+ and web application, serving as an alternative to XML.
144
+ <br><br>
145
+ From <a target="_blank" href="http://en.wikipedia.org/wiki/Json">Wikipedia</a>
146
+ </div>
147
+
148
+ <div class="links" style="display:none;">
149
+ <a target="_blank" href="http://json.org/">http://json.org/</a><br>
150
+ <a target="_blank" href="http://en.wikipedia.org/wiki/Json">http://en.wikipedia.org/wiki/Json</a><br>
151
+ </div>
152
+
153
+ <div class="faq" style="display:none;"></div>
154
+ -->
155
+ </div>
156
+
157
+ <div id="auto">
158
+ <div id="contents">
159
+ <div id="codeEditor"></div>
160
+
161
+ <div id="splitter">
162
+ <div id="buttons">
163
+ <div>
164
+ <button id="toTree" class="convert" title="Copy code to tree editor">
165
+ <div class="convert-right"></div>
166
+ </button>
167
+ </div>
168
+ <div>
169
+ <button id="toCode" class="convert" title="Copy tree to code editor">
170
+ <div class="convert-left"></div>
171
+ </button>
172
+ </div>
173
+ </div>
174
+ <div id="drag">
175
+ </div>
176
+ </div>
177
+
178
+ <div id="treeEditor"></div>
179
+
180
+ <script type="text/javascript">
181
+ app.load();
182
+ app.resize();
183
+ </script>
184
+
185
+ <div id="ad" title="advertisement" >
186
+ <script type="text/javascript"><!--
187
+ google_ad_client = "ca-pub-7938810169574141";
188
+ /* jsoneditoronline_160x600 */
189
+ google_ad_slot = "4671869937";
190
+ google_ad_width = 160;
191
+ google_ad_height = 600;
192
+ //-->
193
+ </script>
194
+
195
+ <!--
196
+ <script type="text/javascript"
197
+ src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
198
+ </script>
199
+ -->
200
+
201
+ </div>
202
+ </div>
203
+ </div>
204
+
205
+ <div id="footer">
206
+ <div id="footer-inner">
207
+ <a href="http://jsoneditoronline.org" class="footer">JSON Editor Online @@version</a>
208
+ &bull;
209
+ <a href="../../HISTORY.md" target="_blank" class="footer">History</a>
210
+ &bull;
211
+ <a href="https://github.com/josdejong/jsoneditor/" target="_blank" class="footer">Sourcecode</a>
212
+ &bull;
213
+ <a href="datapolicy.txt" target="_blank" class="footer">Data policy</a>
214
+ &bull;
215
+ <a href="../../NOTICE" target="_blank" class="footer">Copyright 2011-2013 Jos de Jong</a>
216
+ </div>
217
+ </div>
218
+
219
+ <script type="text/javascript">
220
+ app.resize();
221
+ </script>
222
+
223
+ </body>
224
+ </html>