Create: local static files
This commit is contained in:
parent
e2b523a456
commit
1964e29197
0
logs_collector/collector/forms.py
Normal file
0
logs_collector/collector/forms.py
Normal file
7
logs_collector/collector/static/collector/css/bootstrap.min.css
vendored
Normal file
7
logs_collector/collector/static/collector/css/bootstrap.min.css
vendored
Normal 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 |
BIN
logs_collector/collector/static/collector/img/favicon-16x16.png
Normal file
BIN
logs_collector/collector/static/collector/img/favicon-16x16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 495 B |
BIN
logs_collector/collector/static/collector/img/favicon-32x32.png
Normal file
BIN
logs_collector/collector/static/collector/img/favicon-32x32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 930 B |
BIN
logs_collector/collector/static/collector/img/favicon.ico
Normal file
BIN
logs_collector/collector/static/collector/img/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
@ -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"}
|
7
logs_collector/collector/static/collector/js/bootstrap.bundle.min.js
vendored
Normal file
7
logs_collector/collector/static/collector/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,6 @@
|
||||
const tooltipTriggerList = document.querySelectorAll(
|
||||
'[data-bs-toggle="tooltip"]'
|
||||
)
|
||||
const tooltipList = [...tooltipTriggerList].map(
|
||||
(tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl)
|
||||
)
|
2
logs_collector/collector/static/collector/js/jquery-3.7.0.min.js
vendored
Normal file
2
logs_collector/collector/static/collector/js/jquery-3.7.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,26 +1,43 @@
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link
|
||||
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet"
|
||||
integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM"
|
||||
crossorigin="anonymous"
|
||||
href="{% static 'collector/css/bootstrap.min.css' %}"
|
||||
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>
|
||||
</head>
|
||||
<body>
|
||||
{% block content %}{% endblock content %}
|
||||
<script
|
||||
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"
|
||||
integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
<script>
|
||||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
||||
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
|
||||
</script>
|
||||
<main>
|
||||
<section>
|
||||
{% block content %}{% endblock content %}
|
||||
</section>
|
||||
</main>
|
||||
<script src="{% static 'collector/js/bootstrap.bundle.min.js' %}"></script>
|
||||
<script src="{% static 'collector/js/jquery-3.7.0.min.js' %}"></script>
|
||||
{% block bs %}{% endblock bs %}
|
||||
{% block jquery %}{% endblock jquery %}
|
||||
</body>
|
||||
</html>
|
||||
|
@ -47,7 +47,7 @@
|
||||
>GET</a>
|
||||
<button
|
||||
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>
|
||||
</div>
|
||||
</div>
|
||||
@ -71,11 +71,11 @@
|
||||
</div>
|
||||
<!-- Modal -->
|
||||
{% 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-content">
|
||||
<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>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
@ -1,99 +1,97 @@
|
||||
{% extends 'collector/base.html' %}
|
||||
|
||||
{% load static %}
|
||||
{% block content %}
|
||||
|
||||
{% include 'collector/navigation.html' %}
|
||||
<!-- Modal -->
|
||||
<main>
|
||||
<section>
|
||||
<div class="container mt-3">
|
||||
{% for ticket in tickets %}
|
||||
<div class="row">
|
||||
<!-- Ticket -->
|
||||
<div class="list-group mb-2">
|
||||
<div class="list-group-item list-group-item-action disable" aria-current="true">
|
||||
<div class="d-flex w-100 justify-content-between mb-2">
|
||||
<h5 class="mb-1">Ticket: {{ ticket.number }}</h5>
|
||||
<small>{{ ticket.time_create }}</small>
|
||||
</div>
|
||||
<div class="col-xl-6 mb-2">
|
||||
<!-- Info -->
|
||||
<h6 class="mb-1">Platform: {{ ticket.platform.pretty_name }}</h6>
|
||||
<h6 class="mb-1">Owner: {{ ticket.user.username }}</h6>
|
||||
</div>
|
||||
<div class="col-xl-6 mt-1 mb-2">
|
||||
<div class="accordion" id="#archive_{{ ticket.number }}">
|
||||
{% if ticket.note %}
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button
|
||||
class="accordion-button collapsed"
|
||||
type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse_{{ ticket.number}}_note"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapse_{{ ticket.number }}"
|
||||
>Note</button>
|
||||
</h2>
|
||||
<div id="collapse_{{ 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>
|
||||
</div>
|
||||
<!-- Tickets -->
|
||||
<div class="container mt-3">
|
||||
{% for ticket in tickets %}
|
||||
<div class="row">
|
||||
<!-- Ticket -->
|
||||
<div class="list-group mb-2">
|
||||
<div class="list-group-item list-group-item-action disable" aria-current="true">
|
||||
<div class="d-flex w-100 justify-content-between mb-2">
|
||||
<h5 class="mb-1">Ticket: {{ ticket.number }}</h5>
|
||||
<small>{{ ticket.time_create }}</small>
|
||||
</div>
|
||||
<div class="col-xl-6 mb-2">
|
||||
<!-- Info -->
|
||||
<h6 class="mb-1">Platform: {{ ticket.platform.pretty_name }}</h6>
|
||||
<h6 class="mb-1">Owner: {{ ticket.user.username }}</h6>
|
||||
</div>
|
||||
<div class="col-xl-6 mt-1 mb-2">
|
||||
<div class="accordion" id="#archive_{{ ticket.number }}">
|
||||
{% if ticket.note %}
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button
|
||||
class="accordion-button collapsed"
|
||||
type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse_{{ ticket.number}}_note"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapse_{{ ticket.number }}"
|
||||
>Note</button>
|
||||
</h2>
|
||||
<div id="collapse_{{ 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>
|
||||
{% 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 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>
|
||||
{% 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 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>
|
||||
{% endfor %}
|
||||
{% include 'collector/pagination.html' %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</main>
|
||||
{% endfor %}
|
||||
{% include 'collector/pagination.html' %}
|
||||
</div>
|
||||
{% endblock content %}
|
||||
{% block bs %}
|
||||
<script src="{% static 'collector/js/bs-tooltip.js' %}"></script>
|
||||
{% endblock bs %}
|
||||
|
@ -24,5 +24,9 @@ urlpatterns = [
|
||||
views.DetailTicket.as_view(),
|
||||
name='ticket'
|
||||
),
|
||||
path('archives/<path:path>', views.download, name="download")
|
||||
path(
|
||||
'archives/<path:path>',
|
||||
views.ArchiveHandlerView.as_view(),
|
||||
name="download"
|
||||
),
|
||||
]
|
||||
|
@ -3,6 +3,9 @@ from django.contrib.auth.decorators import login_required
|
||||
from django.http import FileResponse, Http404
|
||||
from django.views import generic
|
||||
|
||||
from rest_framework import status
|
||||
from rest_framework.response import Response
|
||||
|
||||
from .models import Archive, Ticket, Platform
|
||||
|
||||
|
||||
@ -17,6 +20,24 @@ def download(request, path):
|
||||
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):
|
||||
model = Ticket
|
||||
template_name = 'collector/tickets.html'
|
||||
|
Loading…
Reference in New Issue
Block a user