diff --git a/judge/views/blog.py b/judge/views/blog.py index 7058ae2..a853f27 100644 --- a/judge/views/blog.py +++ b/judge/views/blog.py @@ -128,6 +128,7 @@ class PostList(FeedView, PageVoteListView, BookMarkListView): .annotate(count=Count("page")) .order_by() } + context = self.add_pagevote_context_data(context) return context diff --git a/judge/views/organization.py b/judge/views/organization.py index b61569e..486bf77 100644 --- a/judge/views/organization.py +++ b/judge/views/organization.py @@ -71,6 +71,7 @@ from judge.utils.problems import user_attempted_ids from judge.views.problem import ProblemList from judge.views.contests import ContestList from judge.views.submission import AllSubmissions, SubmissionsListBase +from judge.views.pagevote import PageVoteListView __all__ = [ "OrganizationList", @@ -265,10 +266,11 @@ class OrganizationList(TitleMixin, ListView, OrganizationBase): return context -class OrganizationHome(OrganizationDetailView): +class OrganizationHome(OrganizationDetailView, PageVoteListView): template_name = "organization/home.html" + pagevote_object_name = "posts" - def get_posts(self): + def get_posts_and_page_obj(self): posts = ( BlogPost.objects.filter( visible=True, @@ -282,12 +284,24 @@ class OrganizationHome(OrganizationDetailView): paginator = Paginator(posts, 10) page_number = self.request.GET.get("page", 1) posts = paginator.get_page(page_number) - return posts + return posts, paginator.page(page_number) + + def get_comment_page(self, post): + return "b:%s" % post.id def get_context_data(self, **kwargs): context = super(OrganizationHome, self).get_context_data(**kwargs) context["title"] = self.object.name - context["posts"] = self.get_posts() + context["posts"], context["page_obj"] = self.get_posts_and_page_obj() + context = self.add_pagevote_context_data(context, "posts") + + # Hack: This allows page_obj to have page_range for non-ListView class + setattr( + context["page_obj"], "page_range", context["posts"].paginator.page_range + ) + context["first_page_href"] = self.request.path + context["page_prefix"] = "?page=" + context["post_comment_counts"] = { int(page[2:]): count for page, count in Comment.objects.filter( @@ -311,6 +325,7 @@ class OrganizationHome(OrganizationDetailView): ) context["future_contests"] = visible_contests.filter(start_time__gt=now) context["page_type"] = "home" + return context diff --git a/judge/views/pagevote.py b/judge/views/pagevote.py index 874e108..de29c62 100644 --- a/judge/views/pagevote.py +++ b/judge/views/pagevote.py @@ -109,12 +109,9 @@ class PageVoteDetailView(TemplateResponseMixin, SingleObjectMixin, View): return context -class PageVoteListView(ListView): - pagevote_page = None - - def get_context_data(self, **kwargs): - context = super(PageVoteListView, self).get_context_data(**kwargs) - for item in context["object_list"]: +class PageVoteListView: + def add_pagevote_context_data(self, context, obj_list="object_list"): + for item in context[obj_list]: pagevote, _ = PageVote.objects.get_or_create( page=self.get_comment_page(item) ) diff --git a/judge/views/problem.py b/judge/views/problem.py index d8abc1c..7c61082 100644 --- a/judge/views/problem.py +++ b/judge/views/problem.py @@ -947,6 +947,7 @@ class ProblemFeed(ProblemList, PageVoteListView, BookMarkListView): context["feed_type"] = self.feed_type context["has_show_editorial_option"] = False context["has_have_editorial_option"] = False + context = self.add_pagevote_context_data(context) return context diff --git a/templates/organization/home.html b/templates/organization/home.html index 49b1d15..8a0d5e5 100644 --- a/templates/organization/home.html +++ b/templates/organization/home.html @@ -2,6 +2,14 @@ {% block title_ruler %}{% endblock %} +{% block org_js %} + {% include "actionbar/media-js.html" %} +{% endblock %} + +{% block three_col_media %} + {% include "actionbar/media-css.html" %} +{% endblock %} + {% block middle_title %}