Create: local static files

This commit is contained in:
Stepan Zhukovsky 2023-07-31 13:53:39 +09:00
parent e2b523a456
commit 1964e29197
19 changed files with 171 additions and 106 deletions

View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
const tooltipTriggerList = document.querySelectorAll(
'[data-bs-toggle="tooltip"]'
)
const tooltipList = [...tooltipTriggerList].map(
(tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl)
)

File diff suppressed because one or more lines are too long

View File

@ -1,26 +1,43 @@
{% load static %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link <link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
rel="stylesheet" rel="stylesheet"
integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" href="{% static 'collector/css/bootstrap.min.css' %}"
crossorigin="anonymous" rel="stylesheet"
/> />
<link
rel="apple-touch-icon"
sizes="180x180"
href="{% static 'collector/img/apple-touch-icon.png' %}"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="{% static 'collector/img/favicon-32x32.png' %}"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="{% static 'collector/img/favicon-16x16.png' %}"
/>
<link rel="manifest" href="{% static 'collector/img/site.webmanifest' %}">
<title>Document</title> <title>Document</title>
</head> </head>
<body> <body>
{% block content %}{% endblock content %} <main>
<script <section>
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" {% block content %}{% endblock content %}
integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" </section>
crossorigin="anonymous" </main>
></script> <script src="{% static 'collector/js/bootstrap.bundle.min.js' %}"></script>
<script> <script src="{% static 'collector/js/jquery-3.7.0.min.js' %}"></script>
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]') {% block bs %}{% endblock bs %}
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)) {% block jquery %}{% endblock jquery %}
</script>
</body> </body>
</html> </html>

View File

@ -47,7 +47,7 @@
>GET</a> >GET</a>
<button <button
class="btn btn-outline-danger btn-sm ms-2 mt-2" class="btn btn-outline-danger btn-sm ms-2 mt-2"
button type="button" data-bs-toggle="modal" data-bs-target="#{{ archive.id }}" button type="button" data-bs-toggle="modal" data-bs-target="#modal-archive-del-{{ archive.id }}"
>DEL</button> >DEL</button>
</div> </div>
</div> </div>
@ -71,11 +71,11 @@
</div> </div>
<!-- Modal --> <!-- Modal -->
{% for archive in ticket.archive_set.all %} {% for archive in ticket.archive_set.all %}
<div class="modal fade" id="{{ archive.id }}" tabindex="-1" aria-labelledby="{{ archive.id }}_Label" aria-hidden="true"> <div class="modal fade" id="modal-archive-del-{{ archive.id }}" tabindex="-1" aria-labelledby="LabelArchive-{{ archive.id }}" aria-hidden="true">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="{{ archive.id }}_Label">Delete this file?</h5> <h5 class="modal-title" id="LabelArchive-{{ archive.id }}">Delete this file?</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">

View File

