|
10 | 10 | '<a class="cancel-upload" title="cancel"></a>'+ |
11 | 11 | '</li>'; |
12 | 12 |
|
| 13 | + function extend(a, b) { |
| 14 | + for(var key in b) { |
| 15 | + if(b.hasOwnProperty(key)) { |
| 16 | + a[key] = b[key]; |
| 17 | + } |
| 18 | + } |
| 19 | + return a; |
| 20 | + } |
| 21 | + |
| 22 | + |
13 | 23 |
|
14 | 24 | var defaults = { |
15 | 25 | list : '', |
|
32 | 42 | minHeight:0, |
33 | 43 | minSize:0, |
34 | 44 | maxSize:0 |
35 | | - }, |
36 | | - o = $.extend({},defaults, options); |
| 45 | + }; |
| 46 | + |
| 47 | + var user_op = extend({}, options); |
| 48 | + // overiding defaults option |
| 49 | + var o = extend(defaults, user_op); |
| 50 | + |
| 51 | + |
37 | 52 | return this.each(function(){ |
38 | 53 |
|
39 | | - var input = $(this); |
| 54 | + var input = this; |
40 | 55 |
|
41 | 56 |
|
42 | 57 | function uploadFile(file){ |
43 | | - var item = $(o.item); |
44 | | - $(o.list).append(item); |
45 | 58 |
|
46 | | - var bar = item.find(o.progressBar); |
47 | | - var progressor = item.find(o.progressor).text('0%'); |
| 59 | + var list = document.querySelector(o.list); |
| 60 | + |
| 61 | + var i = create_dom_from_string(o.item); |
| 62 | + |
| 63 | + list.appendChild(i); |
| 64 | + |
| 65 | + // var item = $(i); |
| 66 | + |
| 67 | + var bar = i.querySelector(o.progressBar); |
| 68 | + |
| 69 | + // i.querySelector(o.progressor).innerHTML = '0%'; |
| 70 | + var progressor = i.querySelector(o.progressor); |
| 71 | + progressor.innerHTML = '0%'; |
| 72 | + // var bar = item.find(o.progressBar); |
| 73 | + // var progressor = item.find(o.progressor).text('0%'); |
48 | 74 | var size = parseInt(file.size/1024,10); |
49 | 75 | var name = file.name; |
50 | | - var object = item; |
| 76 | + // var object = $(i); |
| 77 | + var object = i; |
51 | 78 |
|
52 | 79 |
|
53 | 80 |
|
|
58 | 85 | // this path show the temporary file on browser |
59 | 86 | // which can be access via image src |
60 | 87 | var path = URL.createObjectURL(file); |
61 | | - var index = item.index(); |
| 88 | + // var index = $(i).index(); |
| 89 | + var index = Array.prototype.slice.call(list.children).indexOf(i); |
| 90 | + console.log(index); |
| 91 | + // var index = document.querySelectorAll(''); |
62 | 92 | var response; |
63 | 93 | var xhr = new XMLHttpRequest(); |
64 | 94 |
|
|
81 | 111 | object.loaded = loaded = parseInt(e.loaded/1024,10); |
82 | 112 | // total = e.total *1024; |
83 | 113 |
|
84 | | - if(bar.length) bar[0].style.width = progessFlow; |
85 | | - if(progressor.length) progressor.text(progress); |
| 114 | + // if(bar.length) bar.style.width = progessFlow; |
| 115 | + if(document.contains(bar)) bar.style.width = progessFlow; |
| 116 | + if(document.contains(progressor)) progressor.innerHTML = progress; |
86 | 117 |
|
87 | 118 | o.onProgress.call(this, object); |
88 | 119 | }; |
89 | 120 | // xhr.addEventListener("load", function () {}, false); |
90 | 121 | xhr.onload = function(){ |
91 | 122 | //update progress bar to 100% in firefox |
92 | 123 | //update progress number to display in the view |
93 | | - if(bar.length) progress = bar[0].style.width = 100 + "%"; |
94 | | - if(progressor.length) progressor.text(progress); |
| 124 | + // if(bar.length) progress = bar.style.width = 100 + "%"; |
| 125 | + if(document.contains(bar)) progress = bar.style.width = 100 + "%"; |
| 126 | + if(document.contains(progressor)) progressor.innerHTML = progress; |
95 | 127 | // loaded should be equal total by now |
96 | 128 | // loaded = total; |
97 | 129 |
|
|
145 | 177 |
|
146 | 178 | var type= getTrueFileType(files[i]); |
147 | 179 | // console.log(type); |
| 180 | + var item_vol = document.querySelector(o.list).children.length; |
148 | 181 |
|
149 | 182 | if(o.allowedType.length && !o.allowedType.match(type)){ |
150 | 183 | o.onTypeError.call(this, {name: files[i].name} ); |
151 | 184 | } |
152 | 185 | else if(o.maxSize >0 && parseInt(files[i].size/1024) > o.maxSize){ |
153 | 186 | o.onSizeError.call(this, {name: files[i].name}); |
154 | 187 | } |
155 | | - else if(o.maxLength>0 && $(o.list).children().length >= o.maxLength){ |
156 | | - o.onLengthError.call(this, $(o.list).children().length); |
| 188 | + else if(o.maxLength>0 && item_vol >= o.maxLength){ |
| 189 | + o.onLengthError.call(this, item_vol); |
157 | 190 | } |
158 | 191 | else if (typeof FileReader !== "undefined"){ |
159 | 192 |
|
|
165 | 198 | else if(o.minHeight>0 && height<o.minHeight){ |
166 | 199 | o.onDimensionError.call(this, {name :file.name, width: width, height: height}); |
167 | 200 | } |
168 | | - else if($(o.list).children().length >= o.maxLength){//needed double check items length |
169 | | - o.onLengthError.call(this, $(o.list).children().length); |
| 201 | + else if(item_vol >= o.maxLength){//needed double check items length |
| 202 | + o.onLengthError.call(this, item_vol); |
170 | 203 | } |
171 | 204 | else { |
172 | 205 | uploadFile(file); |
|
180 | 213 | } |
181 | 214 | } |
182 | 215 |
|
| 216 | + function create_dom_from_string(string){ |
| 217 | + var div = document.createElement('div'); |
| 218 | + div.innerHTML = string; |
| 219 | + return div.firstChild; |
| 220 | + } |
| 221 | + |
183 | 222 | function getImgSize(file, callback){ |
184 | 223 | var reader = new FileReader(); |
185 | 224 | reader.onload = function(evt) { |
186 | 225 | var image = new Image(); |
187 | 226 | image.onload = function(evt) { |
188 | 227 | var width = this.width; |
189 | 228 | var height = this.height; |
190 | | - if (callback) callback(file, width, height); |
| 229 | + callback && callback(file, width, height); |
191 | 230 | }; |
192 | 231 | image.src = evt.target.result; |
193 | 232 | }; |
|
207 | 246 | function sortResponse(response){ |
208 | 247 | var isJSON = true; |
209 | 248 |
|
210 | | - try {$.parseJSON(response);} catch (e) {isJSON = false;} |
| 249 | + try {JSON.parse(response);} catch (e) {isJSON = false;} |
211 | 250 |
|
212 | | - // response = JSON.parse(xhr.responseText); |
213 | | - if(isJSON === true){ sorted = $.parseJSON(response);} |
214 | | - else{sorted = response;} |
| 251 | + var sorted = isJSON ? JSON.parse(response) : response; |
215 | 252 |
|
216 | 253 | return sorted; |
217 | 254 | } |
218 | 255 |
|
219 | 256 |
|
220 | 257 | // cancel |
221 | 258 | // call cancel by trigger cancel event on input |
222 | | - input[0].addEventListener('cancel', function(){ |
| 259 | + input.addEventListener('cancel', function(){ |
223 | 260 | uploadFile.abort(); |
224 | 261 | o.onCancel.call(this); |
225 | 262 | }, false); |
226 | 263 |
|
227 | | - input[0].addEventListener("change", function () { |
| 264 | + input.addEventListener("change", function () { |
228 | 265 | traverseFiles(this.files); |
229 | 266 | }, false); |
230 | 267 |
|
231 | 268 |
|
232 | 269 | // drag and drop file |
233 | 270 | // detect dropzone, if there is no dropzone, create a random element for the event to bind with |
234 | 271 | // that means the events are useless without a delegated dropzone |
235 | | - var DZ = (o.dropZone.length ? $(o.dropZone)[0] : document.createElement('section')); |
| 272 | + var DZ = o.dropZone.length ? document.querySelector(o.dropZone) : document.createElement('section'); |
236 | 273 |
|
237 | 274 | DZ.addEventListener("dragleave", function (evt) { |
238 | 275 | var target = evt.target; |
|
0 commit comments