diff --git a/modoboa/admin/static/admin/js/admin.js b/modoboa/admin/static/admin/js/admin.js
index b198b9ab7..e5aeb2144 100644
--- a/modoboa/admin/static/admin/js/admin.js
+++ b/modoboa/admin/static/admin/js/admin.js
@@ -161,6 +161,24 @@ Domains.prototype = {
$(document).trigger('domain_listing_refresh');
},
+ /**
+ * Add a type to let the server know what kind of object we expect.
+ *
+ * @this Listing
+ */
+ get_load_page_args: function() {
+ var args = Admin.prototype.get_load_page_args.call(this);
+
+ if (this.navobj.getbaseurl() === "list") {
+ args.objtype = "domain";
+ this.options.eor_message = gettext("No more domain to show");
+ } else {
+ args.objtype = "quota";
+ this.options.eor_message = gettext("No more quota to show");
+ }
+ return args;
+ },
+
/**
* Navigation callback: default.
*
diff --git a/modoboa/admin/templates/admin/domains.html b/modoboa/admin/templates/admin/domains.html
index 10f18baa6..5d354d6bd 100644
--- a/modoboa/admin/templates/admin/domains.html
+++ b/modoboa/admin/templates/admin/domains.html
@@ -15,7 +15,7 @@
diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py
index c8abbf2c5..dc5529698 100644
--- a/modoboa/admin/tests/test_domain.py
+++ b/modoboa/admin/tests/test_domain.py
@@ -356,6 +356,14 @@ class DomainTestCase(ModoTestCase):
self.assertNotIn("Global statistics", content)
self.assertIn("Per-domain statistics", content)
+ def test_page_loader(self):
+ """Test page loader view."""
+ url = reverse("admin:domain_page")
+ response = self.ajax_get(url)
+ self.assertIn("handle_mailboxes", response)
+ response = self.ajax_get("{}?objtype=quota".format(url))
+ self.assertIn("progress-bar", response["rows"])
+
class DKIMTestCase(ModoTestCase):
"""Test case for DKIM."""
diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py
index 83b6570cb..bb299ae19 100644
--- a/modoboa/admin/urls.py
+++ b/modoboa/admin/urls.py
@@ -31,6 +31,8 @@ urlpatterns = [
name="domain_change"),
url(r'^domains/(?P\d+)/delete/$', domain_views.deldomain,
name="domain_delete"),
+ url(r'^domains/page/$', domain_views.get_next_page,
+ name="domain_page"),
]
urlpatterns += [
diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py
index a6e5fead6..824901cbd 100644
--- a/modoboa/admin/views/domain.py
+++ b/modoboa/admin/views/domain.py
@@ -108,6 +108,19 @@ def domains(request, tplname="admin/domains.html"):
})
+@login_required
+@user_passes_test(
+ lambda u: u.has_perm("admin.view_domains") or
+ u.has_perm("admin.view_mailboxes") or
+ u.has_perm("admin.add_domain")
+)
+def get_next_page(request):
+ """Return the next page of the domain or quota list."""
+ if request.GET.get("objtype", "domain") == "domain":
+ return _domains(request)
+ return list_quotas(request)
+
+
@login_required
@permission_required("core.add_user")
def domains_list(request):