@ -1,99 +1,97 @@
{% extends 'collector/base.html' %} {% extends 'collector/base.html' %}
{% load static %}
{% block content %} {% block content %}
{% include 'collector/navigation.html' %} {% include 'collector/navigation.html' %}
<!-- Modal --> <!-- Tickets -->
<main> <div class="container mt-3">
<section> {% for ticket in tickets %}
<div class="container mt-3"> <div class="row">
{% for ticket in tickets %} <!-- Ticket -->
<div class="row"> <div class="list-group mb-2">
<!-- Ticket --> <div class="list-group-item list-group-item-action disable" aria-current="true">
<div class="list-group mb-2"> <div class="d-flex w-100 justify-content-between mb-2">
<div class="list-group-item list-group-item-action disable" aria-current="true"> <h5 class="mb-1">Ticket: {{ ticket.number }}</h5>
<div class="d-flex w-100 justify-content-between mb-2"> <small>{{ ticket.time_create }}</small>
<h5 class="mb-1">Ticket: {{ ticket.number }}</h5> </div>
<small>{{ ticket.time_create }}</small> <div class="col-xl-6 mb-2">
</div> <!-- Info -->
<div class="col-xl-6 mb-2"> <h6 class="mb-1">Platform: {{ ticket.platform.pretty_name }}</h6>
<!-- Info --> <h6 class="mb-1">Owner: {{ ticket.user.username }}</h6>
<h6 class="mb-1">Platform: {{ ticket.platform.pretty_name }}</h6> </div>
<h6 class="mb-1">Owner: {{ ticket.user.username }}</h6> <div class="col-xl-6 mt-1 mb-2">
</div> <div class="accordion" id="#archive_{{ ticket.number }}">
<div class="col-xl-6 mt-1 mb-2"> {% if ticket.note %}
<div class="accordion" id="#archive_{{ ticket.number }}"> <div class="accordion-item">
{% if ticket.note %} <h2 class="accordion-header">
<div class="accordion-item"> <button
<h2 class="accordion-header"> class="accordion-button collapsed"
<button type="button" data-bs-toggle="collapse"
class="accordion-button collapsed" data-bs-target="#collapse_{{ ticket.number}}_note"
type="button" data-bs-toggle="collapse" aria-expanded="false"
data-bs-target="#collapse_{{ ticket.number}}_note" aria-controls="collapse_{{ ticket.number }}"
aria-expanded="false" >Note</button>
aria-controls="collapse_{{ ticket.number }}" </h2>
>Note</button> <div id="collapse_{{ ticket.number }}_note"
</h2> class="accordion-collapse collapse"
<div id="collapse_{{ ticket.number }}_note" data-bs-parent="#archive_{{ ticket.number }}_note"
class="accordion-collapse collapse" >
data-bs-parent="#archive_{{ ticket.number }}_note" <div class="accordion-body">
> <p class="mb-1">{{ ticket.note }}</p>
<div class="accordion-body">
<p class="mb-1">{{ ticket.note }}</p>
</div>
</div>
</div> </div>
{% endif %}
{% if ticket.archive_set.all %}
<!-- Logs -->
<div class="accordion-item">
<h3 class="accordion-header">
<button
class="accordion-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse_{{ ticket.number }}"
aria-expanded="true" aria-controls="collapse_{{ ticket.number }}"
>Logs</button>
</h3>
<div
id="collapse_{{ ticket.number }}"
class="accordion-collapse collapse"
data-bs-parent="#archive_{{ ticket.number }}"
>
<div class="accordion-body">
<ul class="list-group mb-2">
{% for archive in ticket.archive_set.all %}
<li class="list-group-item list-group-item-action">
<a
href="{{ archive.get_absolute_url }}"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-title="Size: {{ archive.size }}"
style="word-wrap: break-word"
>{{ archive.file }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</div> </div>
</div>
<div class="d-flex w-100 justify-content-between">
<a
href="{{ ticket.get_absolute_url }}"
class="btn btn-outline-primary mb-1 mt-1"
>Open</a>
</div> </div>
{% endif %}
{% if ticket.archive_set.all %}
<!-- Logs -->
<div class="accordion-item">
<h3 class="accordion-header">
<button
class="accordion-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse_{{ ticket.number }}"
aria-expanded="true" aria-controls="collapse_{{ ticket.number }}"
>Logs</button>
</h3>
<div
id="collapse_{{ ticket.number }}"
class="accordion-collapse collapse"
data-bs-parent="#archive_{{ ticket.number }}"
>
<div class="accordion-body">
<ul class="list-group mb-2">
{% for archive in ticket.archive_set.all %}
<li class="list-group-item list-group-item-action">
<a
href="{{ archive.get_absolute_url }}"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-title="Size: {{ archive.size }}"
style="word-wrap: break-word"
>{{ archive.file }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</div> </div>
</div>
<div class="d-flex w-100 justify-content-between">
<a
href="{{ ticket.get_absolute_url }}"
class="btn btn-outline-primary mb-1 mt-1"
>Open</a>
</div> </div>
</div> </div>
{% endfor %} </div>
{% include 'collector/pagination.html' %}
</div> </div>
{% endfor %}
</section> {% include 'collector/pagination.html' %}
</main> </div>
{% endblock content %} {% endblock content %}
{% block bs %}
<script src="{% static 'collector/js/bs-tooltip.js' %}"></script>
{% endblock bs %}

View File

@ -24,5 +24,9 @@ urlpatterns = [
views.DetailTicket.as_view(), views.DetailTicket.as_view(),
name='ticket' name='ticket'
), ),
path('archives/<path:path>', views.download, name="download") path(
'archives/<path:path>',
views.ArchiveHandlerView.as_view(),
name="download"
),
] ]

View File

@ -3,6 +3,9 @@ from django.contrib.auth.decorators import login_required
from django.http import FileResponse, Http404 from django.http import FileResponse, Http404
from django.views import generic from django.views import generic
from rest_framework import status
from rest_framework.response import Response
from .models import Archive, Ticket, Platform from .models import Archive, Ticket, Platform
@ -17,6 +20,24 @@ def download(request, path):
return FileResponse(file.file) return FileResponse(file.file)
class ArchiveHandlerView(generic.View):
def get(self, request, path):
try:
file = Archive.objects.get(file=path)
except Archive.DoesNotExist:
return Http404
return FileResponse(file.file)
def delete(self, request, path):
content = {'file': path}
try:
file = Archive.objects.get(file=path)
file.delete()
return Response(content, status=status.HTTP_200_OK)
except Archive.DoesNot.Exist:
return Response(content, status=status.HTTP_204_NO_CONTENT)
class ListAllTickets(generic.ListView): class ListAllTickets(generic.ListView):
model = Ticket model = Ticket
template_name = 'collector/tickets.html' template_name = 'collector/tickets.html'