2022-09-10 05:37:11 +00:00
{% extends "default.html" %}
{% block title %}
< title > Submit Hats< / title >
{% endblock %}
{% block pagetype %}message{% endblock %}
{% block content %}
{% if error %}
< div class = "alert alert-danger alert-dismissible fade show mb-3 mt-4" role = "alert" >
< i class = "fas fa-exclamation-circle my-auto" > < / i >
< span >
{{error}}
< / span >
2022-10-28 23:35:14 +00:00
< button type = "button" class = "close" data-bs-dismiss = "alert" aria-label = "Close" >
2022-09-10 05:37:11 +00:00
< span aria-hidden = "true" > < i class = "far fa-times" > < / i > < / span >
< / button >
< / div >
{% endif %}
{% if msg %}
< div class = "alert alert-success alert-dismissible fade show my-3" role = "alert" >
< i class = "fas fa-check-circle my-auto" aria-hidden = "true" > < / i >
< span >
{{msg}}
< / span >
2022-10-28 23:35:14 +00:00
< button type = "button" class = "close" data-bs-dismiss = "alert" aria-label = "Close" >
2022-09-10 05:37:11 +00:00
< span aria-hidden = "true" > < i class = "far fa-times" > < / i > < / span >
< / button >
< / div >
{% endif %}
< div class = "mx-4" >
< h2 class = "mt-5" > Submit Hat< / h2 >
< div class = "settings-section rounded" >
< div class = "d-lg-flex" >
< div class = "body w-lg-100" >
< form action = "/submit/hats" method = "post" enctype = "multipart/form-data" >
< input type = "hidden" name = "formkey" value = "{{v.formkey}}" >
< div id = "image-upload-block" >
< div > < label class = "mt-3" > Image< / label > < / div >
2022-09-11 06:33:36 +00:00
< img loading = "lazy" id = "image-preview" class = "d-none" style = "max-width:50%;border:5px white solid" >
2022-09-10 05:37:11 +00:00
< label class = "btn btn-secondary m-0" for = "file-upload" >
< div id = "filename-show" > Select Image< / div >
< input autocomplete = "off" id = "file-upload" accept = "image/*" type = "file" name = "image" { % if request . headers . get ( ' cf-ipcountry ' ) = = " T1 " % } disabled { % endif % } hidden >
< / label >
< / div >
2022-09-10 18:45:10 +00:00
< div id = "hat-design-reference-block" class = "mt-3" >
< a href = "/i/hat-template.png" class = "font-weight-bold" > Hat Template< / a > — 100x130px (do not resize), circle is profile picture, do not include circle in final submission.
< / div >
2022-09-10 05:37:11 +00:00
< label class = "mt-3" for = "name" > Name< / label >
2022-09-13 11:00:47 +00:00
< input autocomplete = "off" type = "text" id = "name" class = "form-control" name = "name" maxlength = "50" pattern = '[a-zA-Z0-9\-() ,_]{1,50}' placeholder = "Required" value = "{{name}}" required >
2022-09-10 05:37:11 +00:00
< label class = "mt-3" for = "author" > Author< / label >
2022-09-13 11:00:47 +00:00
< input autocomplete = "off" type = "text" id = "author" class = "form-control" name = "author" maxlength = "30" pattern = '[a-zA-Z0-9_\-]{3,30}' placeholder = "Required" value = "{{username}}" required >
2022-09-10 05:37:11 +00:00
< label class = "mt-3" for = "description" > Description< / label >
2022-09-13 11:00:47 +00:00
< input autocomplete = "off" type = "text" id = "description" class = "form-control" name = "description" maxlength = "300" pattern = '[^<>&\n\t]{1,300}' placeholder = "Required" value = "{{description}}" required >
2022-09-10 05:37:11 +00:00
< div class = "footer mt-5" >
< div class = "d-flex" >
< input id = "submit-hat" disabled type = "submit" onclick = "disable(this)" class = "btn btn-primary ml-auto" value = "Submit Hat" >
< / div >
< / div >
< / form >
< / div >
< / div >
< / div >
< / div >
< script >
document.onpaste = function(event) {
files = event.clipboardData.files
filename = files[0]
if (filename)
{
filename = filename.name.toLowerCase()
f=document.getElementById('file-upload');
f.files = files;
document.getElementById('filename-show').textContent = filename;
if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".png") || filename.endsWith(".gif") || filename.endsWith(".webp"))
{
var fileReader = new FileReader();
fileReader.readAsDataURL(f.files[0]);
2022-09-11 06:33:36 +00:00
fileReader.addEventListener("load", function () {
document.getElementById('image-preview').setAttribute('src', this.result);
document.getElementById('image-preview').classList.remove('d-none');
});
2022-09-10 05:37:11 +00:00
}
2022-09-12 07:11:18 +00:00
document.getElementById('file-upload').setAttribute('placeholder="Required" required', 'false');
2022-09-10 05:37:11 +00:00
}
}
document.getElementById('file-upload').addEventListener('change', function(){
f=document.getElementById('file-upload');
document.getElementById('filename-show').textContent = document.getElementById('file-upload').files[0].name.substr(0, 20);
filename = f.files[0].name.toLowerCase()
if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".png") || filename.endsWith(".gif") || filename.endsWith(".webp"))
{
var fileReader = new FileReader();
fileReader.readAsDataURL(f.files[0]);
2022-09-11 06:33:36 +00:00
fileReader.addEventListener("load", function () {
document.getElementById('image-preview').setAttribute('src', this.result);
document.getElementById('image-preview').classList.remove('d-none');
});
2022-09-10 05:37:11 +00:00
document.getElementById('submit-hat').disabled = false;
}
})
function approve_hat(t, name) {
t.disabled = true;
t.classList.add("disabled");
2022-10-30 15:10:07 +00:00
postToast_callback(`/admin/approve/hat/${name}`,
2022-09-10 05:37:11 +00:00
{
"description": document.getElementById(`${name}-description`).value,
"name": document.getElementById(`${name}-name`).value,
"price": document.getElementById(`${name}-price`).value,
},
(xhr) => {
if(xhr.status == 200) {
2022-09-10 09:31:43 +00:00
document.getElementById(`${name}-hat`).remove()
2022-09-10 05:37:11 +00:00
}
}
);
setTimeout(() => {
t.disabled = false;
t.classList.remove("disabled");
}, 2000);
}
2022-09-11 07:03:34 +00:00
function remove_hat(t, name) {
t.disabled = true;
t.classList.add("disabled");
2022-10-30 15:10:07 +00:00
postToast_callback(`/remove/hat/${name}`,
2022-09-11 07:03:34 +00:00
{
},
(xhr) => {
if(xhr.status == 200) {
document.getElementById(`${name}-hat`).remove()
}
}
);
setTimeout(() => {
t.disabled = false;
t.classList.remove("disabled");
}, 2000);
}
2022-09-10 05:37:11 +00:00
< / script >
< h2 class = "mt-5 mx-4" > Pending Carp Approval< / h2 >
< div class = "row mt-5 mx-4" >
< div class = "col px-0" >
< div class = "settings" >
{% for hat in hats %}
< div id = "{{hat.name}}-hat" class = "settings-section rounded" >
< div class = "d-lg-flex" >
< div class = "body w-lg-100" >
< input type = "hidden" name = "formkey" value = "{{v.formkey}}" >
< div > < label class = "mt-3" > Image< / label > < / div >
2022-09-13 10:47:50 +00:00
< img loading = "lazy" src = "/asset_submissions/hats/{{hat.name}}.webp?s={{range(1, 10000000)|random}}" style = "max-width:50%;border:5px white solid" >
2022-09-10 05:37:11 +00:00
2022-10-25 21:12:52 +00:00
< div class = "profile-pic-100-wrapper ml-4 mt-4" >
2022-10-29 21:42:30 +00:00
< img loading = "lazy" alt = "avatar" src = "{{v.profile_url}}" class = "profile-pic-100" >
2022-10-25 21:12:52 +00:00
< img loading = "lazy" class = "profile-pic-100-hat" src = "/asset_submissions/hats/{{hat.name}}.webp?s={{range(1, 10000000)|random}}" >
< / div >
2022-09-10 05:37:11 +00:00
< div > < label class = "mt-3" for = "{{hat.name}}-submitter" > Submitter< / label > < / div >
< input autocomplete = "off" type = "text" id = "{{hat.name}}-submitter" class = "form-control" maxlength = "30" value = "{{hat.submitter.username}}" readonly >
< label class = "mt-3" for = "{{hat.name}}-author" > Author< / label >
< input autocomplete = "off" type = "text" id = "{{hat.name}}-author" class = "form-control" maxlength = "30" value = "{{hat.author.username}}" readonly >
< label class = "mt-3" for = "{{hat.name}}-name" > Name< / label >
2022-09-12 07:11:18 +00:00
< input autocomplete = "off" type = "text" id = "{{hat.name}}-name" class = "form-control" name = "name" maxlength = "30" value = "{{hat.name}}" pattern = 'hat[a-zA-Z0-9]{1,24}' placeholder = "Required" required >
2022-09-10 05:37:11 +00:00
< label class = "mt-3" for = "{{hat.name}}-description" > Description< / label >
2022-09-12 07:11:18 +00:00
< input autocomplete = "off" type = "text" id = "{{hat.name}}-description" class = "form-control" name = "description" maxlength = "300" value = "{{hat.description}}" pattern = '[^<>&\n\t]{1,300}' placeholder = "Required" required >
2022-09-10 05:37:11 +00:00
< div > < label class = "mt-3" for = "{{hat.name}}-price" > Price< / label > < / div >
2022-09-12 07:11:18 +00:00
< input autocomplete = "off" type = "number" id = "{{hat.name}}-price" class = "form-control" name = "price" min = "0" value = "{{hat.price}}" placeholder = "Required" required >
2022-09-10 05:37:11 +00:00
< / div >
< / div >
2022-09-11 07:03:34 +00:00
< div class = "d-flex my-4 mx-3" >
2022-10-28 23:35:14 +00:00
< button type = "button" class = "btn btn-primary ml-auto" onclick = "remove_hat(this, '{{hat.name}}')" > Remove< / button >
2022-10-06 06:56:37 +00:00
{% if v.admin_level >= PERMS['MODERATE_PENDING_SUBMITTED_HATS'] %}
2022-10-28 23:35:14 +00:00
< button type = "button" class = "btn btn-primary ml-3" onclick = "approve_hat(this, '{{hat.name}}')" > Approve< / button >
2022-09-11 07:03:34 +00:00
{% endif %}
< / div >
2022-09-10 05:37:11 +00:00
< / div >
{% endfor %}
< / div >
< / div >
< / div >
{% endblock %}