From df6a25067d608937b2a5d84220cbfd2d34fd2829 Mon Sep 17 00:00:00 2001 From: Peter Pfeufer Date: Tue, 20 Jan 2026 08:22:25 +0000 Subject: [PATCH] [CHANGE] Update serverside datatables docs --- allianceauth/framework/datatables.py | 4 +- .../framework/css/auth-framework.css | 31 ++++++++++ .../datatables/process-indicator.html | 9 +++ .../css/columnControl.bootstrap5.min.css | 0 .../1.2.0/js/columnControl.bootstrap5.min.js | 0 .../1.2.0/js/dataTables.columnControl.min.js | 0 .../datatables-2-columncontrol-css-bs5.html | 4 +- .../datatables-2-columncontrol-js-bs5.html | 6 +- .../bundles/datatables-2-css-bs5.html | 2 + .../bundles/datatables-2-js-bs5.html | 2 + .../custom/framework/datatables.md | 59 +++++++++++++++---- 11 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 allianceauth/framework/templates/framework/datatables/process-indicator.html rename allianceauth/static/allianceauth/libs/DataTables/{Plugins => Extensions}/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css (100%) rename allianceauth/static/allianceauth/libs/DataTables/{Plugins => Extensions}/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js (100%) rename allianceauth/static/allianceauth/libs/DataTables/{Plugins => Extensions}/ColumnControl/1.2.0/js/dataTables.columnControl.min.js (100%) diff --git a/allianceauth/framework/datatables.py b/allianceauth/framework/datatables.py index 78007946..387f5cfe 100644 --- a/allianceauth/framework/datatables.py +++ b/allianceauth/framework/datatables.py @@ -115,7 +115,7 @@ class DataTablesView(View): _type = str(c["columnControl"]["search"]["type"]) if _type == "text": if _logic == "notEmpty": - except_qs |= Q(**{f'{_c}': ""}) + except_qs |= Q(**{f'{_c}': ""}) elif len(_sv) > 0: if _logic == "notContains": except_qs |= Q(**{f'{_c}__icontains': _sv}) @@ -123,7 +123,7 @@ class DataTablesView(View): except_qs |= Q(**{f'{_c}': _sv}) elif _type == "num": if _logic == "notEmpty": - except_qs |= Q(**{f'{_c}__isnull': False}) + except_qs |= Q(**{f'{_c}__isnull': False}) elif len(_sv) > 0: if _logic == "notEqual": try: diff --git a/allianceauth/framework/static/allianceauth/framework/css/auth-framework.css b/allianceauth/framework/static/allianceauth/framework/css/auth-framework.css index b866d344..cf3bf7f2 100644 --- a/allianceauth/framework/static/allianceauth/framework/css/auth-framework.css +++ b/allianceauth/framework/static/allianceauth/framework/css/auth-framework.css @@ -179,3 +179,34 @@ border-left-color: var(--bs-warning); } } + +/* DataTables 2 +------------------------------------------------------------------------------------- */ +@media all { + /* DataTables Processing Indicator + --------------------------------------------------------------------------------- */ + div.dt-processing { + padding-top: 0.5rem !important; + } + + div.dt-processing > div { + display: none; + } + + svg.aa-datatables-process-indicator { + width: 2rem; + height: 2rem; + } + + /* DataTables Extension: ColumnControl + --------------------------------------------------------------------------------- */ + table.dataTable span.dtcc div.dtcc-search > div select { + background-color: var(--bs-body-bg); + color: var(--bs-body-color); + padding: 0.375rem; + } + + table.dataTable .dt-column-header div.dtcc-search-title { + display: none; + } +} diff --git a/allianceauth/framework/templates/framework/datatables/process-indicator.html b/allianceauth/framework/templates/framework/datatables/process-indicator.html new file mode 100644 index 00000000..f3ded212 --- /dev/null +++ b/allianceauth/framework/templates/framework/datatables/process-indicator.html @@ -0,0 +1,9 @@ +{% load i18n %} + + + + + +

+ {% translate "Loading …" %} +

