mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Use response text for errors on uploads.
Overhaul
This commit is contained in:
parent
20ce8996d7
commit
bb482b8381
@ -52,18 +52,19 @@ class UploadHandler(BaseHandler):
|
|||||||
f"User with ID {user_id} attempted to upload a file that"
|
f"User with ID {user_id} attempted to upload a file that"
|
||||||
f" exceeded the max body size."
|
f" exceeded the max body size."
|
||||||
)
|
)
|
||||||
self.helper.websocket_helper.broadcast_user(
|
|
||||||
user_id,
|
return self.finish_json(
|
||||||
"send_start_error",
|
413,
|
||||||
{
|
{
|
||||||
"error": self.helper.translation.translate(
|
"status": "error",
|
||||||
|
"error": "TOO LARGE",
|
||||||
|
"info": self.helper.translation.translate(
|
||||||
"error",
|
"error",
|
||||||
"fileTooLarge",
|
"fileTooLarge",
|
||||||
self.controller.users.get_user_lang_by_id(user_id),
|
self.controller.users.get_user_lang_by_id(user_id),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return
|
|
||||||
self.do_upload = True
|
self.do_upload = True
|
||||||
|
|
||||||
if superuser:
|
if superuser:
|
||||||
@ -141,48 +142,50 @@ class UploadHandler(BaseHandler):
|
|||||||
f"User with ID {user_id} attempted to upload a file that"
|
f"User with ID {user_id} attempted to upload a file that"
|
||||||
f" exceeded the max body size."
|
f" exceeded the max body size."
|
||||||
)
|
)
|
||||||
self.helper.websocket_helper.broadcast_user(
|
|
||||||
user_id,
|
return self.finish_json(
|
||||||
"send_start_error",
|
413,
|
||||||
{
|
{
|
||||||
"error": self.helper.translation.translate(
|
"status": "error",
|
||||||
|
"error": "TOO LARGE",
|
||||||
|
"info": self.helper.translation.translate(
|
||||||
"error",
|
"error",
|
||||||
"fileTooLarge",
|
"fileTooLarge",
|
||||||
self.controller.users.get_user_lang_by_id(user_id),
|
self.controller.users.get_user_lang_by_id(user_id),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return
|
|
||||||
self.do_upload = True
|
self.do_upload = True
|
||||||
|
|
||||||
if not superuser:
|
if not superuser:
|
||||||
self.helper.websocket_helper.broadcast_user(
|
return self.finish_json(
|
||||||
user_id,
|
413,
|
||||||
"send_start_error",
|
|
||||||
{
|
{
|
||||||
"error": self.helper.translation.translate(
|
"status": "error",
|
||||||
|
"error": "UNAUTHORIZED ACCESS",
|
||||||
|
"info": self.helper.translation.translate(
|
||||||
"error",
|
"error",
|
||||||
"superError",
|
"superError",
|
||||||
self.controller.users.get_user_lang_by_id(user_id),
|
self.controller.users.get_user_lang_by_id(user_id),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return
|
|
||||||
if not self.request.headers.get("X-Content-Type", None).startswith(
|
if not self.request.headers.get("X-Content-Type", None).startswith(
|
||||||
"image/"
|
"image/"
|
||||||
):
|
):
|
||||||
self.helper.websocket_helper.broadcast_user(
|
|
||||||
user_id,
|
return self.finish_json(
|
||||||
"send_start_error",
|
413,
|
||||||
{
|
{
|
||||||
"error": self.helper.translation.translate(
|
"status": "error",
|
||||||
|
"error": "TYPE ERROR",
|
||||||
|
"info": self.helper.translation.translate(
|
||||||
"error",
|
"error",
|
||||||
"fileError",
|
"fileError",
|
||||||
self.controller.users.get_user_lang_by_id(user_id),
|
self.controller.users.get_user_lang_by_id(user_id),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return
|
|
||||||
if user_id is None:
|
if user_id is None:
|
||||||
logger.warning("User ID not found in upload handler call")
|
logger.warning("User ID not found in upload handler call")
|
||||||
Console.warning("User ID not found in upload handler call")
|
Console.warning("User ID not found in upload handler call")
|
||||||
@ -219,18 +222,19 @@ class UploadHandler(BaseHandler):
|
|||||||
f"User with ID {user_id} attempted to upload a file that"
|
f"User with ID {user_id} attempted to upload a file that"
|
||||||
f" exceeded the max body size."
|
f" exceeded the max body size."
|
||||||
)
|
)
|
||||||
self.helper.websocket_helper.broadcast_user(
|
|
||||||
user_id,
|
return self.finish_json(
|
||||||
"send_start_error",
|
413,
|
||||||
{
|
{
|
||||||
"error": self.helper.translation.translate(
|
"status": "error",
|
||||||
|
"error": "TOO LARGE",
|
||||||
|
"info": self.helper.translation.translate(
|
||||||
"error",
|
"error",
|
||||||
"fileTooLarge",
|
"fileTooLarge",
|
||||||
self.controller.users.get_user_lang_by_id(user_id),
|
self.controller.users.get_user_lang_by_id(user_id),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return
|
|
||||||
self.do_upload = True
|
self.do_upload = True
|
||||||
|
|
||||||
if superuser:
|
if superuser:
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/fontawesome5/css/all.css">
|
<link rel="stylesheet" href="/static/assets/vendors/fontawesome5/css/all.css">
|
||||||
<link rel="stylesheet" type="text/css"
|
<link rel="stylesheet" type="text/css"
|
||||||
href="https://cdn.datatables.net/v/bs4/dt-1.10.22/fh-3.1.7/r-2.2.6/sc-2.0.3/sp-1.2.2/datatables.min.css" />
|
href="https://cdn.datatables.net/v/bs4/dt-1.10.22/fh-3.1.7/r-2.2.6/sc-2.0.3/sp-1.2.2/datatables.min.css" />
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
<link rel="stylesheet" href="/static/assets/css/crafty.css">
|
<link rel="stylesheet" href="/static/assets/css/crafty.css">
|
||||||
|
|
||||||
@ -41,14 +41,14 @@
|
|||||||
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
|
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
|
||||||
<script defer src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
|
<script defer src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"
|
||||||
integrity="sha512-ElRFoEQdI5Ht6kZvyzXhYG9NqjtkmlkfYk0wr6wHxU9JEHakS7UJZNeml5ALk+8IKlU6jDgMabC3vkumRokgJA=="
|
integrity="sha512-ElRFoEQdI5Ht6kZvyzXhYG9NqjtkmlkfYk0wr6wHxU9JEHakS7UJZNeml5ALk+8IKlU6jDgMabC3vkumRokgJA=="
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"
|
||||||
integrity="sha512-UXumZrZNiOwnTcZSHLOfcTs0aos2MzBWHXOHOuB0J/R44QB0dwY5JgfbvljXcklVf65Gc4El6RjZ+lnwd2az2g=="
|
integrity="sha512-UXumZrZNiOwnTcZSHLOfcTs0aos2MzBWHXOHOuB0J/R44QB0dwY5JgfbvljXcklVf65Gc4El6RjZ+lnwd2az2g=="
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-zoom/1.2.1/chartjs-plugin-zoom.min.js"
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-zoom/1.2.1/chartjs-plugin-zoom.min.js"
|
||||||
integrity="sha512-klQv6lz2YR+MecyFYMFRuU2eAl8IPRo6zHnsc9n142TJuJHS8CG0ix4Oq9na9ceeg1u5EkBfZsFcV3U7J51iew=="
|
integrity="sha512-klQv6lz2YR+MecyFYMFRuU2eAl8IPRo6zHnsc9n142TJuJHS8CG0ix4Oq9na9ceeg1u5EkBfZsFcV3U7J51iew=="
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
|
|
||||||
<!-- End Bootstrap Toggle -->
|
<!-- End Bootstrap Toggle -->
|
||||||
|
|
||||||
@ -82,7 +82,7 @@
|
|||||||
{% include notify.html %}
|
{% include notify.html %}
|
||||||
|
|
||||||
<button class="navbar-toggler navbar-toggler-right d-lg-none align-self-center" type="button"
|
<button class="navbar-toggler navbar-toggler-right d-lg-none align-self-center" type="button"
|
||||||
data-toggle="offcanvas">
|
data-toggle="offcanvas">
|
||||||
<span class="mdi mdi-menu"></span>
|
<span class="mdi mdi-menu"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -174,7 +174,7 @@
|
|||||||
<script src="/static/assets/js/shared/hoverable-collapse.js"></script>
|
<script src="/static/assets/js/shared/hoverable-collapse.js"></script>
|
||||||
<script src="/static/assets/js/shared/misc.js"></script>
|
<script src="/static/assets/js/shared/misc.js"></script>
|
||||||
<script type="text/javascript"
|
<script type="text/javascript"
|
||||||
src="https://cdn.datatables.net/v/bs4/dt-1.10.22/fh-3.1.7/r-2.2.6/sc-2.0.3/sp-1.2.2/datatables.min.js"></script>
|
src="https://cdn.datatables.net/v/bs4/dt-1.10.22/fh-3.1.7/r-2.2.6/sc-2.0.3/sp-1.2.2/datatables.min.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.4.0/bootbox.min.js"></script>
|
||||||
<script type="text/javascript" src="/static/assets/js/motd.js"></script>
|
<script type="text/javascript" src="/static/assets/js/motd.js"></script>
|
||||||
|
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
{% block title %}Crafty Controller - {{ translate('panelConfig', 'pageTitle', data['lang']) }}{% end %}
|
{% block title %}Crafty Controller - {{ translate('panelConfig', 'pageTitle', data['lang']) }}{% end %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.10/css/bootstrap-select.min.css">
|
<link rel="stylesheet"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.10/css/bootstrap-select.min.css">
|
||||||
|
|
||||||
|
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
@ -50,62 +51,68 @@
|
|||||||
{% for item in data['config-json'].items() %}
|
{% for item in data['config-json'].items() %}
|
||||||
{% if item[0] == "reset_secrets_on_next_boot" %}
|
{% if item[0] == "reset_secrets_on_next_boot" %}
|
||||||
<div class="form-group" style="background: rgba(243, 21, 6, 0.3); outline: 1px solid red; padding: 10px;">
|
<div class="form-group" style="background: rgba(243, 21, 6, 0.3); outline: 1px solid red; padding: 10px;">
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{% end %}
|
|
||||||
<label class="form" for="{{item[0]}}">{{item[0]}}
|
|
||||||
<small class="text-muted ml-1">
|
|
||||||
</small> </label><br />
|
|
||||||
{% if item[0] == 'language' %}
|
|
||||||
<select name="{{item[0]}}" class="form-control">
|
|
||||||
{% for lang in data['availables_languages'] %}
|
|
||||||
{% if lang == item[1] %}
|
|
||||||
<option selected>{{lang}}</option>
|
|
||||||
{% else %}
|
|
||||||
<option>{{lang}}</option>
|
|
||||||
{% end %}
|
{% end %}
|
||||||
{% end %}
|
<label class="form" for="{{item[0]}}">{{item[0]}}
|
||||||
</select>
|
<small class="text-muted ml-1">
|
||||||
{% elif item[0] == 'disabled_language_files' %}
|
</small> </label><br />
|
||||||
<div class="input-group">
|
{% if item[0] == 'language' %}
|
||||||
<button type="button" class="btn btn-outline-default custom-picker" onclick="$('option', $('#lang_select')).each(function(element) {
|
<select name="{{item[0]}}" class="form-control">
|
||||||
$(this).removeAttr('selected').prop('selected', false); $('.selectpicker').selectpicker('refresh')
|
{% for lang in data['availables_languages'] %}
|
||||||
});">Enable all Languages</button>
|
{% if lang == item[1] %}
|
||||||
<select id="lang_select" class="form-control selectpicker show-tick" data-icon-base="fas" data-tick-icon="fa-check" multiple data-style="custom-picker">
|
|
||||||
{% for lang in data['all_languages'] %}
|
|
||||||
{% if lang in item[1] %}
|
|
||||||
<option selected>{{lang}}</option>
|
<option selected>{{lang}}</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option>{{lang}}</option>
|
<option>{{lang}}</option>
|
||||||
{% end %}
|
{% end %}
|
||||||
{% end %}
|
{% end %}
|
||||||
</select>
|
</select>
|
||||||
<textarea id="disabled_lang" name="{{item[0]}}" class="form-control list hidden" rows="{{ len(data['all_languages']) }}" value="{{','.join(item[1])}}" hidden>{{','.join(item[1])}}</textarea>
|
{% elif item[0] == 'disabled_language_files' %}
|
||||||
|
<div class="input-group">
|
||||||
|
<button type="button" class="btn btn-outline-default custom-picker" onclick="$('option', $('#lang_select')).each(function(element) {
|
||||||
|
$(this).removeAttr('selected').prop('selected', false); $('.selectpicker').selectpicker('refresh')
|
||||||
|
});">Enable all Languages</button>
|
||||||
|
<select id="lang_select" class="form-control selectpicker show-tick" data-icon-base="fas"
|
||||||
|
data-tick-icon="fa-check" multiple data-style="custom-picker">
|
||||||
|
{% for lang in data['all_languages'] %}
|
||||||
|
{% if lang in item[1] %}
|
||||||
|
<option selected>{{lang}}</option>
|
||||||
|
{% else %}
|
||||||
|
<option>{{lang}}</option>
|
||||||
|
{% end %}
|
||||||
|
{% end %}
|
||||||
|
</select>
|
||||||
|
<textarea id="disabled_lang" name="{{item[0]}}" class="form-control list hidden"
|
||||||
|
rows="{{ len(data['all_languages']) }}" value="{{','.join(item[1])}}"
|
||||||
|
hidden>{{','.join(item[1])}}</textarea>
|
||||||
|
</div>
|
||||||
|
{% elif isinstance(item[1], list) %}
|
||||||
|
<textarea value="{{','.join(item[1])}}" type="text" name="{{item[0]}}"
|
||||||
|
class="form-control list">{{','.join(item[1])}}</textarea>
|
||||||
|
{% elif isinstance(item[1], bool) %}
|
||||||
|
<div style="margin-left: 30px;">
|
||||||
|
{% if item[1] == True %}
|
||||||
|
<input type="radio" class="form-check-input" name="{{item[0]}}" id="True" value="True" checked>
|
||||||
|
<label for="True">True</label><br>
|
||||||
|
<input type="radio" class="form-check-input" name="{{item[0]}}" id="False" value="False">
|
||||||
|
<label for="False">False</label>
|
||||||
|
{% else %}
|
||||||
|
<input type="radio" class="form-check-input" name="{{item[0]}}" id="True" value="True">
|
||||||
|
<label for="True">True</label><br>
|
||||||
|
<input type="radio" class="form-check-input" name="{{item[0]}}" id="False" value="False" checked>
|
||||||
|
<label for="False">False</label>
|
||||||
|
{% end %}
|
||||||
|
</div>
|
||||||
|
{% elif isinstance(item[1], int) %}
|
||||||
|
<input type="number" class="form-control" name="{{item[0]}}" id="{{item[0]}}" value="{{ item[1] }}"
|
||||||
|
step="1" min="0" required>
|
||||||
|
{% else %}
|
||||||
|
<input type="text" class="form-control" name="{{item[0]}}" id="{{item[0]}}" value="{{ item[1] }}"
|
||||||
|
step="2" min="0" required>
|
||||||
|
{% end %}
|
||||||
</div>
|
</div>
|
||||||
{% elif isinstance(item[1], list) %}
|
|
||||||
<textarea value="{{','.join(item[1])}}" type="text" name="{{item[0]}}" class="form-control list">{{','.join(item[1])}}</textarea>
|
|
||||||
{% elif isinstance(item[1], bool) %}
|
|
||||||
<div style="margin-left: 30px;">
|
|
||||||
{% if item[1] == True %}
|
|
||||||
<input type="radio" class="form-check-input" name="{{item[0]}}" id="True" value="True" checked>
|
|
||||||
<label for="True">True</label><br>
|
|
||||||
<input type="radio" class="form-check-input" name="{{item[0]}}" id="False" value="False">
|
|
||||||
<label for="False">False</label>
|
|
||||||
{% else %}
|
|
||||||
<input type="radio" class="form-check-input" name="{{item[0]}}" id="True" value="True">
|
|
||||||
<label for="True">True</label><br>
|
|
||||||
<input type="radio" class="form-check-input" name="{{item[0]}}" id="False" value="False" checked>
|
|
||||||
<label for="False">False</label>
|
|
||||||
{% end %}
|
{% end %}
|
||||||
</div>
|
<button class="btn btn-success" type="submit">Submit</button> <span id="submit-status"></span>
|
||||||
{% elif isinstance(item[1], int) %}
|
|
||||||
<input type="number" class="form-control" name="{{item[0]}}" id="{{item[0]}}" value="{{ item[1] }}" step="1" min="0" required>
|
|
||||||
{% else %}
|
|
||||||
<input type="text" class="form-control" name="{{item[0]}}" id="{{item[0]}}" value="{{ item[1] }}" step="2" min="0" required>
|
|
||||||
{% end %}
|
|
||||||
</div>
|
|
||||||
{% end %}
|
|
||||||
<button class="btn btn-success" type="submit">Submit</button> <span id="submit-status"></span>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -276,44 +283,6 @@
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
var file;
|
|
||||||
function sendFile() {
|
|
||||||
file = $("#file")[0].files[0]
|
|
||||||
document.getElementById("upload_input").innerHTML = '<div class="progress"><div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"> <i class="fa-solid fa-spinner"></i></div></div>'
|
|
||||||
let xmlHttpRequest = new XMLHttpRequest();
|
|
||||||
let token = getCookie("_xsrf")
|
|
||||||
let fileName = file.name
|
|
||||||
let target = '/upload'
|
|
||||||
let mimeType = file.type
|
|
||||||
let size = file.size
|
|
||||||
let type = 'background'
|
|
||||||
|
|
||||||
xmlHttpRequest.open('POST', target, true);
|
|
||||||
xmlHttpRequest.setRequestHeader('X-Content-Type', mimeType);
|
|
||||||
xmlHttpRequest.setRequestHeader('X-XSRFToken', token);
|
|
||||||
xmlHttpRequest.setRequestHeader('X-Content-Length', size);
|
|
||||||
xmlHttpRequest.setRequestHeader('X-Content-Disposition', 'attachment; filename="' + fileName + '"');
|
|
||||||
xmlHttpRequest.setRequestHeader('X-Content-Upload-Type', type);
|
|
||||||
xmlHttpRequest.setRequestHeader('X-FileName', fileName);
|
|
||||||
xmlHttpRequest.addEventListener('load', (event) => {
|
|
||||||
if (event.target.responseText == 'success') {
|
|
||||||
console.log('Upload for file', file.name, 'was successful!')
|
|
||||||
document.getElementById("upload_input").innerHTML = '<div class="card-header header-sm d-flex justify-content-between align-items-center"><span id="file-uploaded" style="color: gray;">' + fileName + '</span> 🔒</div>';
|
|
||||||
setTimeout(function () {
|
|
||||||
window.location.reload();
|
|
||||||
}, 2000);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
alert('Upload failed with response: ' + event.target.responseText);
|
|
||||||
doUpload = false;
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
xmlHttpRequest.addEventListener('error', (e) => {
|
|
||||||
console.error('Error while uploading file', file.name + '.', 'Event:', e)
|
|
||||||
}, false);
|
|
||||||
xmlHttpRequest.send(file);
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.10/js/bootstrap-select.min.js">
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.10/js/bootstrap-select.min.js">
|
||||||
</script>
|
</script>
|
||||||
|
@ -386,7 +386,15 @@
|
|||||||
}, 2000);
|
}, 2000);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alert('Upload failed with response: ' + event.target.responseText);
|
let response_text = JSON.parse(event.target.responseText);
|
||||||
|
var x = document.querySelector('.bootbox');
|
||||||
|
console.log(JSON.parse(event.target.responseText).info)
|
||||||
|
bootbox.alert({
|
||||||
|
message: JSON.parse(event.target.responseText).info,
|
||||||
|
callback: function () {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
doUpload = false;
|
doUpload = false;
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
@ -760,7 +760,22 @@
|
|||||||
$(`#upload-progress-bar-${i + 1}`).html('<i style="color: black;" class="fas fa-box-check"></i>')
|
$(`#upload-progress-bar-${i + 1}`).html('<i style="color: black;" class="fas fa-box-check"></i>')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alert('Upload failed with response: ' + event.target.responseText);
|
let response_text = JSON.parse(event.target.responseText);
|
||||||
|
var x = document.querySelector('.bootbox');
|
||||||
|
if (x) {
|
||||||
|
x.remove()
|
||||||
|
}
|
||||||
|
var x = document.querySelector('.modal-content');
|
||||||
|
if (x) {
|
||||||
|
x.remove()
|
||||||
|
}
|
||||||
|
console.log(JSON.parse(event.target.responseText).info)
|
||||||
|
bootbox.alert({
|
||||||
|
message: JSON.parse(event.target.responseText).info,
|
||||||
|
callback: function () {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
doUpload = false;
|
doUpload = false;
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
@ -594,7 +594,15 @@
|
|||||||
document.getElementById("lower_half").style.visibility = "visible";
|
document.getElementById("lower_half").style.visibility = "visible";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alert('Upload failed with response: ' + event.target.responseText);
|
let response_text = JSON.parse(event.target.responseText);
|
||||||
|
var x = document.querySelector('.bootbox');
|
||||||
|
console.log(JSON.parse(event.target.responseText).info)
|
||||||
|
bootbox.alert({
|
||||||
|
message: JSON.parse(event.target.responseText).info,
|
||||||
|
callback: function () {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
doUpload = false;
|
doUpload = false;
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
@ -836,7 +836,15 @@
|
|||||||
document.getElementById("lower_half").style.visibility = "visible";
|
document.getElementById("lower_half").style.visibility = "visible";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alert('Upload failed with response: ' + event.target.responseText);
|
let response_text = JSON.parse(event.target.responseText);
|
||||||
|
var x = document.querySelector('.bootbox');
|
||||||
|
console.log(JSON.parse(event.target.responseText).info)
|
||||||
|
bootbox.alert({
|
||||||
|
message: JSON.parse(event.target.responseText).info,
|
||||||
|
callback: function () {
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
doUpload = false;
|
doUpload = false;
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
Loading…
Reference in New Issue
Block a user