Jelajahi Sumber

Closes #5429: Enable toggling the placement of table paginators

jeremystretch 4 tahun lalu
induk
melakukan
bf6345aa90

+ 1 - 0
docs/development/user-preferences.md

@@ -8,6 +8,7 @@ The `users.UserConfig` model holds individual preferences for each user in the f
 |--------------------------|---------------------------------------------------------------|
 | data_format              | Preferred format when rendering raw data (JSON or YAML)       |
 | pagination.per_page      | The number of items to display per page of a paginated table  |
+| pagination.placement     | Where to display the paginator controls relative to the table |
 | tables.${table}.columns  | The ordered list of columns to display when viewing the table |
 | tables.${table}.ordering | A list of column names by which the table should be ordered   |
 | ui.colormode             | Light or dark mode in the user interface                      |

+ 1 - 0
docs/release-notes/version-3.2.md

@@ -60,6 +60,7 @@ Inventory item templates can be arranged hierarchically within a device type, an
 
 ### Enhancements
 
+* [#5429](https://github.com/netbox-community/netbox/issues/5429) - Enable toggling the placement of table paginators
 * [#6954](https://github.com/netbox-community/netbox/issues/6954) - Remember users' table ordering preferences
 * [#7650](https://github.com/netbox-community/netbox/issues/7650) - Add support for local account password validation
 * [#7679](https://github.com/netbox-community/netbox/issues/7679) - Add actions menu to all object tables

+ 10 - 0
netbox/netbox/preferences.py

@@ -26,6 +26,16 @@ PREFERENCES = {
         description='The number of objects to display per page',
         coerce=lambda x: int(x)
     ),
+    'pagination.placement': UserPreference(
+        label='Paginator placement',
+        choices=(
+            ('bottom', 'Bottom'),
+            ('top', 'Top'),
+            ('both', 'Both'),
+        ),
+        description='Where the paginator controls will be displayed relative to a table',
+        default='bottom'
+    ),
 
     # Miscellaneous
     'data_format': UserPreference(

+ 10 - 2
netbox/templates/htmx/table.html

@@ -1,5 +1,13 @@
 {# Render an HTMX-enabled table with paginator #}
+{% load helpers %}
 {% load render_table from django_tables2 %}
 
-{% render_table table 'inc/table_htmx.html' %}
-{% include 'inc/paginator_htmx.html' with paginator=table.paginator page=table.page %}
+{% with preferences|get_key:"pagination.placement" as paginator_placement %}
+  {% if paginator_placement == 'top' or paginator_placement == 'both' %}
+    {% include 'inc/paginator_htmx.html' with paginator=table.paginator page=table.page %}
+  {% endif %}
+  {% render_table table 'inc/table_htmx.html' %}
+  {% if paginator_placement != 'top' %}
+    {% include 'inc/paginator_htmx.html' with paginator=table.paginator page=table.page %}
+  {% endif %}
+{% endwith %}

+ 1 - 0
netbox/users/forms.py

@@ -47,6 +47,7 @@ class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMe
         fieldsets = (
             ('User Interface', (
                 'pagination.per_page',
+                'pagination.placement',
                 'ui.colormode',
             )),
             ('Miscellaneous', (