diff --git a/core/static/core/js/script.js b/core/static/core/js/script.js index 13613740..c55cf51f 100644 --- a/core/static/core/js/script.js +++ b/core/static/core/js/script.js @@ -74,6 +74,7 @@ const initialUrlParams = new URLSearchParams(window.location.search); * @enum {number} */ const History = { + NONE: 0, PUSH: 1, REPLACE: 2, }; @@ -82,9 +83,12 @@ const History = { * @param {string} key * @param {string | string[] | null} value * @param {History} action + * @param {URL | null} url */ -function update_query_string(key, value, action = History.REPLACE) { - const url = new URL(window.location.href); +function update_query_string(key, value, action = History.REPLACE, url = null) { + if (!url){ + url = new URL(window.location.href); + } if (!value) { // If the value is null, undefined or empty => delete it url.searchParams.delete(key) @@ -96,8 +100,10 @@ function update_query_string(key, value, action = History.REPLACE) { } if (action === History.PUSH) { - history.pushState(null, document.title, url.toString()); + history.pushState(null, "", url.toString()); } else if (action === History.REPLACE) { - history.replaceState(null, document.title, url.toString()); + history.replaceState(null, "", url.toString()); } + + return url; } diff --git a/core/templates/core/macros.jinja b/core/templates/core/macros.jinja index 2344de37..11014a64 100644 --- a/core/templates/core/macros.jinja +++ b/core/templates/core/macros.jinja @@ -116,6 +116,46 @@ {% endif %} {% endmacro %} +{% macro paginate_alpine(page, nb_pages) %} + {# Add pagination buttons for ajax based content with alpine + + Notes: + This can only be used in the scope of your alpine datastore + + Notes: + You might need to listen to the "popstate" event in your code + to update the current page you are on when the user goes back in + it's browser history with the back arrow + + Parameters: + page (str): name of the alpine page variable in your datastore + nb_page (str): call to a javascript function or variable returning + the maximum number of pages to paginate + #} + +{% endmacro %} + {% macro paginate(page_obj, paginator, js_action) %} {% set js = js_action|default('') %} {% if page_obj.has_previous() or page_obj.has_next() %} diff --git a/pedagogy/templates/pedagogy/guide.jinja b/pedagogy/templates/pedagogy/guide.jinja index 1aa713e4..fcf9599a 100644 --- a/pedagogy/templates/pedagogy/guide.jinja +++ b/pedagogy/templates/pedagogy/guide.jinja @@ -1,4 +1,5 @@ {% extends "core/base.jinja" %} +{% from 'core/macros.jinja' import paginate_alpine %} {% block title %} {% trans %}UV Guide{% endtrans %} @@ -113,17 +114,7 @@ - + {{ paginate_alpine("page", "max_page()") }}