UNPKG

angular-file-drop

Version:
105 lines (101 loc) 3.4 kB
(function() { var app; app = angular.module('ngFileDrop', []); app.directive('dropZone', function() { return { restrict: 'A', link: function(scope, element, attrs) { var dragClassName, handleFiles, outputType; element = $(element[0]); outputType = attrs.outputType || 'dataURI'; dragClassName = attrs.dragClass || 'dragging'; $("body").append('<input type=file style="display: none" class="__dropZoneInput">'); element[0].addEventListener('dragover', function(event) { event.preventDefault(); event.stopPropagation(); return element.addClass(dragClassName); }); element[0].addEventListener('dragleave', function(event) { event.preventDefault(); event.stopPropagation(); return element.removeClass(dragClassName); }); element[0].addEventListener('drop', function(e) { var files; event.preventDefault(); event.stopPropagation(); element.removeClass(dragClassName); files = e.dataTransfer.files; return handleFiles(files); }); $(".__dropZoneInput").on('change', function() { var files; files = this.files; return handleFiles(files); }); element.click(function() { return $(".__dropZoneInput").click(); }); return handleFiles = function(files) { var count, file, i, len, reader, results; reader = new FileReader; if (outputType === 'dataURI') { reader.readAsDataURL(files[0]); } else if (outputType === 'ArrayBuffer') { reader.readAsArrayBuffer(files[0]); } else if (outputType === 'File') { scope.$apply(function() { return scope.file = files[0]; }); } reader.onload = function(res) { return scope.$apply(function() { return scope.file = res.target.result; }); }; count = files.length; scope.$apply(function() { return scope.files = []; }); results = []; for (i = 0, len = files.length; i < len; i++) { file = files[i]; reader = new FileReader; if (outputType === 'dataURI') { reader.readAsDataURL(file); } else if (outputType === 'ArrayBuffer') { reader.readAsArrayBuffer(file); } else if (outputType === 'File') { scope.$apply(function() { return scope.files.push(file); }); count--; if (count === 0) { scope.$apply(function() { return scope.drop(); }); } } results.push(reader.onload = function(res) { scope.$apply(function() { return scope.files.push(res.target.result); }); count--; if (count === 0) { return scope.$apply(function() { return scope.drop(); }); } }); } return results; }; }, scope: { file: '=file', files: '=files', drop: '=drop' } }; }); }).call(this);