07830726a57c1c0cfe40750a10bdcfcce3618339.svn-base
3.2 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
'use strict';
import CONFIG from './../config.json';
let {
extend,
forEach
} = angular;
export default (FileDirective) => {
class FileDrop extends FileDirective {
/**
* Creates instance of {FileDrop} object
* @param {Object} options
* @constructor
*/
constructor(options) {
let extendedOptions = extend(options, {
// Map of events
events: {
$destroy: 'destroy',
drop: 'onDrop',
dragover: 'onDragOver',
dragleave: 'onDragLeave'
},
// Name of property inside uploader._directive object
prop: 'drop'
});
super(extendedOptions);
}
/**
* Returns options
* @return {Object|undefined}
*/
getOptions() {
}
/**
* Returns filters
* @return {Array<Function>|String|undefined}
*/
getFilters() {
}
/**
* Event handler
*/
onDrop(event) {
var transfer = this._getTransfer(event);
if(!transfer) return;
var options = this.getOptions();
var filters = this.getFilters();
this._preventAndStop(event);
forEach(this.uploader._directives.over, this._removeOverClass, this);
this.uploader.addToQueue(transfer.files, options, filters);
}
/**
* Event handler
*/
onDragOver(event) {
var transfer = this._getTransfer(event);
if(!this._haveFiles(transfer.types)) return;
transfer.dropEffect = 'copy';
this._preventAndStop(event);
forEach(this.uploader._directives.over, this._addOverClass, this);
}
/**
* Event handler
*/
onDragLeave(event) {
if(event.currentTarget === this.element[0]) return;
this._preventAndStop(event);
forEach(this.uploader._directives.over, this._removeOverClass, this);
}
/**
* Helper
*/
_getTransfer(event) {
return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;
}
/**
* Helper
*/
_preventAndStop(event) {
event.preventDefault();
event.stopPropagation();
}
/**
* Returns "true" if types contains files
* @param {Object} types
*/
_haveFiles(types) {
if(!types) return false;
if(types.indexOf) {
return types.indexOf('Files') !== -1;
} else if(types.contains) {
return types.contains('Files');
} else {
return false;
}
}
/**
* Callback
*/
_addOverClass(item) {
item.addOverClass();
}
/**
* Callback
*/
_removeOverClass(item) {
item.removeOverClass();
}
}
return FileDrop;
}
module.exports.$inject = [
'FileDirective'
];