fix upload directive for Safari (#1871)

This commit is contained in:
Denys Vuika
2017-05-10 11:11:04 +01:00
committed by Eugenio Romano
parent 3482cc57be
commit 5c7d53230d
2 changed files with 18 additions and 3 deletions

View File

@@ -113,6 +113,7 @@ describe('UploadDirective', () => {
directive.enabled = true;
let files = [<File> {}];
let event = jasmine.createSpyObj('event', ['preventDefault', 'stopPropagation']);
spyOn(directive, 'getDataTransfer').and.returnValue({});
spyOn(directive, 'getFilesDropped').and.returnValue(files);
spyOn(nativeElement, 'dispatchEvent').and.stub();
directive.onDrop(event);
@@ -123,6 +124,7 @@ describe('UploadDirective', () => {
directive.enabled = true;
let files = [<File> {}];
let event = jasmine.createSpyObj('event', ['preventDefault', 'stopPropagation']);
spyOn(directive, 'getDataTransfer').and.returnValue({});
spyOn(directive, 'getFilesDropped').and.returnValue(files);
spyOn(nativeElement, 'dispatchEvent').and.callFake(e => {

View File

@@ -105,15 +105,18 @@ export class UploadDirective implements OnInit {
}
@HostListener('drop', ['$event'])
onDrop(event: DragEvent) {
onDrop(event: Event) {
if (this.isDropMode()) {
event.preventDefault();
event.stopPropagation();
this.isDragging = false;
const files = this.getFilesDropped(event.dataTransfer);
this.onUploadFiles(files);
const dataTranfer = this.getDataTransfer(event);
if (dataTranfer) {
const files = this.getFilesDropped(dataTranfer);
this.onUploadFiles(files);
}
}
}
@@ -144,6 +147,16 @@ export class UploadDirective implements OnInit {
return this.hasMode('click');
}
protected getDataTransfer(event: Event | any): DataTransfer {
if (event && event.dataTranfer) {
return event.dataTranfer;
}
if (event && event.originalEvent && event.originalEvent.dataTranfer) {
return event.originalEvent.dataTranfer;
}
return null;
}
/**
* Extract files from the DataTransfer object used to hold the data that is being dragged during a drag and drop operation.
* @param dataTransfer DataTransfer object