UNPKG

angular-file-drop

Version:
83 lines (68 loc) 1.97 kB
app = angular.module 'ngFileDrop', [] app.directive 'dropZone', -> restrict: 'A' link: (scope, element, attrs) -> element = $(element[0]) outputType = attrs.outputType || 'dataURI' dragClassName = attrs.dragClass || 'dragging' # Hidden file input $("body").append '<input type=file style="display: none" class="__dropZoneInput">' # Events listeners element[0].addEventListener 'dragover', (event) -> event.preventDefault() event.stopPropagation() element.addClass dragClassName element[0].addEventListener 'dragleave', (event) -> event.preventDefault() event.stopPropagation() element.removeClass dragClassName element[0].addEventListener 'drop', (e) -> event.preventDefault() event.stopPropagation() element.removeClass dragClassName files = e.dataTransfer.files handleFiles files $(".__dropZoneInput").on 'change', -> files = @files handleFiles files element.click -> $(".__dropZoneInput").click() handleFiles = (files) -> reader = new FileReader if outputType == 'dataURI' reader.readAsDataURL files[0] else if outputType == 'ArrayBuffer' reader.readAsArrayBuffer files[0] else if outputType == 'File' scope.$apply -> scope.file = files[0] reader.onload = (res) -> scope.$apply -> scope.file = res.target.result count = files.length scope.$apply -> scope.files = [] for file in files reader = new FileReader if outputType == 'dataURI' reader.readAsDataURL file else if outputType == 'ArrayBuffer' reader.readAsArrayBuffer file else if outputType == 'File' scope.$apply -> scope.files.push file count-- if count == 0 scope.$apply -> do scope.drop reader.onload = (res) -> scope.$apply -> scope.files.push res.target.result count-- if count == 0 scope.$apply -> do scope.drop scope: file: '=file' files: '=files' drop: '=drop'