Skip to content

Cannot set property 'effectAllowed' of undefined AGAIN #22

@OwenMelbz

Description

@OwenMelbz

I noticed a previous post with a similar issue - however I couldnt resolve this my end.

I've got the following html setup

<section class="uk-grid"
    id="media"
    ng-controller="MediaCtrl"
    ng-include="'views/media.html'"
    ng-show="user.Data.loggedIn",
    file="image"
    file-dropzone="[image/png, image/jpeg, image/gif]"
    file-name="imageFileName"
    data-max-file-size="5"
></section>

then my js has

GMP.controller('MediaCtrl', function($scope, User){
    $scope.image = null;
    $scope.imageFileName = '';
});

GMP.directive('fileDropzone', function(){
    return {
        restrict: 'A',
        scope: {
            file: '=',
            fileName: '='
        },
        link: function($scope, element, attrs){
            var checkSize, isTypeValid, processDragOverOrEnter, validMimeTypes;

            processDragOverOrEnter = function (event) {
                if (event != null) {
                    event.preventDefault();
                }

                event.dataTransfer.effectAllowed = 'copy';

                return false;
            };

            validMimeTypes = attrs.fileDropzone;

            checkSize = function (size) {
                var _ref;
                if (((_ref = attrs.maxFileSize) === (void 0) || _ref === '') || (size / 1024) / 1024 < attrs.maxFileSize) {
                    return true;
                } else {
                    alert("File must be smaller than " + attrs.maxFileSize + " MB");
                    return false;
                }
            };

            isTypeValid = function (type) {
                if ((validMimeTypes === (void 0) || validMimeTypes === '') || validMimeTypes.indexOf(type) > -1) {
                    return true;
                } else {
                    alert("Invalid file type.  File must be one of following types " + validMimeTypes);
                    return false;
                }
            };

            element.bind('dragover', processDragOverOrEnter);
            element.bind('dragenter', processDragOverOrEnter);

            return element.bind('drop', function (event) {

                var file, name, reader, size, type;

                if (event != null) {
                    event.preventDefault();
                }

                reader = new FileReader();

                reader.onload = function (evt) {
                    if (checkSize(size) && isTypeValid(type)) {
                        return $scope.$apply(function () {
                            $scope.file = evt.target.result;
                            if (angular.isString($scope.fileName)) {
                                return $scope.fileName = name;
                            }
                        });
                    }
                };

                file = event.dataTransfer.files[0];
                name = file.name;
                type = file.type;
                size = file.size;
                reader.readAsDataURL(file);
                return false;
            });
        }
    }
});

However when i start dragging an item over the page i get the following console errors

Uncaught TypeError: Cannot set property 'effectAllowed' of undefined
processDragOverOrEnter
f.event.dispatch jquery.min.js:
h.handle.i jquery.min.js:

Uncaught TypeError: Cannot read property 'files' of undefined site.js:1(anonymous function) f.event.dispatch jquery.min.js:
h.handle.i

Please advise!

Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions