Added node_modules to .npmignore - node modules shouldn't be installed with npm and cause Typscript duplicate definition errors Removed reference to _destroy in removeFromQueue (this was removed from the FileItem class but was still being called) Put in required type for EventEmitter Moved peer dependencies from dependencies to peer dependencies
97 lines
2.0 KiB
TypeScript
97 lines
2.0 KiB
TypeScript
import {
|
|
Component, View, OnInit, OnDestroy, OnChanges,
|
|
Directive, EventEmitter, ElementRef, Renderer,
|
|
CORE_DIRECTIVES, FORM_DIRECTIVES, NgClass
|
|
} from 'angular2/angular2';
|
|
|
|
import {FileUploader} from './file-uploader';
|
|
|
|
@Directive({
|
|
selector: '[ng2-file-drop]',
|
|
properties: ['uploader'],
|
|
events: ['fileOver'],
|
|
host: {
|
|
'(drop)': 'onDrop($event)',
|
|
'(dragover)': 'onDragOver($event)',
|
|
'(dragleave)': 'onDragLeave($event)'
|
|
}
|
|
})
|
|
export class FileDrop {
|
|
public uploader:FileUploader;
|
|
private fileOver:EventEmitter<any> = new EventEmitter();
|
|
|
|
constructor(private element:ElementRef) {
|
|
}
|
|
|
|
getOptions() {
|
|
return this.uploader.options;
|
|
}
|
|
|
|
getFilters() {
|
|
}
|
|
|
|
onDrop(event:any) {
|
|
let transfer = this._getTransfer(event);
|
|
if (!transfer) {
|
|
return;
|
|
}
|
|
|
|
let options = this.getOptions();
|
|
let filters = this.getFilters();
|
|
this._preventAndStop(event);
|
|
this.uploader.addToQueue(transfer.files, options, filters);
|
|
this.fileOver.next(false);
|
|
}
|
|
|
|
onDragOver(event:any) {
|
|
let transfer = this._getTransfer(event);
|
|
if (!this._haveFiles(transfer.types)) {
|
|
return;
|
|
}
|
|
|
|
transfer.dropEffect = 'copy';
|
|
this._preventAndStop(event);
|
|
this.fileOver.next(true);
|
|
}
|
|
|
|
onDragLeave(event:any):any {
|
|
if (event.currentTarget === (<any>this).element[0]) {
|
|
return;
|
|
}
|
|
|
|
this._preventAndStop(event);
|
|
this.fileOver.next(false);
|
|
}
|
|
|
|
private _getTransfer(event:any):any {
|
|
return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;
|
|
}
|
|
|
|
private _preventAndStop(event:any):any {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
}
|
|
|
|
private _haveFiles(types:any):any {
|
|
if (!types) {
|
|
return false;
|
|
}
|
|
|
|
if (types.indexOf) {
|
|
return types.indexOf('Files') !== -1;
|
|
} else if (types.contains) {
|
|
return types.contains('Files');
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
_addOverClass(item:any):any {
|
|
item.addOverClass();
|
|
}
|
|
|
|
_removeOverClass(item:any):any {
|
|
item.removeOverClass();
|
|
}
|
|
}
|