album.jinja 4.73 KB
Newer Older
Skia's avatar
Skia committed
1
2
3
4
5
6
{% extends "core/base.jinja" %}

{% block title %}
{% trans %}SAS{% endtrans %}
{% endblock %}

Skia's avatar
Skia committed
7
{% macro print_path(file) %}
Skia's avatar
Skia committed
8
{% if file and file.parent %}
Skia's avatar
Skia committed
9
10
11
12
13
14
{{ print_path(file.parent) }}
<a href="{{ url('sas:album', album_id=file.id) }}">{{ file.get_display_name() }}</a> >
{% endif %}
{% endmacro %}


Skia's avatar
Skia committed
15
{% block content %}
Skia's avatar
Skia committed
16
<a href="{{ url('sas:main') }}">SAS</a> > {{ print_path(album.parent) }} {{ album.get_display_name() }}
Skia's avatar
WIP SAS    
Skia committed
17
<h3>{{ album.get_display_name() }}</h3>
Skia's avatar
Skia committed
18
<a href="{{ url('sas:album_edit', album_id=album.id) }}">{% trans %}Edit{% endtrans %}</a><br>
Skia's avatar
Skia committed
19
<hr>
Skia's avatar
Skia committed
20
<div>
Skia's avatar
Skia committed
21
    {% for a in album.children.filter(is_folder=True, is_moderated=True).all() %}
Skia's avatar
Skia committed
22
23
24
25
26
27
28
29
30
31
    <a href="{{ url("sas:album", album_id=a.id) }}" style="display: inline-block">
    <div class="album">
        <div>
        {% if a.children.filter(is_folder=False, is_moderated=True).exists() %}
        <img src="{{ a.children.filter(is_folder=False).first().as_picture.get_download_thumb_url() }}" alt="{% trans %}preview{% endtrans %}">
        {% else %}
        <img src="{{ static('core/img/sas.jpg') }}" alt="{% trans %}preview{% endtrans %}">
        {% endif %}
        </div>
        {{ a.name }}
Skia's avatar
Skia committed
32
    </div>
Skia's avatar
Skia committed
33
    </a>
Skia's avatar
Skia committed
34
35
36
    {% endfor %}
</div>
<div>
Skia's avatar
Skia committed
37
    {% for p in album.children.filter(is_folder=False, is_moderated=True).order_by('id') %}
Skia's avatar
WIP SAS    
Skia committed
38
    {% if p.as_picture.can_be_viewed_by(user) %}
Skia's avatar
Skia committed
39
    <div class="picture">
40
        <a href="{{ url("sas:picture", picture_id=p.id) }}#pict">
Skia's avatar
Skia committed
41
            <img src="{{ p.as_picture.get_download_thumb_url() }}" alt="{{ p.get_display_name() }}" />
Skia's avatar
Skia committed
42
43
44
45
46
        </a>
    </div>
    {% endif %}
    {% endfor %}
</div>
47
48
49
50
51
<form action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p() }}
    <p><input type="submit" value="{% trans %}Upload{% endtrans %}" /></p>
</form>
Skia's avatar
Skia committed
52
53
{% endblock %}

Skia's avatar
Skia committed
54
55
{% block script %}
{{ super() }}
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<script>
$("form").submit(function (event) {
    var formData = new FormData($(this)[0]);

    if(formData.get('album_name') === '' && formData.get('images').name === '')
        return false;

    if(formData.get('images').name === '') {
        return true;
    }

    event.preventDefault();

    var errorlist;
    if((errorlist = this.querySelector('ul.errorlist.nonfield')) === null) {
        errorlist = document.createElement('ul');
        errorlist.classList.add('errorlist', 'nonfield');
        this.insertBefore(errorlist, this.firstElementChild);
    }

Skia's avatar
Skia committed
76
    while(errorlist.childElementCount > 0)
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
        errorlist.removeChild(errorlist.firstElementChild);

    var progress;
    if((progress = this.querySelector('progress')) === null) {
        progress = document.createElement('progress');
        progress.value = 0;
        var p = document.createElement('p');
        p.appendChild(progress);
        this.insertBefore(p, this.lastElementChild);
    }

    var dataHolder;

    if(formData.get('album_name') !== '') {
        dataHolder = new FormData();
        dataHolder.set('csrfmiddlewaretoken', '{{ csrf_token }}');
        dataHolder.set('album_name', formData.get('album_name'));
        $.ajax({
            method: 'POST',
            data: dataHolder,
            processData: false,
            contentType: false,
            success: onSuccess
Skia's avatar
Skia committed
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
    }

    var images = formData.getAll('images');
    var imagesCount = images.length;
    var completeCount = 0;

    var poolSize = 5;
    var imagePool = [];

    while(images.length > 0 && imagePool.length < poolSize) {
        var image = images.shift();
        imagePool.push(image);
        sendImage(image);
    }

    function sendImage(image) {
        dataHolder = new FormData();
        dataHolder.set('csrfmiddlewaretoken', '{{ csrf_token }}');
        dataHolder.set('images', image);

        $.ajax({
            method: 'POST',
            data: dataHolder,
            processData: false,
            contentType: false,
        })
            .done(onSuccess.bind(undefined, image))
            .always(next.bind(undefined, image));
    }

    function next(image, status, jqXHR) {
        var index;
        if(index = imagePool.indexOf(image) !== -1) {
            imagePool.splice(index, 1);
        }
        var nextImage;
        if(nextImage = images.shift()) {
            imagePool.push(nextImage);

            sendImage(nextImage);
        }
    }

    function onSuccess(image, data, status, jqXHR) {
Skia's avatar
Skia committed
145
146
147
148
        if ($(data).find('.errorlist.nonfield')[0])
            var errors = Array.from($(data).find('.errorlist.nonfield')[0].children);
        else
            var errors = []
149
150
151
152
153
154
155
156
        while(errors.length > 0)
            errorlist.appendChild(errors.shift());
        progress.value = ++completeCount / imagesCount;
        if(progress.value === 1 && errorlist.children.length === 0)
            document.location.reload()
    }
});
</script>
Skia's avatar
Skia committed
157
{% endblock %}