refactor: remove sidebar template logic and update document listing to default to root-level folders
This commit is contained in:
parent
ce48b99a45
commit
0551e012f4
3 changed files with 5 additions and 89 deletions
|
|
@ -1,88 +1,2 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% load i18n documents_tags %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
{{ block.super }}
|
|
||||||
<style>
|
|
||||||
:root { --nav-h: 0px; }
|
|
||||||
/* Sidebar: visible dans le viewport, pas plus haute que l'espace dispo */
|
|
||||||
.sidebar{
|
|
||||||
height: calc(100dvh - var(--nav-h));
|
|
||||||
overflow-y: auto;
|
|
||||||
overflow-x: auto;
|
|
||||||
scrollbar-width: thin; /* Firefox */
|
|
||||||
scrollbar-color: rgba(0,0,0,.35) transparent;
|
|
||||||
}
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
.sidebar {
|
|
||||||
width: 300px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Chrome/Edge/Safari */
|
|
||||||
.sidebar::-webkit-scrollbar{ height: 10px; }
|
|
||||||
.sidebar::-webkit-scrollbar-thumb{
|
|
||||||
background-color: rgba(0,0,0,.35);
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 2px solid transparent;
|
|
||||||
}
|
|
||||||
/* garantit que le contenu peut dépasser en largeur */
|
|
||||||
.sidebar .nav{ min-width: max-content; }
|
|
||||||
|
|
||||||
.folder-tree-toggle {
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
padding: 0;
|
|
||||||
line-height: 1;
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
width: 1.5rem;
|
|
||||||
height: 1.5rem;
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-tree-toggle:focus {
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-tree-toggle .bi-chevron-right {
|
|
||||||
transition: transform 0.2s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-tree-toggle[aria-expanded="true"] .bi-chevron-right {
|
|
||||||
transform: rotate(90deg);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{% endblock head %}
|
|
||||||
|
|
||||||
{% block sidebar %}
|
|
||||||
<a href="{% url 'documents:list' %}"
|
|
||||||
class="nav-link d-flex align-items-center p-2 {% if request.path == '/documents/' and not request.GET.folder and not active_folder_slug %}active{% endif %}">
|
|
||||||
<i class="bi bi-collection" data-bs-toggle="tooltip" data-bs-placement="right" title="{% translate 'All documents' %}"></i>
|
|
||||||
<span class="ms-2 text d-none d-md-inline">{% translate "All documents" %}</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
|
|
||||||
{% render_folder_tree folder_tree active_folder_slug active_trail_slugs %}
|
|
||||||
{% endblock sidebar %}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% block script %}
|
|
||||||
|
|
||||||
<script>
|
|
||||||
(function(){
|
|
||||||
const nav = document.querySelector('.navbar');
|
|
||||||
function setNavH(){
|
|
||||||
document.documentElement.style.setProperty('--nav-h', (nav?.offsetHeight || 0) + 'px');
|
|
||||||
}
|
|
||||||
setNavH();
|
|
||||||
addEventListener('resize', setNavH);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{% endblock script %}
|
|
||||||
|
|
@ -513,7 +513,7 @@ class DocumentDeletionPermissionTests(TestCase):
|
||||||
other_doc.folders.add(root_folder)
|
other_doc.folders.add(root_folder)
|
||||||
|
|
||||||
self.client.force_login(self.manager)
|
self.client.force_login(self.manager)
|
||||||
response = self.client.get(reverse("documents:list"))
|
response = self.client.get(reverse("documents:list"), {"folder": root_folder.slug})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
delete_url = reverse("documents:delete", args=[other_doc.pk])
|
delete_url = reverse("documents:delete", args=[other_doc.pk])
|
||||||
self.assertContains(response, delete_url)
|
self.assertContains(response, delete_url)
|
||||||
|
|
@ -542,7 +542,7 @@ class DocumentDeletionPermissionTests(TestCase):
|
||||||
other_doc.folders.add(root_folder)
|
other_doc.folders.add(root_folder)
|
||||||
|
|
||||||
self.client.force_login(self.manager)
|
self.client.force_login(self.manager)
|
||||||
response = self.client.get(reverse("documents:list"))
|
response = self.client.get(reverse("documents:list"), {"folder": root_folder.slug})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
delete_url = reverse("documents:delete", args=[other_doc.pk])
|
delete_url = reverse("documents:delete", args=[other_doc.pk])
|
||||||
self.assertNotContains(response, delete_url)
|
self.assertNotContains(response, delete_url)
|
||||||
|
|
|
||||||
|
|
@ -262,6 +262,8 @@ class DocumentListView(DocumentsAppAccessMixin, LoginRequiredMixin, ListView):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
queryset = queryset.filter(folders=self.current_folder)
|
queryset = queryset.filter(folders=self.current_folder)
|
||||||
|
elif not self.search_term and not tag and not doc_type:
|
||||||
|
queryset = queryset.filter(folders__isnull=True)
|
||||||
|
|
||||||
if self.search_term:
|
if self.search_term:
|
||||||
queryset = queryset.filter(title__icontains=self.search_term)
|
queryset = queryset.filter(title__icontains=self.search_term)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue