From 4f5009b30fc437c7c9b592d07fc96bddbf61e08f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20I=C3=9Fbr=C3=BCcker?= Date: Sat, 3 Jan 2026 09:27:30 +0100 Subject: [PATCH] Move bulk edit checkboxes into bookmark list container (#1257) --- bookmarks/styles/bookmark-page.css | 127 +++++++----------- .../templates/bookmarks/bulk_edit_bar.html | 78 ++++++----- .../e2e_test_bookmark_page_bulk_edit.py | 4 +- 3 files changed, 88 insertions(+), 121 deletions(-) diff --git a/bookmarks/styles/bookmark-page.css b/bookmarks/styles/bookmark-page.css index b751b7d..81f252b 100644 --- a/bookmarks/styles/bookmark-page.css +++ b/bookmarks/styles/bookmark-page.css @@ -139,7 +139,7 @@ ul.bookmark-list { list-style: none; - margin: 0; + margin: var(--unit-4) 0 0 0; padding: 0; /* Increase line-height for better separation within / between items */ @@ -426,92 +426,18 @@ ul.bookmark-list { --bulk-edit-bar-offset: calc( var(--bulk-edit-toggle-width) + (2 * var(--bulk-edit-toggle-offset)) ); - --bulk-edit-transition-duration: 400ms; } ld-bookmark-page { & .bulk-edit-bar { - margin-top: -1px; - margin-left: calc(-1 * var(--bulk-edit-bar-offset)); - margin-bottom: var(--unit-4); - max-height: 0; - overflow: hidden; - transition: max-height var(--bulk-edit-transition-duration); - background: var(--bulk-actions-bg-color); - } - - &.active .bulk-edit-bar { - max-height: 37px; - border-bottom: solid 1px var(--secondary-border-color); - } - - /* Hide section border when bulk edit bar is opened, otherwise borders overlap in dark mode due to using contrast colors */ - - &.active .main .section-header { - border-bottom-color: transparent; - } - - /* make sticky pagination expand to cover checkboxes to the left */ - - &.active .bookmark-pagination.sticky:before { - content: ""; - position: absolute; - top: -1px; - bottom: 0; - left: calc( - -1 * calc(var(--bulk-edit-toggle-width) + var(--bulk-edit-toggle-offset)) - ); - width: calc(var(--bulk-edit-toggle-width) + var(--bulk-edit-toggle-offset)); - background: var(--body-color); - border-top: solid 1px var(--secondary-border-color); - } - - /* All checkbox */ - - & .form-checkbox.bulk-edit-checkbox.all { - display: block; - width: var(--bulk-edit-toggle-width); - margin: 0 0 0 var(--bulk-edit-toggle-offset); - padding: 0; - } - - /* Bookmark checkboxes */ - - & .form-checkbox.bulk-edit-checkbox:not(.all) { - display: block; - position: absolute; - width: var(--bulk-edit-toggle-width); - min-height: var(--bulk-edit-toggle-width); - left: calc( - -1 * var(--bulk-edit-toggle-width) - var(--bulk-edit-toggle-offset) - ); - top: 50%; - transform: translateY(-50%); - padding: 0; - margin: 0; - visibility: hidden; - opacity: 0; - transition: all var(--bulk-edit-transition-duration); - - .form-icon { - top: 0; - } - } - - &.active .form-checkbox.bulk-edit-checkbox:not(.all) { - visibility: visible; - opacity: 1; - } - - /* Actions */ - - & .bulk-edit-actions { - display: flex; + display: none; align-items: center; padding: var(--unit-1) 0; - border-top: solid 1px var(--secondary-border-color); gap: var(--unit-2); + background: var(--bulk-actions-bg-color); + border-bottom: solid 1px var(--secondary-border-color); + /* Actions */ & button { --control-padding-x-sm: 0; } @@ -534,6 +460,49 @@ ld-bookmark-page { } } + &.active .bulk-edit-bar { + display: flex; + } + + /* All checkbox */ + + & .form-checkbox.bulk-edit-checkbox.all { + display: block; + width: var(--bulk-edit-toggle-width); + margin: 0 0 0 var(--bulk-edit-toggle-offset); + padding: 0; + } + + /* Bookmark checkboxes */ + + & .form-checkbox.bulk-edit-checkbox:not(.all) { + display: none; + position: absolute; + width: var(--bulk-edit-toggle-width); + min-height: var(--bulk-edit-toggle-width); + left: calc( + -1 * var(--bulk-edit-toggle-width) - var(--bulk-edit-toggle-offset) + ); + top: 50%; + transform: translateY(-50%); + padding: 0; + margin: 0; + + .form-icon { + top: 0; + } + } + + &.active .form-checkbox.bulk-edit-checkbox:not(.all) { + display: block; + } + + &.active ul.bookmark-list > li { + padding-left: calc( + var(--bulk-edit-toggle-width) + calc(var(--bulk-edit-toggle-offset) * 2) + ); + } + & ld-tag-autocomplete { display: none; } diff --git a/bookmarks/templates/bookmarks/bulk_edit_bar.html b/bookmarks/templates/bookmarks/bulk_edit_bar.html index 1e60d82..9e4a0d9 100644 --- a/bookmarks/templates/bookmarks/bulk_edit_bar.html +++ b/bookmarks/templates/bookmarks/bulk_edit_bar.html @@ -1,45 +1,43 @@ {% load shared %} {% htmlmin %}
-
- - - - - - -
+ + + + + +
{% endhtmlmin %} diff --git a/bookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py b/bookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py index 022cba1..8569a60 100644 --- a/bookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py +++ b/bookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py @@ -304,7 +304,7 @@ class BookmarkPageBulkEditE2ETestCase(LinkdingE2ETestCase): self.locate_bulk_edit_select_all().click() expect( - self.locate_bulk_edit_bar().get_by_text("All pages (100 bookmarks)") + self.locate_bulk_edit_bar().get_by_text("All 100 bookmarks") ).to_be_visible() self.select_bulk_action("Delete") @@ -317,5 +317,5 @@ class BookmarkPageBulkEditE2ETestCase(LinkdingE2ETestCase): self.locate_bulk_edit_select_all().click() expect( - self.locate_bulk_edit_bar().get_by_text("All pages (70 bookmarks)") + self.locate_bulk_edit_bar().get_by_text("All 70 bookmarks") ).to_be_visible()