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()") }}