From 5c7d53230d36b58730728b52a8cdece1b3d96832 Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Wed, 10 May 2017 11:11:04 +0100 Subject: [PATCH] fix upload directive for Safari (#1871) --- .../src/directives/upload.directive.spec.ts | 2 ++ .../src/directives/upload.directive.ts | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ng2-components/ng2-alfresco-core/src/directives/upload.directive.spec.ts b/ng2-components/ng2-alfresco-core/src/directives/upload.directive.spec.ts index d45181bb5a..6374d806e0 100644 --- a/ng2-components/ng2-alfresco-core/src/directives/upload.directive.spec.ts +++ b/ng2-components/ng2-alfresco-core/src/directives/upload.directive.spec.ts @@ -113,6 +113,7 @@ describe('UploadDirective', () => { directive.enabled = true; let files = [ {}]; 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 = [ {}]; let event = jasmine.createSpyObj('event', ['preventDefault', 'stopPropagation']); + spyOn(directive, 'getDataTransfer').and.returnValue({}); spyOn(directive, 'getFilesDropped').and.returnValue(files); spyOn(nativeElement, 'dispatchEvent').and.callFake(e => { diff --git a/ng2-components/ng2-alfresco-core/src/directives/upload.directive.ts b/ng2-components/ng2-alfresco-core/src/directives/upload.directive.ts index e41e8ecae0..dd61a6f65f 100644 --- a/ng2-components/ng2-alfresco-core/src/directives/upload.directive.ts +++ b/ng2-components/ng2-alfresco-core/src/directives/upload.directive.ts @@ -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