Skip to content

Commit 51c07bf

Browse files
committed
🎉 Add support for uploading files from file listing! 🎉
closes pterodactyl#22
1 parent 63d7062 commit 51c07bf

File tree

3 files changed

+143
-2
lines changed

3 files changed

+143
-2
lines changed

public/themes/default/css/pterodactyl.css

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,3 +285,25 @@ li.btn.btn-default.pill:active,li.btn.btn-default.pill:focus,li.btn.btn-default.
285285
#consoleThrottled:hover {
286286
opacity: 1;
287287
}
288+
289+
.hasFileHover {
290+
border: 2px dashed #0087F7;
291+
border-radius: 5px;
292+
margin: 0;
293+
opacity: 0.5;
294+
}
295+
296+
.hasFileHover * {
297+
pointer-events: none;
298+
}
299+
300+
td.has-progress {
301+
padding: 0px !important;
302+
border-top: 0px !important;
303+
}
304+
.progress.progress-table-bottom {
305+
margin: 0 !important;
306+
height:5px !important;
307+
padding:0;
308+
border:0;
309+
}

resources/views/server/files/index.blade.php

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
@parent
2828
{!! Theme::js('js/vendor/async/async.min.js') !!}
2929
{!! Theme::js('js/vendor/lodash/lodash.js') !!}
30+
{!! Theme::js('js/vendor/upload/client.min.js') !!}
3031
@endsection
3132

3233
@section('content')
@@ -43,7 +44,7 @@
4344
<div class="ajax_loading_box"><i class="fa fa-refresh fa-spin" id="position_me"></i></div>
4445
</div>
4546
</div>
46-
<div class="row">
47+
<div class="row" id="upload_box">
4748
<div class="col-md-12" id="load_files"></div>
4849
<div class="col-md-12">
4950
<div class="panel panel-default">
@@ -63,6 +64,124 @@
6364
<script>
6465
$(window).load(function () {
6566
$('.server-files').addClass('active');
67+
@can('upload-files', $server)
68+
var notifyUploadSocketError = false;
69+
var uploadSocket = io('{{ $node->scheme }}://{{ $node->fqdn }}:{{ $node->daemonListen }}/upload/{{ $server->uuid }}', {
70+
'query': 'token={{ $server->daemonSecret }}'
71+
});
72+
73+
socket.io.on('connect_error', function (err) {
74+
siofu.destroy();
75+
$('#applyUpdate').removeClass('fa-circle-o-notch fa-spinner fa-spin').addClass('fa-question-circle').css({ color: '#FF9900' });
76+
if(typeof notifyUploadSocketError !== 'object') {
77+
notifyUploadSocketError = $.notify({
78+
message: 'There was an error connecting to the Upload Socket for this server.'
79+
}, {
80+
type: 'danger',
81+
delay: 0
82+
});
83+
}
84+
});
85+
86+
uploadSocket.on('error', err => {
87+
siofu.destroy();
88+
console.error(err);
89+
});
90+
91+
uploadSocket.on('connect', function () {
92+
if (notifyUploadSocketError !== false) {
93+
notifyUploadSocketError.close();
94+
notifyUploadSocketError = false;
95+
}
96+
});
97+
98+
socket.on('error', function (err) {
99+
console.error('There was an error while attemping to connect to the websocket: ' + err + '\n\nPlease try loading this page again.');
100+
});
101+
102+
103+
var siofu = new SocketIOFileUpload(uploadSocket);
104+
siofu.chunkDelay = 25;
105+
106+
siofu.listenOnDrop(document.getElementById("upload_box"));
107+
108+
window.addEventListener('dragover', function (event) {
109+
event.preventDefault();
110+
}, false);
111+
112+
window.addEventListener('drop', function (event) {
113+
event.preventDefault();
114+
}, false);
115+
116+
var dropCounter = 0;
117+
$('#upload_box').bind({
118+
dragenter: function (event) {
119+
event.preventDefault();
120+
dropCounter++;
121+
$(this).addClass('hasFileHover');
122+
},
123+
dragleave: function (event) {
124+
dropCounter--;
125+
if (dropCounter === 0) {
126+
$(this).removeClass('hasFileHover');
127+
}
128+
},
129+
drop: function (event) {
130+
dropCounter = 0;
131+
$(this).removeClass('hasFileHover');
132+
}
133+
});
134+
135+
siofu.addEventListener('start', function (event) {
136+
event.file.meta.path = $('#headerTableRow').attr('data-currentdir');
137+
event.file.meta.identifier = Math.random().toString(36).slice(2);
138+
139+
$('#append_files_to').append('<tr id="file-upload-' + event.file.meta.identifier +'"> \
140+
<td><i class="fa fa-file-text-o" style="margin-left: 2px;"></i></td> \
141+
<td>' + event.file.name + '</td> \
142+
<td colspan=2">&nbsp;</td> \
143+
</tr><tr> \
144+
<td colspan="4" class="has-progress"> \
145+
<div class="progress progress-table-bottom active"> \
146+
<div class="progress-bar progress-bar-info prog-bar-' + event.file.meta.identifier +'" style="width: 0%"></div> \
147+
</div> \
148+
</td> \
149+
</tr>\
150+
');
151+
});
152+
153+
siofu.addEventListener('progress', function(event) {
154+
var percent = event.bytesLoaded / event.file.size * 100;
155+
if (percent >= 100) {
156+
$('.prog-bar-' + event.file.meta.identifier).css('width', '100%').removeClass('progress-bar-info').addClass('progress-bar-success').parent().removeClass('active');
157+
} else {
158+
$('.prog-bar-' + event.file.meta.identifier).css('width', percent + '%');
159+
}
160+
});
161+
162+
// Do something when a file is uploaded:
163+
siofu.addEventListener('complete', function(event){
164+
if (!event.success) {
165+
$('.prog-bar-' + event.file.meta.identifier).css('width', '100%').removeClass('progress-bar-info').addClass('progress-bar-danger');
166+
$.notify({
167+
message: 'An error was encountered while attempting to upload this file.'
168+
}, {
169+
type: 'danger',
170+
delay: 5000
171+
});
172+
}
173+
});
174+
175+
siofu.addEventListener('error', function(event){
176+
$('.prog-bar-' + event.file.meta.identifier).css('width', '100%').removeClass('progress-bar-info').addClass('progress-bar-danger');
177+
$.notify({
178+
message: 'An error was encountered while attempting to upload this file.'
179+
}, {
180+
type: 'danger',
181+
delay: 5000
182+
});
183+
});
184+
@endcan
66185
});
67186
</script>
68187
@endsection

resources/views/server/files/list.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</th>
3838
</tr>
3939
</thead>
40-
<tbody>
40+
<tbody id="append_files_to">
4141
@if (isset($directory['first']) && $directory['first'] === true)
4242
<tr data-type="disabled">
4343
<td><i class="fa fa-folder" style="margin-left: 0.859px;"></i></td>

0 commit comments

Comments
 (0)