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

View File

@@ -105,15 +105,18 @@ export class UploadDirective implements OnInit {
} }
@HostListener('drop', ['$event']) @HostListener('drop', ['$event'])
onDrop(event: DragEvent) { onDrop(event: Event) {
if (this.isDropMode()) { if (this.isDropMode()) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
this.isDragging = false; this.isDragging = false;
const files = this.getFilesDropped(event.dataTransfer); const dataTranfer = this.getDataTransfer(event);
this.onUploadFiles(files); if (dataTranfer) {
const files = this.getFilesDropped(dataTranfer);
this.onUploadFiles(files);
}
} }
} }
@@ -144,6 +147,16 @@ export class UploadDirective implements OnInit {
return this.hasMode('click'); 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. * 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 * @param dataTransfer DataTransfer object