-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.dw.imagesrc.js
86 lines (75 loc) · 1.99 KB
/
jquery.dw.imagesrc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
* Author: dwoutsourcing ([email protected])
* License: MIT
*/
(function($, undefined) {
function getSourceType(source) {
var type;
if(/^data:image/.test(source))
type = 'dataURL';
else {
if(typeof source == 'string')
type = 'path';
else if(source.name)
type = 'localFile';
}
return type;
}
function initializeLoader($loader, $scope) {
return $loader
.on('progress', function(event, originalEvent, perc, loaded, total) {
$scope.trigger('progress', [originalEvent, perc, loaded, total]);
})
.on('loadstart', function(event, originalEvent) {
$scope.trigger('loadstart', [originalEvent]);
})
.on('loadend', function(event, originalEvent, result) {
$scope.trigger('loadend', [originalEvent, result]);
})
.on('error', function(event, originalEvent, result) {
$scope.trigger('error');
})
;
}
$.fn.extend({
src: function(source) {
var sourceType = getSourceType(source);
var $loader;
this.each(function() {
var $this = $(this);
$this.data('dw-source-type', sourceType);
switch(sourceType) {
case 'dataURL':
this.src = source;
break;
case 'path':
if($.canLoadData()) {
$loader = initializeLoader($.dataLoader(), $this)
.on('load', function(event, originalEvent, response) {
var blob = new Blob([response]);
var result = window.URL.createObjectURL(blob);
$this.attr('src', result);
})
.loadData(source, null, 'arraybuffer')
;
}
else
this.src = source;
break;
case 'localFile':
$loader = initializeLoader($.fileReader(), $this)
.on('load', function(event, originalEvent, result) {
$this.attr('src', result);
})
.readAsDataURL(source)
;
break;
}
$this.abort = function() {
if($loader)
$loader.abort();
};
});
}
});
}( jQuery ));