From acd3c8d660e05610228f53d646e083aed0feabd1 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 2 Apr 2025 16:55:27 +0200 Subject: [PATCH 01/17] Add 'include_proposals_in_search_results' to context for problem-list.html. --- .../problems/problemset/control-tag-proposals.js | 16 ++++++++++++++++ oioioi/problems/views.py | 3 +++ 2 files changed, 19 insertions(+) diff --git a/oioioi/problems/static/problems/problemset/control-tag-proposals.js b/oioioi/problems/static/problems/problemset/control-tag-proposals.js index 21febb4e1..c7d8ca967 100644 --- a/oioioi/problems/static/problems/problemset/control-tag-proposals.js +++ b/oioioi/problems/static/problems/problemset/control-tag-proposals.js @@ -2,11 +2,27 @@ document.addEventListener("DOMContentLoaded", function(){ var checkbox = document.getElementById("show-tag-proposals-checkbox"); if (checkbox) { var proposals = document.querySelectorAll(".aggregated-proposals"); + function toggleProposals() { proposals.forEach(function(div){ div.style.display = checkbox.checked ? "inline-block" : "none"; }); } + + var searchForm = document.getElementById("problemsite_search-form"); + if (searchForm) { + searchForm.addEventListener("submit", function(event) { + // If checkbox is checked, add a parameter to tell the server to include algorithm tag proposals + if (checkbox.checked) { + var includeProposalsInput = document.createElement("input"); + includeProposalsInput.type = "hidden"; + includeProposalsInput.name = "include_proposals"; + includeProposalsInput.value = "1"; + searchForm.appendChild(includeProposalsInput); + } + }); + } + checkbox.addEventListener("change", toggleProposals); toggleProposals(); // on page load } diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index e30bd597a..684cf0efc 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -475,6 +475,8 @@ def problemset_generate_view(request, page_title, problems, view_type): name__in=request.GET.getlist('difficulty') ).order_by('name') + include_proposals_in_search_results = 'include_proposals' in request.GET + return TemplateResponse( request, 'problems/problemset/problem-list.html', @@ -489,6 +491,7 @@ def problemset_generate_view(request, page_title, problems, view_type): 'difficulty_tags': difficulty_tags, 'show_tags': show_tags, 'show_tag_proposals': show_tag_proposals, + 'include_proposals_in_search_results': include_proposals_in_search_results, 'max_tag_proposals_shown': max_tag_proposals_shown, 'min_proposals_per_tag': min_proposals_per_tag, 'show_statistics': show_statistics, From 7369d02932de726400d35615439c595e9b184fa3 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 2 Apr 2025 17:45:56 +0200 Subject: [PATCH 02/17] Split prefetch_tags into prefetch_tags and prefetch_top_tag_proposals. --- .../problems/problemset/problem-list.html | 4 +- oioioi/problems/templatetags/tag.py | 56 ++++++++++--------- oioioi/problems/views.py | 5 +- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/oioioi/problems/templates/problems/problemset/problem-list.html b/oioioi/problems/templates/problems/problemset/problem-list.html index c5d27ab95..3ee385bfa 100644 --- a/oioioi/problems/templates/problems/problemset/problem-list.html +++ b/oioioi/problems/templates/problems/problemset/problem-list.html @@ -74,9 +74,7 @@ - {% if show_tags and show_tag_proposals %} - {% prefetch_tags problems max_tag_proposals_shown min_proposals_per_tag %} - {% elif show_tags %} + {% if show_tags %} {% prefetch_tags problems %} {% endif %} {% for problem in problems %} diff --git a/oioioi/problems/templatetags/tag.py b/oioioi/problems/templatetags/tag.py index 8059b8d05..d07f6b64e 100644 --- a/oioioi/problems/templatetags/tag.py +++ b/oioioi/problems/templatetags/tag.py @@ -4,43 +4,47 @@ from oioioi.base.utils.tags import get_tag_name, get_tag_prefix from oioioi.problems.models import AggregatedAlgorithmTagProposal from django.utils.translation import gettext as _, ngettext +from oioioi.szkopul import settings register = Library() @register.simple_tag -def prefetch_tags(problems, max_proposals_shown=0, min_proposals_per_tag=1): - prefetch_tag_proposals = max_proposals_shown > 0 +def prefetch_top_tag_proposals(problems): + max_proposals_shown = settings.PROBSET_SHOWN_TAG_PROPOSALS_LIMIT + min_proposals_per_tag = settings.PROBSET_MIN_AMOUNT_TO_CONSIDER_TAG_PROPOSAL + + prefetch_related_objects( + problems, + Prefetch( + 'aggregatedalgorithmtagproposal_set', + queryset=AggregatedAlgorithmTagProposal.objects.filter( + amount__gte=min_proposals_per_tag + ).order_by('-amount')[:max_proposals_shown], + to_attr='top_tag_proposals' + ) + ) + + for problem in problems: + algo_tag_pks = set(problem.algorithmtag_set.all().values_list('pk', flat=True)) + problem.top_tag_proposals = [ + proposal for proposal in problem.top_tag_proposals + if proposal.tag.pk not in algo_tag_pks + ] + + return u'' + - lookups = [ +@register.simple_tag +def prefetch_tags(problems): + prefetch_related_objects( + problems, 'difficultytag_set', 'algorithmtag_set__localizations', 'origintag_set__localizations', 'origininfovalue_set__localizations', 'origininfovalue_set__parent_tag__localizations', - ] - - if prefetch_tag_proposals: - lookups.append( - Prefetch( - 'aggregatedalgorithmtagproposal_set', - queryset=AggregatedAlgorithmTagProposal.objects.filter( - amount__gte=min_proposals_per_tag - ).order_by('-amount')[:max_proposals_shown], - to_attr='top_tag_proposals' - ) - ) - - prefetch_related_objects(problems, *lookups) - - if prefetch_tag_proposals: - for problem in problems: - algo_tag_pks = set(problem.algorithmtag_set.all().values_list('pk', flat=True)) - problem.top_tag_proposals = [ - proposal for proposal in problem.top_tag_proposals - if proposal.tag.pk not in algo_tag_pks - ] - + ) return u'' diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index 684cf0efc..e964ab556 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -262,7 +262,10 @@ def search_problems_in_problemset(datadict): if query: problems = _get_problems_by_query(query) if algorithm_tags: - problems = problems.filter(algorithmtag__name__in=algorithm_tags) + if settings.PROBLEM_TAGS_VISIBLE and 'include_proposals' in datadict: + pass # TODO: implement this + else: + problems = problems.filter(algorithmtag__name__in=algorithm_tags) if difficulty_tags: problems = problems.filter(difficultytag__name__in=difficulty_tags) if origin_tags: From 4fa6fb4c8aa73f3b5f80c06558ad27e12b30c4fb Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 2 Apr 2025 18:01:26 +0200 Subject: [PATCH 03/17] search_problems_in_query -> filter_problems_by_query, prefetch_top_tag_proposals before filtering by query --- oioioi/problems/views.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index e964ab556..515cbda43 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -81,6 +81,7 @@ problem_site_tab_registry, ) from oioioi.problems.problem_sources import problem_sources +from oioioi.problems.templatetags.tag import prefetch_top_tag_proposals from oioioi.problems.utils import ( can_add_to_problemset, can_admin_instance_of_problem, @@ -251,16 +252,15 @@ def _get_problems_by_query(query): return filtered_problems.distinct() -def search_problems_in_problemset(datadict): +def filter_problems_by_query(problems, datadict): query = datadict.get('q', '') algorithm_tags = datadict.getlist('algorithm') difficulty_tags = datadict.getlist('difficulty') origin_tags = datadict.getlist('origin') - problems = Problem.objects.all() - if query: - problems = _get_problems_by_query(query) + problems_matching_query = _get_problems_by_query(query) + problems = problems.filter(pk__in=problems_matching_query) if algorithm_tags: if settings.PROBLEM_TAGS_VISIBLE and 'include_proposals' in datadict: pass # TODO: implement this @@ -271,7 +271,7 @@ def search_problems_in_problemset(datadict): if origin_tags: problems = filter_problems_by_origin(problems, origin_tags) - return problems + return None def generate_problemset_tabs(request): @@ -308,10 +308,13 @@ def generate_problemset_tabs(request): def problemset_get_problems(request): + problems = Problem.objects.all() + if settings.PROBLEM_TAGS_VISIBLE: - problems = search_problems_in_problemset(request.GET) - else: - problems = Problem.objects.all() + if settings.SHOW_TAG_PROPOSALS_IN_PROBLEMSET: + prefetch_top_tag_proposals(problems) + + filter_problems_by_query(problems, request.GET) if settings.PROBLEM_STATISTICS_AVAILABLE: # We annotate all of the statistics to assure that the display From ceccba3df9be4460ab7a067429fe603710422e35 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 2 Apr 2025 18:25:41 +0200 Subject: [PATCH 04/17] Initial implementation of filtering by top_tag_proposals. --- oioioi/problems/views.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index 515cbda43..fe052fba7 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -263,7 +263,19 @@ def filter_problems_by_query(problems, datadict): problems = problems.filter(pk__in=problems_matching_query) if algorithm_tags: if settings.PROBLEM_TAGS_VISIBLE and 'include_proposals' in datadict: - pass # TODO: implement this + direct_match_problems = problems.filter(algorithmtag__name__in=algorithm_tags) + + problem_list = list(problems) + proposal_match_problem_ids = [] + for problem in problem_list: + for proposal in problem.top_tag_proposals: + if proposal.tag.name in algorithm_tags: + proposal_match_problem_ids.append(problem.id) + break + + proposal_match_problems = problems.filter(id__in=proposal_match_problem_ids) + + problems = (direct_match_problems | proposal_match_problems).distinct() else: problems = problems.filter(algorithmtag__name__in=algorithm_tags) if difficulty_tags: From 758ea19876b56ce1a7d466b5d8d0d67bd214cef3 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 19:54:30 +0200 Subject: [PATCH 05/17] Fix wrong import source for settings. --- oioioi/problems/templatetags/tag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oioioi/problems/templatetags/tag.py b/oioioi/problems/templatetags/tag.py index d07f6b64e..d51acb2bf 100644 --- a/oioioi/problems/templatetags/tag.py +++ b/oioioi/problems/templatetags/tag.py @@ -4,7 +4,7 @@ from oioioi.base.utils.tags import get_tag_name, get_tag_prefix from oioioi.problems.models import AggregatedAlgorithmTagProposal from django.utils.translation import gettext as _, ngettext -from oioioi.szkopul import settings +from django.conf import settings register = Library() From f6c0768bef073e5e96b2c457f6caa03158090420 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 21:04:12 +0200 Subject: [PATCH 06/17] Fix prefetching top_tag_proposals. --- .../templates/problems/problemset/problem-list.html | 1 + oioioi/problems/views.py | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oioioi/problems/templates/problems/problemset/problem-list.html b/oioioi/problems/templates/problems/problemset/problem-list.html index 3ee385bfa..ce87fef50 100644 --- a/oioioi/problems/templates/problems/problemset/problem-list.html +++ b/oioioi/problems/templates/problems/problemset/problem-list.html @@ -76,6 +76,7 @@ {% if show_tags %} {% prefetch_tags problems %} + {% prefetch_top_tag_proposals problems %} {% endif %} {% for problem in problems %} diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index fe052fba7..80e1b2739 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -262,11 +262,13 @@ def filter_problems_by_query(problems, datadict): problems_matching_query = _get_problems_by_query(query) problems = problems.filter(pk__in=problems_matching_query) if algorithm_tags: - if settings.PROBLEM_TAGS_VISIBLE and 'include_proposals' in datadict: + if settings.SHOW_TAG_PROPOSALS_IN_PROBLEMSET and 'include_proposals' in datadict: direct_match_problems = problems.filter(algorithmtag__name__in=algorithm_tags) problem_list = list(problems) proposal_match_problem_ids = [] + + prefetch_top_tag_proposals(problems) for problem in problem_list: for proposal in problem.top_tag_proposals: if proposal.tag.name in algorithm_tags: @@ -323,9 +325,6 @@ def problemset_get_problems(request): problems = Problem.objects.all() if settings.PROBLEM_TAGS_VISIBLE: - if settings.SHOW_TAG_PROPOSALS_IN_PROBLEMSET: - prefetch_top_tag_proposals(problems) - filter_problems_by_query(problems, request.GET) if settings.PROBLEM_STATISTICS_AVAILABLE: From 7bf23409cf5394a8edbd205305565f4c7eb94ca4 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 21:05:57 +0200 Subject: [PATCH 07/17] Fix filter_problems_by_query - it now returns the modified set. --- oioioi/problems/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index 80e1b2739..325aad0e2 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -285,7 +285,7 @@ def filter_problems_by_query(problems, datadict): if origin_tags: problems = filter_problems_by_origin(problems, origin_tags) - return None + return problems def generate_problemset_tabs(request): @@ -325,7 +325,7 @@ def problemset_get_problems(request): problems = Problem.objects.all() if settings.PROBLEM_TAGS_VISIBLE: - filter_problems_by_query(problems, request.GET) + problems = filter_problems_by_query(problems, request.GET) if settings.PROBLEM_STATISTICS_AVAILABLE: # We annotate all of the statistics to assure that the display From e78f6ee9a22912bcb3801b513e410cb7dedce1cf Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 21:06:50 +0200 Subject: [PATCH 08/17] Filter by algorithm tags last in filter_problems_by_query as it is possibly the slowest way of filtering. --- oioioi/problems/views.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index 325aad0e2..bbbe04b1a 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -261,6 +261,10 @@ def filter_problems_by_query(problems, datadict): if query: problems_matching_query = _get_problems_by_query(query) problems = problems.filter(pk__in=problems_matching_query) + if difficulty_tags: + problems = problems.filter(difficultytag__name__in=difficulty_tags) + if origin_tags: + problems = filter_problems_by_origin(problems, origin_tags) if algorithm_tags: if settings.SHOW_TAG_PROPOSALS_IN_PROBLEMSET and 'include_proposals' in datadict: direct_match_problems = problems.filter(algorithmtag__name__in=algorithm_tags) @@ -280,10 +284,6 @@ def filter_problems_by_query(problems, datadict): problems = (direct_match_problems | proposal_match_problems).distinct() else: problems = problems.filter(algorithmtag__name__in=algorithm_tags) - if difficulty_tags: - problems = problems.filter(difficultytag__name__in=difficulty_tags) - if origin_tags: - problems = filter_problems_by_origin(problems, origin_tags) return problems From 1a3b5bb8b74663cc12923cb539409d3a122149f3 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 21:13:46 +0200 Subject: [PATCH 09/17] aggregated_tag_label now redirects to filtering displaying tag proposals. --- oioioi/problems/templatetags/tag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oioioi/problems/templatetags/tag.py b/oioioi/problems/templatetags/tag.py index d51acb2bf..9ba48d664 100644 --- a/oioioi/problems/templatetags/tag.py +++ b/oioioi/problems/templatetags/tag.py @@ -78,7 +78,7 @@ def aggregated_tag_label(aggregated_tag): name=get_tag_name(tag), cls=full_prefix, amount=str(amount), - href="?" + tag_prefix + "=" + tag.name, + href="?" + tag_prefix + "=" + tag.name + "&include_proposals=1", ) From 858b247f9f74ff0b19963455fec639e8a275b5f5 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 21:20:16 +0200 Subject: [PATCH 10/17] Checkbox automatically checked if proposals included in http request. --- oioioi/problems/templates/problems/problemset/base.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/oioioi/problems/templates/problems/problemset/base.html b/oioioi/problems/templates/problems/problemset/base.html index 30784c843..30af45f52 100644 --- a/oioioi/problems/templates/problems/problemset/base.html +++ b/oioioi/problems/templates/problems/problemset/base.html @@ -92,7 +92,8 @@
From 35daa3f30ac0949bb140990d8743b7bfb4c6a089 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 22:27:43 +0200 Subject: [PATCH 11/17] Tag label links keep checkbox state. --- .../problems/problemset/control-tag-proposals.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/oioioi/problems/static/problems/problemset/control-tag-proposals.js b/oioioi/problems/static/problems/problemset/control-tag-proposals.js index c7d8ca967..d6bdcab2e 100644 --- a/oioioi/problems/static/problems/problemset/control-tag-proposals.js +++ b/oioioi/problems/static/problems/problemset/control-tag-proposals.js @@ -23,6 +23,18 @@ document.addEventListener("DOMContentLoaded", function(){ }); } + // Intercept clicks on tag labels and origininfo labels + document.querySelectorAll("a.tag-label").forEach(function(link) { + link.addEventListener("click", function(event) { + if (checkbox.checked) { + event.preventDefault(); + var url = new URL(link.href, window.location.origin); + url.searchParams.set("include_proposals", "1"); + window.location.href = url.toString(); + } + }); + }); + checkbox.addEventListener("change", toggleProposals); toggleProposals(); // on page load } From 4343d3b50cffdd03c9fe48a23d77f1a5be3901a9 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Tue, 8 Apr 2025 23:47:46 +0200 Subject: [PATCH 12/17] Add TestTagProposalSearch. --- oioioi/problems/tests/test_problemset.py | 69 ++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/oioioi/problems/tests/test_problemset.py b/oioioi/problems/tests/test_problemset.py index f8b13d9fc..2a9527e29 100644 --- a/oioioi/problems/tests/test_problemset.py +++ b/oioioi/problems/tests/test_problemset.py @@ -134,6 +134,75 @@ def test_duplicate_tag_proposal(self): self.assertNotContains(response, 'greedy - {% trans "Show tags proposed by users" %} + {% trans "Include tags proposed by users" %}
From 6308033ea8281234bd5b4474a72739b3ceb709fe Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 9 Apr 2025 00:00:09 +0200 Subject: [PATCH 14/17] Remove needlessly added 'include_proposals_in_search_results'. --- oioioi/problems/views.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/oioioi/problems/views.py b/oioioi/problems/views.py index bbbe04b1a..62d38e3ba 100644 --- a/oioioi/problems/views.py +++ b/oioioi/problems/views.py @@ -492,8 +492,6 @@ def problemset_generate_view(request, page_title, problems, view_type): name__in=request.GET.getlist('difficulty') ).order_by('name') - include_proposals_in_search_results = 'include_proposals' in request.GET - return TemplateResponse( request, 'problems/problemset/problem-list.html', @@ -508,7 +506,6 @@ def problemset_generate_view(request, page_title, problems, view_type): 'difficulty_tags': difficulty_tags, 'show_tags': show_tags, 'show_tag_proposals': show_tag_proposals, - 'include_proposals_in_search_results': include_proposals_in_search_results, 'max_tag_proposals_shown': max_tag_proposals_shown, 'min_proposals_per_tag': min_proposals_per_tag, 'show_statistics': show_statistics, From 7dd2e8bddddcb01a67d27f7e0712d413cd2ff084 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 9 Apr 2025 17:28:23 +0200 Subject: [PATCH 15/17] Change 'include_proposals' to have no value. --- .../static/problems/problemset/control-tag-proposals.js | 4 ++-- oioioi/problems/templates/problems/problemset/base.html | 2 +- oioioi/problems/templatetags/tag.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/oioioi/problems/static/problems/problemset/control-tag-proposals.js b/oioioi/problems/static/problems/problemset/control-tag-proposals.js index d6bdcab2e..50b404d70 100644 --- a/oioioi/problems/static/problems/problemset/control-tag-proposals.js +++ b/oioioi/problems/static/problems/problemset/control-tag-proposals.js @@ -17,7 +17,7 @@ document.addEventListener("DOMContentLoaded", function(){ var includeProposalsInput = document.createElement("input"); includeProposalsInput.type = "hidden"; includeProposalsInput.name = "include_proposals"; - includeProposalsInput.value = "1"; + includeProposalsInput.value = ""; searchForm.appendChild(includeProposalsInput); } }); @@ -29,7 +29,7 @@ document.addEventListener("DOMContentLoaded", function(){ if (checkbox.checked) { event.preventDefault(); var url = new URL(link.href, window.location.origin); - url.searchParams.set("include_proposals", "1"); + url.searchParams.set("include_proposals", ""); window.location.href = url.toString(); } }); diff --git a/oioioi/problems/templates/problems/problemset/base.html b/oioioi/problems/templates/problems/problemset/base.html index 79833f923..5833201bf 100644 --- a/oioioi/problems/templates/problems/problemset/base.html +++ b/oioioi/problems/templates/problems/problemset/base.html @@ -93,7 +93,7 @@
diff --git a/oioioi/problems/templatetags/tag.py b/oioioi/problems/templatetags/tag.py index 9ba48d664..e1f436d36 100644 --- a/oioioi/problems/templatetags/tag.py +++ b/oioioi/problems/templatetags/tag.py @@ -78,7 +78,7 @@ def aggregated_tag_label(aggregated_tag): name=get_tag_name(tag), cls=full_prefix, amount=str(amount), - href="?" + tag_prefix + "=" + tag.name + "&include_proposals=1", + href="?" + tag_prefix + "=" + tag.name + "&include_proposals=", ) From 4bb44e12da526f6b2aee3efdf2411ce6b53153c2 Mon Sep 17 00:00:00 2001 From: Grzegorz Krawczyk Date: Wed, 9 Apr 2025 18:37:06 +0200 Subject: [PATCH 16/17] Change 'include_proposals' to have value 0 or 1 instead of being present or not present. --- .../problems/problemset/control-tag-proposals.js | 12 +++++------- .../problems/templates/problems/problemset/base.html | 6 +++++- oioioi/problems/templatetags/tag.py | 2 +- oioioi/problems/views.py | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/oioioi/problems/static/problems/problemset/control-tag-proposals.js b/oioioi/problems/static/problems/problemset/control-tag-proposals.js index 50b404d70..45fe90685 100644 --- a/oioioi/problems/static/problems/problemset/control-tag-proposals.js +++ b/oioioi/problems/static/problems/problemset/control-tag-proposals.js @@ -12,13 +12,11 @@ document.addEventListener("DOMContentLoaded", function(){ var searchForm = document.getElementById("problemsite_search-form"); if (searchForm) { searchForm.addEventListener("submit", function(event) { - // If checkbox is checked, add a parameter to tell the server to include algorithm tag proposals + var control_proposals = document.getElementById("control-include_proposals"); if (checkbox.checked) { - var includeProposalsInput = document.createElement("input"); - includeProposalsInput.type = "hidden"; - includeProposalsInput.name = "include_proposals"; - includeProposalsInput.value = ""; - searchForm.appendChild(includeProposalsInput); + control_proposals.value = "1"; + } else { + control_proposals.value = "0"; } }); } @@ -29,7 +27,7 @@ document.addEventListener("DOMContentLoaded", function(){ if (checkbox.checked) { event.preventDefault(); var url = new URL(link.href, window.location.origin); - url.searchParams.set("include_proposals", ""); + url.searchParams.set("include_proposals", "1"); window.location.href = url.toString(); } }); diff --git a/oioioi/problems/templates/problems/problemset/base.html b/oioioi/problems/templates/problems/problemset/base.html index 5833201bf..0feb8e89b 100644 --- a/oioioi/problems/templates/problems/problemset/base.html +++ b/oioioi/problems/templates/problems/problemset/base.html @@ -55,6 +55,10 @@ {% endif %} + {% if show_tags and show_tag_proposals %} + + {% endif %} +