File size: 4,313 Bytes
c9a11d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
class ImageNavigator {
    constructor() {
        this.targets = [
            'blank',
            'circle',
            'rectangle'
        ];
        this.sources = [];
        this.idx = 0;
        this.imgPlaceholder = document.getElementById('imgPlaceholder');
        // this.imgData = null;
        this.prevBtn = document.getElementById('prevBtn');
        this.nextBtn = document.getElementById('nextBtn');
    }

    async getImgData(target) {
        try {
            let res = await fetch(
                '../draw?target=' + target,
                {
                    method: 'GET'
                }
            );
            return await res.json();
        } catch (error) {
            console.log(error);
        }
    }

    async fetchImgData(target) {
        let imgDataObj = await this.getImgData(target);
        if (imgDataObj != null) {
            // this.imgData = imgDataObj.data;
            // this.imgPlaceholder.innerHTML = '<img src=' + this.imgData + '>';
            return imgDataObj.data;
        }
        return null;
    }

    toggleImage(change) {
        this.idx += change;
        if (this.idx < 0)
            this.idx += this.sources.length;
        else
            this.idx %= this.sources.length;
        this.imgPlaceholder.src = this.sources[this.idx];
    }

    toPrevImage() {
        this.toggleImage(-1);
    }

    toNextImage() {
        this.toggleImage(1);
    }

    async initialize() {
        // this.targets.forEach(
        //     target => {
        //         let targetSrc = await this.fetchImgData(target);
        //         this.sources.push(targetSrc);
        //     }
        // )
        for (var i = 0; i < this.targets.length; i++) {
            var target = this.targets[i];
            let targetSrc = await this.fetchImgData(target);
            this.sources.push(targetSrc);
        }
        // this.imgPlaceholder.src = this.sources[this.idx];
        this.toggleImage(0);

        this.prevBtn.addEventListener('mouseup', e => this.toPrevImage());
        this.nextBtn.addEventListener('mouseup', e => this.toNextImage());
    }
}

var imageNav = new ImageNavigator();
imageNav.initialize();


class DropHandler {
    constructor() {
        this.dropZone = document.getElementById('drop_zone');
        this.droppedImages = document.getElementById('droppedImages');
    }

    validateImage(image) {
        var validTypes = ['image/jpeg', 'image/png', 'image/gif'];
        if (validTypes.indexOf(image.type) == -1) {
            console.log('Invalid File Type: ' + image.type);
            return false;
        }

        var maxSizeInBytes = 10e6; //10MB
        if (image.size > maxSizeInBytes) {
            console.log('File is too large: ' + image.size);
            return false
        }

        return true;
    }

    /**
     * Refer to https://soshace.com/the-ultimate-guide-to-drag-and-drop-image-uploading-with-pure-javascript/
     * @param {object} event 
     */
    processDrop(event) {
        console.log('File(s) dropped');

        // Prevent default behavior (Prevent file from being opened)
        event.preventDefault();

        var dt = event.dataTransfer;
        var files = dt.files;
        if (files.length > 0) {
            for (var i = 0; i < files.length; i++) {
                if (this.validateImage(files[i])) {
                    var img = document.createElement('img');
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        img.src = e.target.result;
                        imageNav.sources.push(e.target.result);
                    }
                    reader.readAsDataURL(files[i]);
                    this.droppedImages.appendChild(img);
                }
            }
        }
        else
            console.log('Dropped ' + files.length + ' files.');
    }

    processDragOver(event) {
        console.log('File(s) in drop zone');

        // Prevent default behavior (Prevent file from being opened)
        event.preventDefault();
    }

    initialize() {
        this.dropZone.addEventListener('drop', e => this.processDrop(e));
        this.dropZone.addEventListener('dragover', e => this.processDragOver(e));
    }
}

var dropHandler = new DropHandler();
dropHandler.initialize();