scratch – Diff between revs 42 and 43

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 42 Rev 43
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="en"> 2 <html lang="en">
3 <head> 3 <head>
4 <meta charset="utf-8"> 4 <meta charset="utf-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 6 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
7 <meta http-equiv="Pragma" content="no-cache" /> 7 <meta http-equiv="Pragma" content="no-cache" />
8 <meta http-equiv="Expires" content="0" /> 8 <meta http-equiv="Expires" content="0" />
9 <meta name="viewport" content="width=device-width, initial-scale=1"> 9 <meta name="viewport" content="width=device-width, initial-scale=1">
10 <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 10 <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
11 <meta name="description" content="quick asset upload"> 11 <meta name="description" content="quick asset upload">
12 <meta name="author" content="Wizardry and Steamworks"> 12 <meta name="author" content="Wizardry and Steamworks">
13 <link rel="icon" href="favicon.ico"> 13 <link rel="icon" href="favicon.ico">
14   14  
15 <title>Quickload</title> 15 <title>Quickload</title>
16 16
17 <!-- Polyfill --> 17 <!-- Polyfill -->
18 <script src="js/polyfill/polyfill.min.js"></script> 18 <script src="js/polyfill/polyfill.min.js"></script>
19   19  
20 <!-- Bootstrap core CSS --> 20 <!-- Bootstrap core CSS -->
21 <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet"> 21 <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet">
22   22  
23 <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 23 <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
24 <link href="css/bootstrap/ie10-viewport-bug-workaround.css" rel="stylesheet"> 24 <link href="css/bootstrap/ie10-viewport-bug-workaround.css" rel="stylesheet">
25   25  
26 <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> 26 <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
27 <!--[if lt IE 9]><script src="js/bootstrap/ie8-responsive-file-warning.js"></script><![endif]--> 27 <!--[if lt IE 9]><script src="js/bootstrap/ie8-responsive-file-warning.js"></script><![endif]-->
28 <script src="js/bootstrap/ie-emulation-modes-warning.js"></script> 28 <script src="js/bootstrap/ie-emulation-modes-warning.js"></script>
29   29  
30 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 30 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
31 <!--[if lt IE 9]> 31 <!--[if lt IE 9]>
32 <script src="js/bootstrap/html5shiv.min.js"></script> 32 <script src="js/bootstrap/html5shiv.min.js"></script>
33 <script src="js/bootstrap/respond.min.js"></script> 33 <script src="js/bootstrap/respond.min.js"></script>
34 <![endif]--> 34 <![endif]-->
35 35
36 <!-- Trumbowyg --> 36 <!-- Trumbowyg -->
37 <link href="css/trumbowyg/trumbowyg.min.css" rel="stylesheet"> 37 <link href="css/trumbowyg/trumbowyg.min.css" rel="stylesheet">
38 <!-- Local style --> 38 <!-- Local style -->
39 <link href="css/text/style.css" rel="stylesheet"> 39 <link href="css/text/style.css" rel="stylesheet">
40 </head> 40 </head>
41   41  
42 <body> 42 <body>
43   43  
44 <div class="container"> 44 <div class="container">
45   45  
46 <!-- Main component for a primary marketing message or call to action --> 46 <!-- Main component for a primary marketing message or call to action -->
47 <div class="jumbotron"> 47 <div class="jumbotron">
48 <h1>Quickload</h1> 48 <h1>Quickload</h1>
49 <p>Asset sharing platform.</p> 49 <p>Asset sharing platform.</p>
50 </div> 50 </div>
51 51
52 <ul class="nav nav-tabs"> 52 <ul class="nav nav-tabs">
53 <li><a href="index.html">Home</a></li> 53 <li><a href="index.html">Home</a></li>
54 <li><a href="files.html">Files</a></li> 54 <li><a href="files.html">Files</a></li>
55 <li class="active"><a href="#">Text</a></li> 55 <li class="active"><a href="#">Text</a></li>
56 </ul> 56 </ul>
57 57
58 <div class="panel panel-default"> 58 <div class="panel panel-default">
59 <div class="panel-heading"> 59 <div class="panel-heading">
60 <div class="form-group"> 60 <div class="form-group">
61 <div class="input-group"> 61 <div class="input-group">
62 <span class="input-group-btn"> 62 <span class="input-group-btn">
63 <button id="save" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="auto" title="Generate link."> 63 <button id="save" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="auto" title="Generate link.">
64 <i class="glyphicon glyphicon-share"></i> 64 <i class="glyphicon glyphicon-share"></i>
65 </button> 65 </button>
66 </span> 66 </span>
67 <input id="URL" type="text" class="form-control" readonly> 67 <input id="URL" type="text" class="form-control" readonly>
68 <span class="input-group-btn"> 68 <span class="input-group-btn">
69 <button id="copy-url" class="btn btn-default" type="button" data-clipboard-target="#URL" data-toggle="tooltip" data-placement="auto" title="Copy to clipboard."><i class="glyphicon glyphicon-paperclip"></i></button> 69 <button id="copy-url" class="btn btn-default" type="button" data-clipboard-target="#URL" data-toggle="tooltip" data-placement="auto" title="Copy to clipboard."><i class="glyphicon glyphicon-paperclip"></i></button>
70 </span> 70 </span>
71 </div> 71 </div>
72 </div> 72 </div>
73 <form id="nick-form" role="form"> 73 <form id="nick-form" role="form">
74 <div class="form-group has-feedback"> 74 <div class="form-group has-feedback">
75 <div class="input-group"> 75 <div class="input-group">
76 <span class="input-group-btn"> 76 <span class="input-group-btn">
77 <button id="go" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="auto" title="Load document."> 77 <button id="go" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="auto" title="Load document.">
78 <i class="glyphicon glyphicon-play"></i> 78 <i class="glyphicon glyphicon-play"></i>
79 </button> 79 </button>
80 </span> 80 </span>
81 <span class="input-group-btn"> 81 <span class="input-group-btn">
82 <button id="reset" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="auto" title="Reset document."> 82 <button id="reset" class="btn btn-default" type="button" data-toggle="tooltip" data-placement="auto" title="Reset document.">
83 <i id="home-icon" class="glyphicon glyphicon-home"></i> 83 <i id="home-icon" class="glyphicon glyphicon-home"></i>
84 </button> 84 </button>
85 </span> 85 </span>
86 <input id="nick" type="text" class="form-control" pattern="^[A-Za-z0-9]{32}$" maxlength="32"> 86 <input id="nick" type="text" class="form-control" pattern="^[A-Za-z0-9]{32}$" maxlength="32">
87 <span class="input-group-btn"> 87 <span class="input-group-btn">
88 <button id="copy-nick" class="btn btn-default" type="button" data-clipboard-target="#nick" data-toggle="tooltip" data-placement="auto" title="Copy to clipboard."><i class="glyphicon glyphicon-paperclip"></i></button> 88 <button id="copy-nick" class="btn btn-default" type="button" data-clipboard-target="#nick" data-toggle="tooltip" data-placement="auto" title="Copy to clipboard."><i class="glyphicon glyphicon-paperclip"></i></button>
89 </span> 89 </span>
90 </div> 90 </div>
91 </div> 91 </div>
92 </form> 92 </form>
93 </div> 93 </div>
94 <div class="panel-body" id="editorpanel"> 94 <div class="panel-body" id="editorpanel">
95 <div id="trumbowyg" style="display: none; font-family: monospace;"> 95 <div id="trumbowyg" style="display: none; font-family: monospace;">
96 </div> 96 </div>
97 </div> 97 </div>
98 </div> 98 </div>
99   99  
100 </div> <!-- /container --> 100 </div> <!-- /container -->
101 101
102 <div id="footer"> 102 <div id="footer">
103 <div class="container"> 103 <div class="container">
104 <p class="text-muted credit">Copyright <i class="glyphicon glyphicon-copyright-mark"></i> 2017 <a href="http://grimore.org">Wizardry and Steamworks</a>.</p> 104 <p class="text-muted credit">Copyright <i class="glyphicon glyphicon-copyright-mark"></i> 2017 <a href="http://grimore.org">Wizardry and Steamworks</a>.</p>
105 </div> 105 </div>
106 </div> 106 </div>
107   107  
108 <script src="js/jquery/jquery.min.js"></script> 108 <script src="js/jquery/jquery.min.js"></script>
109 <script src="js/bootstrap/bootstrap.min.js"></script> 109 <script src="js/bootstrap/bootstrap.min.js"></script>
110 <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 110 <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
111 <script src="js/bootstrap/ie10-viewport-bug-workaround.js"></script> 111 <script src="js/bootstrap/ie10-viewport-bug-workaround.js"></script>
112 112
113 <!-- Trumbowyg --> 113 <!-- Trumbowyg -->
114 <script src="js/trumbowyg/trumbowyg.min.js"></script> 114 <script src="js/trumbowyg/trumbowyg.min.js"></script>
115 <!-- Clipboard --> 115 <!-- Clipboard -->
116 <script src="js/clipboard/clipboard.min.js"></script> 116 <script src="js/clipboard/clipboard.min.js"></script>
117 <!-- Fingerprint 2 --> 117 <!-- Fingerprint 2 -->
118 <script src="js/fingerprintjs/fingerprint2.min.js"></script> 118 <script src="js/fingerprintjs/fingerprint2.min.js"></script>
119 <!-- js-cookie --> 119 <!-- js-cookie -->
120 <script src="js/jscookie/js.cookie.js"></script> 120 <script src="js/jscookie/js.cookie.js"></script>
121 <!-- Bootstrap Validator --> 121 <!-- Bootstrap Validator -->
122 <script src="js/validator/validator.min.js"></script> 122 <script src="js/validator/validator.min.js"></script>
123 <script> 123 <script>
124 $(document).ready(() => { 124 $(document).ready(() => {
125 // Attach the form validator. 125 // Attach the form validator.
126 $('#nick-form').validator({ 126 $('#nick-form').validator({
127 focus: false 127 focus: false
128 }); 128 });
-   129
-   130 // Enable the Clipboard button.
-   131 new Clipboard('#copy-url');
129 132
130 // Get the fingerprint. 133 // Get the fingerprint.
131 new Fingerprint2().get((result, components) => { 134 new Fingerprint2().get((result, components) => {
132 // Set the nick as a cookie. 135 // Set the nick as a cookie.
133 const fingerprint = result; 136 const fingerprint = result;
134 var nick = Cookies.get('nick'); 137 var nick = Cookies.get('nick');
135 if(!nick || nick.length !== 32) 138 if(!nick || nick.length !== 32) {
136 Cookies.set('nick', result, { path: '' }); 139 Cookies.set('nick', result, { path: '' });
-   140 nick = result;
-   141 }
137 else 142 else
138 result = nick; 143 result = nick;
139 144
140 // Set the nick. 145 // Set the nick.
141 $('#nick').val(result); 146 $('#nick').val(result);
142 new Clipboard('#copy-nick'); 147 new Clipboard('#copy-nick');
143 148
144 if(fingerprint == nick) 149 if(fingerprint == nick)
145 $('#home-icon').addClass("text-success"); 150 $('#home-icon').addClass("text-success");
146 else 151 else
147 $('#home-icon').addClass("text-danger"); 152 $('#home-icon').addClass("text-danger");
148 153
149 // Load the editor. 154 // Load the editor.
150 $('#trumbowyg').trumbowyg({ 155 $('#trumbowyg').trumbowyg({
151 autogrow: true, 156 autogrow: true,
152 disabled: true 157 disabled: true
153 }).on('tbwchange', () => { 158 }).on('tbwchange', () => {
154 $('#editor').trumbowyg('disable'); 159 $('#editor').trumbowyg('disable');
155 $.post('share-text.php', { 160 $.post('share-text.php', {
156 data: $('#trumbowyg').trumbowyg('html'), 161 data: $('#trumbowyg').trumbowyg('html'),
157 fingerprint: result, 162 fingerprint: result,
158 action: 'SAVE' 163 action: 'SAVE'
159 }).done((data) => { 164 }).done((data) => {
160 $('#trumbowyg').trumbowyg('enable'); 165 $('#trumbowyg').trumbowyg('enable');
161 }).fail(() => { 166 }).fail(() => {
162 $('#trumbowyg').trumbowyg('enable'); 167 $('#trumbowyg').trumbowyg('enable');
163 }); 168 });
164 }); 169 });
165 170
166 // Retrieve the contents of the shared file. 171 // Retrieve the contents of the shared file.
167 $.post('share-text.php', 172 $.post('share-text.php',
168 { 173 {
169 timestamp: window.performance.now(), 174 timestamp: window.performance.now(),
170 fingerprint: result, 175 fingerprint: result,
171 action: 'LOAD' 176 action: 'LOAD'
172 }).done((data) => {; 177 }).done((data) => {;
173 $('#trumbowyg') 178 $('#trumbowyg')
174 .trumbowyg('html', data); 179 .trumbowyg('html', data);
175 $('#trumbowyg').trumbowyg('enable'); 180 $('#trumbowyg').trumbowyg('enable');
176 $('#trumbowyg').show(); 181 $('#trumbowyg').show();
177 }).fail(() => { 182 }).fail(() => {
178 $('#trumbowyg').trumbowyg('enable'); 183 $('#trumbowyg').trumbowyg('enable');
179 $('#trumbowyg').show(); 184 $('#trumbowyg').show();
180 }); 185 });
181 -  
182 // Enable the Clipboard button. -  
183 new Clipboard('#copy-url'); -  
184 186
185 $('#save').click(() => { 187 $('#save').click(() => {
186 $('#editor').trumbowyg('disable'); 188 $('#editor').trumbowyg('disable');
187 189
188 var formData = new FormData(); 190 var formData = new FormData();
189 formData.append('file', new Blob( 191 formData.append('file', new Blob(
190 [ 192 [
191 $('#trumbowyg').trumbowyg('html') 193 $('#trumbowyg').trumbowyg('html')
192 ] 194 ]
193 ), 195 ),
194 '.html' 196 '.html'
195 ); 197 );
196 198
197 $.ajax({ 199 $.ajax({
198 url: 'upload-files.php', 200 url: 'upload-files.php',
199 type: 'POST', 201 type: 'POST',
200 data: formData, 202 data: formData,
201 // cache: false // FF 203 // cache: false // FF
202 processData: false, 204 processData: false,
203 contentType: false 205 contentType: false
204 }).done((data) => { 206 }).done((data) => {
205 $('#URL').val(data); 207 $('#URL').val(data);
206 $('#trumbowyg').trumbowyg('enable'); 208 $('#trumbowyg').trumbowyg('enable');
207 }).fail(() => { 209 }).fail(() => {
208 $('#trumbowyg').trumbowyg('enable'); 210 $('#trumbowyg').trumbowyg('enable');
209 }); 211 });
210 }); 212 });
211 213
212 // When the button is clicked, navigate to the fingerprint. 214 // When the button is clicked, navigate to the fingerprint.
213 $('#go').click(() => { 215 $('#go').click(() => {
214 nick = $('#nick').val(); 216 nick = $('#nick').val();
215 if(!nick || nick.length != 32) 217 if(!nick || nick.length != 32)
216 return; 218 return;
217 Cookies.set('nick', nick, { path: '' }); 219 Cookies.set('nick', nick, { path: '' });
218 result = nick; 220 result = nick;
219 -  
220 if(fingerprint == nick) -  
221 $('#home-icon').addClass("text-success").removeClass("text-danger"); -  
222 else -  
223 $('#home-icon').addClass("text-danger").removeClass("text-success"); -  
224 221
225 // Retrieve the contents of the shared file. 222 // Retrieve the contents of the shared file.
226 $.post('share-text.php', 223 $.post('share-text.php',
227 { 224 {
228 timestamp: window.performance.now(), 225 timestamp: window.performance.now(),
229 fingerprint: nick, 226 fingerprint: nick,
230 action: 'LOAD' 227 action: 'LOAD'
231 }).done((data) => {; 228 }).done((data) => {;
232 $('#trumbowyg') 229 $('#trumbowyg')
233 .trumbowyg('html', data); 230 .trumbowyg('html', data);
234 $('#trumbowyg').trumbowyg('enable'); 231 $('#trumbowyg').trumbowyg('enable');
235 $('#trumbowyg').show(); 232 $('#trumbowyg').show();
236 233
237 if(fingerprint == nick) 234 if(fingerprint == nick)
238 $('#home-icon').addClass("text-success"); 235 $('#home-icon').addClass("text-success").removeClass("text-danger");
239 else 236 else
240 $('#home-icon').addClass("text-danger"); 237 $('#home-icon').addClass("text-danger").removeClass("text-success");
241 238
242 }).fail(() => { 239 }).fail(() => {
243 $('#trumbowyg').trumbowyg('enable'); 240 $('#trumbowyg').trumbowyg('enable');
244 $('#trumbowyg').show(); 241 $('#trumbowyg').show();
245 }); 242 });
246 }); 243 });
247 244
248 // When the form is submitted, naigate to the fingerprint. 245 // When the form is submitted, naigate to the fingerprint.
249 $('#nick-form').submit((e) => { 246 $('#nick-form').submit((e) => {
250 e.preventDefault(); 247 e.preventDefault();
251 248
252 nick = $('#nick').val(); 249 nick = $('#nick').val();
253 if(!nick || nick.length != 32) 250 if(!nick || nick.length != 32)
254 return; 251 return;
255 Cookies.set('nick', nick, { path: '' }); 252 Cookies.set('nick', nick, { path: '' });
256 result = nick; 253 result = nick;
257 -  
258 if(fingerprint == nick) -  
259 $('#home-icon').addClass("text-success"); -  
260 else -  
261 $('#home-icon').addClass("text-danger"); -  
262 254
263 // Retrieve the contents of the shared file. 255 // Retrieve the contents of the shared file.
264 $.post('share-text.php', 256 $.post('share-text.php',
265 { 257 {
266 timestamp: window.performance.now(), 258 timestamp: window.performance.now(),
267 fingerprint: nick, 259 fingerprint: nick,
268 action: 'LOAD' 260 action: 'LOAD'
269 }).done((data) => {; 261 }).done((data) => {;
270 $('#trumbowyg') 262 $('#trumbowyg')
271 .trumbowyg('html', data); 263 .trumbowyg('html', data);
272 $('#trumbowyg').trumbowyg('enable'); 264 $('#trumbowyg').trumbowyg('enable');
273 $('#trumbowyg').show(); 265 $('#trumbowyg').show();
274 266
275 if(fingerprint == nick) 267 if(fingerprint == nick)
276 $('#home-icon').addClass("text-success").removeClass("text-danger"); 268 $('#home-icon').addClass("text-success").removeClass("text-danger");
277 else 269 else
278 $('#home-icon').addClass("text-danger").removeClass("text-success"); 270 $('#home-icon').addClass("text-danger").removeClass("text-success");
279 271
280 }).fail(() => { 272 }).fail(() => {
281 $('#trumbowyg').trumbowyg('enable'); 273 $('#trumbowyg').trumbowyg('enable');
282 $('#trumbowyg').show(); 274 $('#trumbowyg').show();
283 }); 275 });
284 }); 276 });
285 277
286 // While the nick is changing, navigate to the changed fingerprint. 278 // While the nick is changing, navigate to the changed fingerprint.
287 $("#nick").on('input', () => { 279 $("#nick").on('input', () => {
288 nick = $('#nick').val(); 280 nick = $('#nick').val();
289 if(!nick || nick.length != 32) 281 if(!nick || nick.length != 32)
290 return; 282 return;
291 Cookies.set('nick', nick, { path: '' }); 283 Cookies.set('nick', nick, { path: '' });
292 result = nick; 284 result = nick;
293 -  
294 if(fingerprint == nick) -  
295 $('#home-icon').addClass("text-success").removeClass("text-danger"); -  
296 else -  
297 $('#home-icon').addClass("text-danger").removeClass("text-success"); -  
298 285
299 // Retrieve the contents of the shared file. 286 // Retrieve the contents of the shared file.
300 $.post('share-text.php', 287 $.post('share-text.php',
301 { 288 {
302 timestamp: window.performance.now(), 289 timestamp: window.performance.now(),
303 fingerprint: nick, 290 fingerprint: nick,
304 action: 'LOAD' 291 action: 'LOAD'
305 }).done((data) => {; 292 }).done((data) => {;
306 $('#trumbowyg') 293 $('#trumbowyg')
307 .trumbowyg('html', data); 294 .trumbowyg('html', data);
308 $('#trumbowyg').trumbowyg('enable'); 295 $('#trumbowyg').trumbowyg('enable');
309 $('#trumbowyg').show(); 296 $('#trumbowyg').show();
-   297
-   298 if(fingerprint == nick)
-   299 $('#home-icon').addClass("text-success").removeClass("text-danger");
-   300 else
-   301 $('#home-icon').addClass("text-danger").removeClass("text-success");
310 }).fail(() => { 302 }).fail(() => {
311 $('#trumbowyg').trumbowyg('enable'); 303 $('#trumbowyg').trumbowyg('enable');
312 $('#trumbowyg').show(); 304 $('#trumbowyg').show();
313 }); 305 });
314 }); 306 });
315 307
316 // When the reset button is pressed, navigate to the fingerprint. 308 // When the reset button is pressed, navigate to the fingerprint.
317 $('#reset').click(() => { 309 $('#reset').click(() => {
318 Cookies.set('nick', fingerprint, { path: '' }); 310 Cookies.set('nick', fingerprint, { path: '' });
319 $('#nick').val(fingerprint); 311 $('#nick').val(fingerprint);
320 result = fingerprint; 312 result = fingerprint;
321 nick = fingerprint; 313 nick = fingerprint;
322 -  
323 if(fingerprint == nick) -  
324 $('#home-icon').addClass("text-success").removeClass("text-danger"); -  
325 else -  
326 $('#home-icon').addClass("text-danger").removeClass("text-success"); -  
327 314
328 // Retrieve the contents of the shared file. 315 // Retrieve the contents of the shared file.
329 $.post('share-text.php', 316 $.post('share-text.php',
330 { 317 {
331 timestamp: window.performance.now(), 318 timestamp: window.performance.now(),
332 fingerprint: fingerprint, 319 fingerprint: fingerprint,
333 action: 'LOAD' 320 action: 'LOAD'
334 }).done((data) => {; 321 }).done((data) => {;
335 $('#trumbowyg') 322 $('#trumbowyg')
336 .trumbowyg('html', data); 323 .trumbowyg('html', data);
337 $('#trumbowyg').trumbowyg('enable'); 324 $('#trumbowyg').trumbowyg('enable');
338 $('#trumbowyg').show(); 325 $('#trumbowyg').show();
-   326
-   327 if(fingerprint == nick)
-   328 $('#home-icon').addClass("text-success").removeClass("text-danger");
-   329 else
-   330 $('#home-icon').addClass("text-danger").removeClass("text-success");
339 }).fail(() => { 331 }).fail(() => {
340 $('#trumbowyg').trumbowyg('enable'); 332 $('#trumbowyg').trumbowyg('enable');
341 $('#trumbowyg').show(); 333 $('#trumbowyg').show();
342 }); 334 });
343 }); 335 });
344 }); 336 });
345 -  
346 }); 337 });
347 </script> 338 </script>
348 </body> 339 </body>
349 </html> 340 </html>
350   341