Skip to content

Commit 0a1e7c7

Browse files
committed
Split readFile callback into load/error functions.
This improves reject handling.
1 parent 570b5a5 commit 0a1e7c7

File tree

2 files changed

+37
-31
lines changed

2 files changed

+37
-31
lines changed

js/load-image-meta.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,11 @@
9797
if (
9898
!loadImage.readFile(
9999
loadImage.blobSlice.call(file, 0, maxMetaDataSize),
100-
function (e) {
101-
if (e.target.error) {
102-
// FileReader error
103-
return reject(e.target.error)
104-
}
100+
function (buffer) {
105101
// Note on endianness:
106102
// Since the marker and length bytes in JPEG files are always
107103
// stored in big endian order, we can leave the endian parameter
108104
// of the DataView methods undefined, defaulting to big endian.
109-
var buffer = e.target.result
110105
var dataView = new DataView(buffer)
111106
// Check for the JPEG marker (0xffd8):
112107
if (dataView.getUint16(0) !== 0xffd8) {
@@ -168,6 +163,7 @@
168163
}
169164
resolve(data)
170165
},
166+
reject,
171167
'readAsArrayBuffer'
172168
)
173169
) {

js/load-image.js

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,33 @@
4848
}
4949
}
5050

51+
/**
52+
* Loads a given File object via FileReader interface.
53+
*
54+
* @param {Blob} file Blob object
55+
* @param {Function} onload Load event callback
56+
* @param {Function} [onerror] Error/Abort event callback
57+
* @param {string} [method=readAsDataURL] FileReader method
58+
* @returns {FileReader|boolean} Returns FileReader if API exists, else false.
59+
*/
60+
function readFile(file, onload, onerror, method) {
61+
if (!$.FileReader) return false
62+
var reader = new FileReader()
63+
reader.onload = function () {
64+
onload.call(reader, this.result)
65+
}
66+
if (onerror) {
67+
reader.onabort = reader.onerror = function () {
68+
onerror.call(reader, this.error)
69+
}
70+
}
71+
var readerMethod = reader[method || 'readAsDataURL']
72+
if (readerMethod) {
73+
readerMethod.call(reader, file)
74+
return reader
75+
}
76+
}
77+
5178
/**
5279
* Loads an image for a given File object.
5380
*
@@ -140,14 +167,13 @@
140167
img.src = url
141168
return img
142169
}
143-
return loadImage.readFile(file, function (e) {
144-
var target = e.target
145-
if (target && target.result) {
146-
img.src = target.result
147-
} else if (reject) {
148-
reject(e)
149-
}
150-
})
170+
return readFile(
171+
file,
172+
function (url) {
173+
img.src = url
174+
},
175+
reject
176+
)
151177
}
152178
}
153179
if ($.Promise && typeof callback !== 'function') {
@@ -179,24 +205,8 @@
179205
callback(img, data)
180206
}
181207

182-
// Loads a given File object via FileReader interface,
183-
// invokes the callback with the event object (load or error).
184-
// The result can be read via event.target.result:
185-
loadImage.readFile = function (file, callback, method) {
186-
if ($.FileReader) {
187-
var fileReader = new FileReader()
188-
fileReader.onload = fileReader.onerror = callback
189-
// eslint-disable-next-line no-param-reassign
190-
method = method || 'readAsDataURL'
191-
if (fileReader[method]) {
192-
fileReader[method](file)
193-
return fileReader
194-
}
195-
}
196-
return false
197-
}
198-
199208
loadImage.global = $
209+
loadImage.readFile = readFile
200210
loadImage.createObjectURL = createObjectURL
201211
loadImage.revokeObjectURL = revokeObjectURL
202212

0 commit comments

Comments
 (0)