diff --git a/allianceauth/static/allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css b/allianceauth/static/allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css similarity index 100% rename from allianceauth/static/allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css rename to allianceauth/static/allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css diff --git a/allianceauth/static/allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js b/allianceauth/static/allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js similarity index 100% rename from allianceauth/static/allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js rename to allianceauth/static/allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js diff --git a/allianceauth/static/allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/js/dataTables.columnControl.min.js b/allianceauth/static/allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/dataTables.columnControl.min.js similarity index 100% rename from allianceauth/static/allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/js/dataTables.columnControl.min.js rename to allianceauth/static/allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/dataTables.columnControl.min.js diff --git a/allianceauth/templates/bundles/datatables-2-columncontrol-css-bs5.html b/allianceauth/templates/bundles/datatables-2-columncontrol-css-bs5.html index 6627feee..a12bdcdf 100644 --- a/allianceauth/templates/bundles/datatables-2-columncontrol-css-bs5.html +++ b/allianceauth/templates/bundles/datatables-2-columncontrol-css-bs5.html @@ -1,3 +1,5 @@ {% load sri %} -{% sri_static "allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css" %} + +{% sri_static "allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css" %} + diff --git a/allianceauth/templates/bundles/datatables-2-columncontrol-js-bs5.html b/allianceauth/templates/bundles/datatables-2-columncontrol-js-bs5.html index 87747d4e..2eefdd59 100644 --- a/allianceauth/templates/bundles/datatables-2-columncontrol-js-bs5.html +++ b/allianceauth/templates/bundles/datatables-2-columncontrol-js-bs5.html @@ -1,4 +1,6 @@ {% load sri %} -{% sri_static "allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/js/dataTables.columnControl.min.js" %} -{% sri_static "allianceauth/libs/DataTables/Plugins/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js" %} + +{% sri_static "allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/dataTables.columnControl.min.js" %} +{% sri_static "allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js" %} + diff --git a/allianceauth/templates/bundles/datatables-2-css-bs5.html b/allianceauth/templates/bundles/datatables-2-css-bs5.html index 836d9174..f9ede18f 100644 --- a/allianceauth/templates/bundles/datatables-2-css-bs5.html +++ b/allianceauth/templates/bundles/datatables-2-css-bs5.html @@ -1,3 +1,5 @@ {% load sri %} + {% sri_static "allianceauth/libs/DataTables/2.3.6/css/dataTables.bootstrap5.min.css" %} + diff --git a/allianceauth/templates/bundles/datatables-2-js-bs5.html b/allianceauth/templates/bundles/datatables-2-js-bs5.html index dcad06f9..0536e435 100644 --- a/allianceauth/templates/bundles/datatables-2-js-bs5.html +++ b/allianceauth/templates/bundles/datatables-2-js-bs5.html @@ -1,4 +1,6 @@ {% load sri %} + {% sri_static "allianceauth/libs/DataTables/2.3.6/js/dataTables.min.js" %} {% sri_static "allianceauth/libs/DataTables/2.3.6/js/dataTables.bootstrap5.min.js" %} + diff --git a/docs/development/custom/framework/datatables.md b/docs/development/custom/framework/datatables.md index 818f43e5..45a9a989 100644 --- a/docs/development/custom/framework/datatables.md +++ b/docs/development/custom/framework/datatables.md @@ -37,10 +37,14 @@ Given the `EveCharacter` Model as our model of choice we would define our stubs ```django {% extends "allianceauth/base-bs5.html" %} + {% load i18n %} +{% load aa_i18n %} + {% block page_title %} {% translate "App Name" %} {% endblock page_title %} + {% block content %} @@ -54,26 +58,54 @@ Given the `EveCharacter` Model as our model of choice we would define our stubs
{% endblock content %} + {% block extra_css %} - - + {% include "bundles/datatables-2-css-bs5.html" %} + + {% comment %} If you don't use the ColumnControl Extension, remove the next line {% endcomment %} + {% include "bundles/datatables-2-columncontrol-css-bs5.html" %} {% endblock %} + {% block extra_javascript %} - - - + {% get_datatables_language_static LANGUAGE_CODE as DT_LANG_PATH %} + + {% include "bundles/datatables-2-js-bs5.html" %} + + {% comment %} If you don't use the ColumnControl Extension, remove the next line {% endcomment %} + {% include "bundles/datatables-2-columncontrol-js-bs5.html" %} + {% endblock extra_javascript %} - ``` ## Add our Views @@ -148,11 +179,13 @@ class EveCharacterTable(DataTablesView): # if you need to do some prefetch or pre-filtering you can overide this function def get_model_qs(self, request: HttpRequest): qs = self.model.objects + if not request.user.is_superuser: # eg only show unlinked characters to non-superusers # just an example # filtering here will prevent people searching things that may not be visible to them qs = qs.filter(character_ownership__isnull=True) + # maybe some character ownership select related for performance? return qs.select_related("character_ownership", "character_ownership__user") @@ -174,7 +207,7 @@ app_name = 'appname' urlpatterns = [ path("list/", views.EveCharacterTable.as_view(), name='eve_character_table'), - path("tables/data_table", views.show_table, name='table') + path("tables/data_table", views.show_table, name='data_table_view') ] ```