1 {% extends 'qcg/base.html' %}
2 {% load staticfiles bootstrap3 %}
5 <link href="{% static 'qcg/selectize/selectize.bootstrap3.css' %}" rel="stylesheet">
9 <script src="{% static 'qcg/cookie/jquery.cookie.min.js' %}"></script>
10 <script src="{% static 'qcg/globals.js' %}"></script>
11 {% include 'filex/source.js.html' %}
17 String.prototype.endsWith = function(suffix) {
18 return this.indexOf(suffix, this.length - suffix.length) !== -1;
21 function status(msg) {
22 clearTimeout(statusTimeout);
23 statusTimeout = setTimeout(function() {
24 $('#status').text('');
27 $('#status').text(msg);
31 status('Wystąpił błąd.');
32 console.error(arguments);
36 filex.files.on('change:checked reset', function() {
37 var selected = filex.selectedFiles().length;
39 $('#btn-rename').toggleClass('disabled', selected != 1);
40 $('#btn-delete').toggleClass('disabled', selected == 0);
41 $('#btn-compress').toggleClass('disabled', selected == 0);
44 var filename = filex.selectedFiles()[0].get('name'),
45 is_archive = _.some(['.zip', '.tar.gz', '.tgz', '.tar.bz2', 'tbz'], function(ext) {
46 return filename.endsWith(ext);
49 $('#btn-extract').toggleClass('disabled', !is_archive);
52 $('#btn-extract').toggleClass('disabled', true);
56 $('#btn-upload').on('click', function() {
57 var url = '{% url 'gridftp_upload' %}?' + $.param({host: filex.host, path: filex.path.full() + '/'});
59 var win = window.open(url, url, 'height=500,width=800');
63 $('#btn-delete').on('click', function() {
64 var selected = _.groupBy(filex.selectedFiles(), function(item) { return item.get('type') }),
65 dirs = _.map(selected.directory || [], function (item) { return item.get('name') }),
66 files = _.map(selected.file || [], function (item) { return item.get('name') }),
69 path: filex.path.full() + '/',
73 $confirmModal = $('#confirm-modal'),
74 $confirmList = $confirmModal.find('ul').html('');
76 _.each(filex.selectedFiles(), function(item) {
77 $('<li>', {text: item.get('name')}).appendTo($confirmList);
80 $('#btn-confirm').off().on('click', function() {
83 $.post('{% url 'filex:delete' %}', data, function(response) {
84 var keys = Object.keys(response.fail);
87 var $errorModal = $('#error-modal'),
88 $errorList = $errorModal.find('dl').html('');
91 $('<dt>', {text: keys[i]}).appendTo($errorList);
92 $('<dd>', {text: response.fail[keys[i]]}).appendTo($errorList);
99 status('Usuwanie zakończone pomyślnie');
102 if (response.done.length)
105 }, 'json').fail(fail);
107 $confirmModal.modal('hide');
110 $confirmModal.modal();
113 $('#mkdir-form').on('submit', function(e) {
120 $this.find('#id_host').val(filex.host);
121 $this.find('#id_path').val(filex.path.full());
123 $.post($this.attr('action'), $this.serialize(), function() {
124 status('Katalog utworzono pomyślnie');
126 }, 'json').fail(fail);
129 $('#rename-form').on('show.bs.modal', function() {
132 var file = filex.selectedFiles()[0];
134 $this.find('#id_host').val(filex.host);
135 $this.find('#id_path').val(filex.path.full());
136 $this.find('#id_src').val(file.get('name'));
137 $this.find('#id_dst').val(file.get('name'));
138 }).on('submit', function(e) {
145 $.post($this.attr('action'), $this.serialize(), function() {
146 status('Nazwę zmieniono pomyślnie');
148 }, 'json').fail(fail);
151 $('#compress-form').on('submit', function(e) {
155 name = $this.find('#id_name').val(),
156 type = $this.find('#id_type').val(),
157 archive = name + (name.endsWith(type) ? '' : type),
160 path: filex.path.full(),
161 files: _.map(filex.selectedFiles(), function (item) { return item.get('name') }),
165 // check if maybe file with given name exists
166 if (filex.files.some(function(item) { return item.get('name') == archive })) {
167 $this.find('.alert').remove();
170 'class': 'alert alert-danger',
171 html: '<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> Plik o podanej już nazwie istnieje!'
172 }).prependTo($this.find('.modal-body'));
180 $.post($this.attr('action'), data, function() {
181 status('Archiwum utworzono pomyślnie');
183 }, 'json').fail(fail);
186 $('#btn-extract').on('click', function() {
191 archive: filex.path.full() + '/' + filex.selectedFiles()[0].get('name'),
192 dst: filex.path.full()
195 $.post('{% url 'filex:extract' %}', data, function() {
196 status('Archiwum rozpakowano pomyślnie');
198 }, 'json').fail(fail);
202 {% endblock extra_js %}
204 {% block title %}Zarządzanie plikami GridFTP{% endblock %}
206 {% block container %}
207 {% include 'filex/source.html' %}
209 <div id="confirm-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="confirm-modal-label" aria-hidden="true">
210 <div class="modal-dialog">
211 <div class="modal-content">
212 <div class="modal-header">
213 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
214 <span aria-hidden="true">×</span>
216 <h4 class="modal-title" id="confirm-modal-label">Usuwanie plików</h4>
218 <div class="modal-body">
219 <h4>Czy na pewno usunąć następujące elementy?</h4>
222 <div class="modal-footer">
223 <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
224 <button id="btn-confirm" type="button" class="btn btn-primary">OK</button>
230 <div id="error-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="error-modal-label" aria-hidden="true">
231 <div class="modal-dialog">
232 <div class="modal-content">
233 <div class="modal-header">
234 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
235 <span aria-hidden="true">×</span>
237 <h4 class="modal-title" id="error-modal-label">Błąd</h4>
239 <div class="modal-body">
240 <h4>Wystąpiły problemy podczas usuwania:</h4>
241 <dl class="dl-horizontal"></dl>
243 <div class="modal-footer">
244 <button type="button" class="btn btn-primary" data-dismiss="modal">OK</button>
250 <form id="mkdir-form" action="{% url 'filex:mkdir' %}" class="modal fade form-horizontal" tabindex="-1" role="dialog" aria-labelledby="mkdir-modal-label" aria-hidden="true">
251 <div class="modal-dialog">
252 <div class="modal-content">
253 <div class="modal-header">
254 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
255 <span aria-hidden="true">×</span>
257 <h4 class="modal-title" id="mkdir-modal-label">Nowy katalog</h4>
259 <div class="modal-body">
261 {% bootstrap_form new_dir_form layout='horizontal' %}
263 <div class="modal-footer">
264 <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
265 <button type="submit" class="btn btn-primary">OK</button>
271 <form id="rename-form" action="{% url 'filex:move' %}" class="modal fade form-horizontal" tabindex="-1" role="dialog" aria-labelledby="rename-modal-label" aria-hidden="true">
272 <div class="modal-dialog">
273 <div class="modal-content">
274 <div class="modal-header">
275 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
276 <span aria-hidden="true">×</span>
278 <h4 class="modal-title" id="rename-modal-label">Zmień nazwę</h4>
280 <div class="modal-body">
282 {% bootstrap_form rename_form layout='horizontal' %}
284 <div class="modal-footer">
285 <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
286 <button type="submit" class="btn btn-primary">OK</button>
292 <form id="compress-form" action="{% url 'filex:compress' %}" class="modal fade form-horizontal" tabindex="-1" role="dialog" aria-labelledby="compress-modal-label" aria-hidden="true">
293 <div class="modal-dialog">
294 <div class="modal-content">
295 <div class="modal-header">
296 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
297 <span aria-hidden="true">×</span>
299 <h4 class="modal-title" id="compress-modal-label">Podaj nazwę archiwum</h4>
301 <div class="modal-body">
303 {% bootstrap_form archive_form layout='horizontal' %}
305 <div class="modal-footer">
306 <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
307 <button type="submit" class="btn btn-primary">OK</button>
312 {% endblock container %}
315 <footer class="navbar navbar-default navbar-fixed-bottom" style="position:fixed">
316 <div class="container">
317 <div class="btn-toolbar" role="toolbar" style="float: left">
318 <div class="btn-group" role="group">
319 <button id="btn-upload" class="btn btn-default navbar-btn">Wgraj plik</button>
320 <button class="btn btn-default navbar-btn" data-toggle="modal" data-target="#mkdir-form">Utwórz katalog</button>
322 <div class="btn-group" role="group">
323 <button id="btn-rename" class="btn btn-default navbar-btn disabled" data-toggle="modal" data-target="#rename-form">Zmień nazwę</button>
324 <button id="btn-delete" class="btn btn-default navbar-btn disabled">Usuń</button>
326 <div class="btn-group" role="group">
327 <button id="btn-compress" class="btn btn-default navbar-btn disabled" data-toggle="modal" data-target="#compress-form">Spakuj</button>
328 <button id="btn-extract" class="btn btn-default navbar-btn disabled">Rozpakuj</button>
331 <p id="status" class="navbar-text"></p>
334 {% endblock footer %}