From c8e678ce803f28fc58a23bbd23d54088af1a3501 Mon Sep 17 00:00:00 2001 From: Ethan Lu Date: Thu, 21 May 2020 02:17:46 -0700 Subject: [PATCH 1/2] filtering and stuff --- ;w | 0 database/forms.py | 23 ++++++-- database/views.py | 20 +++---- templates/base.html | 18 ++++++ templates/problem_list.html | 106 +++++++++++++++++++++++++++++++----- 5 files changed, 137 insertions(+), 30 deletions(-) delete mode 100644 ;w diff --git a/;w b/;w deleted file mode 100644 index e69de29..0000000 diff --git a/database/forms.py b/database/forms.py index ae8a6f9..9ddc6b5 100644 --- a/database/forms.py +++ b/database/forms.py @@ -78,17 +78,28 @@ def __init__(self, *args, **kwargs): class ProblemSelector(ModelMultipleChoiceField): def label_from_instance(self, prob): return get_template('prob_card.html').render({'problem': prob}) - +# +#class ProblemSelect(forms.Form): +# problems = ProblemSelector(widget=CheckboxSelectMultiple(), queryset=None) +# def __init__(self, *args, **kwargs): +# super().__init__() +# if 'problems' in kwargs: +# self.fields['problems'].queryset = kwargs['problems'] +# self.helper = FormHelper() +# self.helper.layout = Layout( +# FormActions( +# Field('problems'), +# Submit('to_pdf', 'To PDF', css_class='mx-1'), +# ), +# ) class ProblemSelect(forms.Form): - problems = ProblemSelector(widget=CheckboxSelectMultiple(), queryset=None) + problem_list = forms.CharField() def __init__(self, *args, **kwargs): - super().__init__() - if 'problems' in kwargs: - self.fields['problems'].queryset = kwargs['problems'] + super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.layout = Layout( FormActions( - Field('problems'), + Field('problem_list', type="hidden"), Submit('to_pdf', 'To PDF', css_class='mx-1'), ), ) diff --git a/database/views.py b/database/views.py index 44ba4a6..859e7f3 100644 --- a/database/views.py +++ b/database/views.py @@ -5,6 +5,10 @@ from django.core.exceptions import PermissionDenied from .forms import ProblemForm, RatingForm, ProblemSelect, ProblemSelector from .models import Problem, Rating + + +import json +from django.core.serializers.json import DjangoJSONEncoder from django_tex.shortcuts import render_to_pdf def home(request): @@ -24,21 +28,18 @@ def all_problems(request): if not request.user.is_solver and not request.user.is_staff: raise PermissionDenied if request.method == 'POST': - if "to_pdf" in request.POST: - #submission = ProblemSelect(request.POST) - template_name = 'test.tex' - problem_list = Problem.objects.filter(id__in=request.POST.getlist('problems')).order_by('-creation_time') - context = {'solutions': True, 'problem_list' : problem_list} - return render_to_pdf(request, template_name, context, filename='test.pdf') - elif "filter" in request.POST: - print("") + problem_list = [Problem(**temp) for temp in json.loads(request.POST['problem_list'])] + template_name = 'test.tex' + context = {'solutions': True, 'problem_list' : problem_list} + return render_to_pdf([], template_name, context, filename='test.pdf') else: problem_list = Problem.objects.all().order_by('-creation_time') empty_message = 'There are no problems in the database yet.' context = { 'filter': 0, - 'form': ProblemSelect(problems=problem_list), + 'form': ProblemSelect(), + 'data': json.dumps(list(Problem.objects.values().order_by('-creation_time')), cls = DjangoJSONEncoder), 'empty_message': empty_message, } return render(request, 'problem_list.html', context) @@ -158,4 +159,3 @@ def edit_problem(request, problem_id): form = ProblemForm(instance=problem) return render(request, 'make_problem.html', {'form': form }) - diff --git a/templates/base.html b/templates/base.html index 9e21ab9..ea9306a 100644 --- a/templates/base.html +++ b/templates/base.html @@ -9,6 +9,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/templates/problem_list.html b/templates/problem_list.html index 3e84772..b40845b 100644 --- a/templates/problem_list.html +++ b/templates/problem_list.html @@ -2,6 +2,74 @@ {% load crispy_forms_tags %} {% block content %} +

@@ -22,21 +90,31 @@

{% endif %}

-
-
- Search and Filter (not implemented yet) -
-
+ + + + + + + + + + + + + + + + + + + + + + +
#SubjectTitleProblemSolution
#SubjectTitleProblemSolution
-
-
- {% csrf_token %} - {% crispy form %} -
-
-
-
+ {% crispy form %} -
{% endblock %} From 1a1ffa723837b6c7cab671036c9580f9edfe7bee Mon Sep 17 00:00:00 2001 From: elu00 Date: Thu, 21 May 2020 12:38:45 -0700 Subject: [PATCH 2/2] reduce DOM writes --- database/forms.py | 4 ++-- templates/problem_list.html | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/database/forms.py b/database/forms.py index 9ddc6b5..4e4113d 100644 --- a/database/forms.py +++ b/database/forms.py @@ -97,9 +97,9 @@ class ProblemSelect(forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() + self.helper.attrs={'id': 'selected_problems'} self.helper.layout = Layout( FormActions( - Field('problem_list', type="hidden"), - Submit('to_pdf', 'To PDF', css_class='mx-1'), + Field('problem_list', type="hidden") ), ) diff --git a/templates/problem_list.html b/templates/problem_list.html index b40845b..e489eb0 100644 --- a/templates/problem_list.html +++ b/templates/problem_list.html @@ -25,11 +25,15 @@ }, dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" + "<'row'<'col-lg-4'P><'col-lg-8'tr>>" + - "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>" - /* + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>" + + "<'row'B>", buttons: [ { action: function ( e, dt, node, config ) { + + $('#id_problem_list').val(JSON.stringify(dt.rows( { selected: true } ).data().toArray())); + $('#selected_problems').submit(); + /* var selected = {problem_list: JSON.stringify(dt.rows( { selected: true } ).data().toArray())}; var pdf = $.ajax({ url: window.location, @@ -51,22 +55,20 @@ w.document.close(); } }); - //var pdf = $.post( window.location, selected); + */ }, extend: 'selected', text: 'Export to PDF' } ] - */ }); var dt = $('#problems').DataTable(); - $('#problems').on( 'select.dt', function () { - $('#id_problem_list').val(JSON.stringify(dt.rows( { selected: true } ).data().toArray())); - } ); - $('#problems').on( 'deselect.dt', function () { + /* + $('#submit-id-to_pdf').submit(function () { $('#id_problem_list').val(JSON.stringify(dt.rows( { selected: true } ).data().toArray())); } ); + */ MathJax.typeset() } ); @@ -114,7 +116,7 @@

- {% crispy form %} + {% crispy form %} {% endblock %}