summaryrefslogtreecommitdiffstats
path: root/app/static/js/push.js
blob: e6916c89348797b9814f96fe236fb6abf4a2a631 (plain) (blame)
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
const progress_radius = 20;
const progress_len = progress_radius * 2 * Math.PI;

window.addEventListener('DOMContentLoaded', function() {
    let pusher = document.getElementById('push-image-btn');

    let total = 0;
    let processed = 0;
    let page_hard_lock = 1;

    pusher.addEventListener('click', function(e) {
        let input = document.createElement('input');
        input.type = 'file';
        input.accept = 'image/*';
        input.multiple = true;
        input.addEventListener('change', (input_event) => {
            console.log(input_event.target.files);
            Array.prototype.forEach.call(input_event.target.files, file => {
                let data = new FormData();
                data.append('im', file);

                let fileno = total;
                total += 1;
                let wrapper = append_template_for_file (file, fileno);
                let progress = wrapper.querySelector('.progress-path');
                let status = wrapper.querySelector('.progress-status');

                let req = new XMLHttpRequest();
                req.addEventListener('load', (e) => {
                    let bg = wrapper.querySelector('.progress-bg');
                    bg.style.filter = 'none';
                    progress.style.stroke = '#0000';
                    
                    processed += 1;
                    if (processed == total && !page_hard_lock) {
                        location.reload();
                    }
                });
                req.upload.addEventListener('progress', (e) => {
                    let complete = 0;
                    if (e.lengthComputable) {
                        complete = e.loaded / e.total;
                    }
                    status.innerHTML = (e.loaded / 1000000).toFixed(2) + '/' + (e.total / 1000000).toFixed(2) + 'M';
                    progress.style.strokeDasharray = (complete * Math.PI * 2 * progress_radius).toString () + ',' + progress_len.toString();

                });

                req.open('POST', '/c/push');
                req.send(data);
            });
            page_hard_lock = 0;
        });

        input.click();
    });
});

function append_template_for_file (file, fileno) {
    let imageurl = URL.createObjectURL(file);
    let tmpl = document.querySelector('#progress-template');
    let root = document.querySelector('#template-goes-here');
    let newnode = document.importNode(tmpl.content, true);
    let style = newnode.querySelector('.progress-bg').style;
    style.background = 'url(' + imageurl + ')';
    style.backgroundSize = 'cover';
    style.backgroundPosition = 'center';
    style.backgroundRepeat = 'no-repeat';
    root.appendChild(newnode);
    let appended = root.lastChild.previousSibling;
    appended.setAttribute('id', 'progress-files-' + fileno.toString());

    return appended;
}