annotate OrthancExplorer/upload.html @ 3067:e4f146b7d2d9 update-jquery

added an upload.html in pure HTML/JS (no dependencies)
author amazy
date Thu, 27 Dec 2018 15:26:27 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3067
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
1 <!DOCTYPE html>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
2
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
3 <html>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
4
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
5 <head>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
6 <meta charset="utf-8">
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
7 <meta name="viewport" content="width=device-width, initial-scale=1">
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
8 <title>Orthanc Explorer Upload page</title>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
9 <style>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
10 #file-catcher {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
11 width: 100%;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
12 height: 100%;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
13 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
14
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
15 .no-files {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
16 border: 5px dashed #555;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
17 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
18
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
19 .files-over {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
20 border: 5px dashed #55B;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
21 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
22
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
23 .files-ready {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
24 border: 5px dashed green;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
25 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
26
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
27 .files-uploading {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
28 border: 5px dashed orange;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
29 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
30 </style>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
31
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
32 </head>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
33
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
34 <body>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
35
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
36 <form id='file-catcher' class="no-files">
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
37 <p>Drag one or more files to this Drop zone ...</p>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
38 <input id='file-input' type='file' multiple />
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
39 <button type='submit'>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
40 Submit
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
41 </button>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
42 </form>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
43
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
44 <div id='file-list-display'></div>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
45 </body>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
46 <script>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
47 (function () {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
48 var fileCatcher = document.getElementById('file-catcher');
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
49 var fileInput = document.getElementById('file-input');
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
50 var fileListDisplay = document.getElementById('file-list-display');
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
51 var maxConcurrentUploads = 4;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
52 var currentUploadCount = 0;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
53
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
54 var fileList = [];
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
55 var renderFileList, sendFile;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
56
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
57 removeDragData = function (ev) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
58 console.log('Removing drag data');
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
59
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
60 if (ev.dataTransfer.items) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
61 // Use DataTransferItemList interface to remove the drag data
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
62 ev.dataTransfer.items.clear();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
63 } else {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
64 // Use DataTransfer interface to remove the drag data
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
65 ev.dataTransfer.clearData();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
66 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
67 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
68
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
69 renderFileList = function () {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
70 fileListDisplay.innerHTML = '';
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
71 fileList.forEach(function (file, index) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
72 let fileDisplayEl = document.createElement('p');
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
73 fileDisplayEl.innerHTML = (index + 1) + ': ' + file.name;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
74 fileListDisplay.appendChild(fileDisplayEl);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
75 });
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
76 };
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
77
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
78 sendFile = function (file) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
79 if (currentUploadCount >= maxConcurrentUploads) { // retry later
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
80 setTimeout(function() {sendFile(file);}, 1);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
81 } else {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
82 currentUploadCount++;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
83 let formData = new FormData();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
84 let request = new XMLHttpRequest();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
85
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
86 formData.set('file', file);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
87 request.open("POST", '/instances');
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
88 request.onreadystatechange = function() { // Call a function when the state changes.
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
89 if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
90 // Request finished. Do processing here.
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
91 currentUploadCount--;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
92 } else if (this.readyState === XMLHttpRequest.DONE && this.status !== 200) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
93 console.log("failed", this);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
94 currentUploadCount--;
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
95 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
96 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
97 request.send(formData);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
98 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
99 };
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
100
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
101 setFileCatchClass = function (style) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
102 fileCatcher.classList.remove("no-files");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
103 fileCatcher.classList.remove("files-over");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
104 fileCatcher.classList.remove("files-ready");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
105 fileCatcher.classList.remove("files-uploading");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
106
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
107 fileCatcher.classList.add(style);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
108 };
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
109
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
110 fileCatcher.addEventListener('submit', function (evnt) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
111 evnt.preventDefault();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
112 setFileCatchClass("files-uploading");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
113 fileList.forEach(function (file) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
114 sendFile(file);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
115 });
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
116 fileList = [];
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
117 renderFileList();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
118 setFileCatchClass("no-files");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
119 });
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
120
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
121 fileCatcher.addEventListener('drop', function (e) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
122 console.log('File(s) dropped in zone', e);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
123 e.preventDefault();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
124
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
125 if (e.dataTransfer.items) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
126 // Use DataTransferItemList interface to access the file(s)
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
127 for (var i = 0; i < e.dataTransfer.items.length; i++) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
128 // If dropped items aren't files, reject them
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
129 if (e.dataTransfer.items[i].kind === 'file') {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
130 var file = e.dataTransfer.items[i].getAsFile();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
131 fileList.push(file);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
132 console.log('... file[' + i + '].name = ' + file.name);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
133 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
134 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
135 } else {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
136 // Use DataTransfer interface to access the file(s)
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
137 for (var i = 0; i < e.dataTransfer.files.length; i++) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
138 fileList.push(file);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
139 console.log('... file[' + i + '].name = ' + e.dataTransfer.files[i].name);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
140 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
141 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
142
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
143 renderFileList();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
144 // Pass event to removeDragData for cleanup
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
145 removeDragData(e);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
146 setFileCatchClass("files-ready");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
147 });
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
148
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
149 fileCatcher.addEventListener('dragover', function (e) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
150 console.log('File(s) in drop zone', e);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
151
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
152 // Prevent default behavior (Prevent file from being opened)
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
153 e.preventDefault();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
154 setFileCatchClass("files-over");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
155 });
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
156
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
157 fileInput.addEventListener('change', function (evnt) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
158 fileList = [];
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
159 for (var i = 0; i < fileInput.files.length; i++) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
160 fileList.push(fileInput.files[i]);
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
161 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
162 renderFileList();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
163 if (fileList.length > 0) {
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
164 setFileCatchClass("files-ready");
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
165 }
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
166 });
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
167
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
168 })();
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
169 </script>
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
170
e4f146b7d2d9 added an upload.html in pure HTML/JS (no dependencies)
amazy
parents:
diff changeset
171 </html>