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" %}
|
||||
{% load i18n documents_tags %}
|
||||
|
||||
{% 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 %}
|
||||
{% load i18n %}
|
||||
|
|
@ -513,7 +513,7 @@ class DocumentDeletionPermissionTests(TestCase):
|
|||
other_doc.folders.add(root_folder)
|
||||
|
||||
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)
|
||||
delete_url = reverse("documents:delete", args=[other_doc.pk])
|
||||
self.assertContains(response, delete_url)
|
||||
|
|
@ -542,7 +542,7 @@ class DocumentDeletionPermissionTests(TestCase):
|
|||
other_doc.folders.add(root_folder)
|
||||
|
||||
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)
|
||||
delete_url = reverse("documents:delete", args=[other_doc.pk])
|
||||
self.assertNotContains(response, delete_url)
|
||||
|
|
|
|||
|
|
@ -262,6 +262,8 @@ class DocumentListView(DocumentsAppAccessMixin, LoginRequiredMixin, ListView):
|
|||
)
|
||||
else:
|
||||
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:
|
||||
queryset = queryset.filter(title__icontains=self.search_term)
|
||||
|
|
|
|||
Loading…
Reference in a new issue