From 90c7b181c160b28231184ebba02746548d153594 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Mon, 17 Aug 2020 20:07:49 +0200 Subject: [PATCH 01/59] =?UTF-8?q?WIP:=20Za=C4=8D=C3=A1tek=20k=C3=B3du=20od?= =?UTF-8?q?evzd=C3=A1v=C3=A1tka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 93 +++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 seminar/views/odevzdavatko.py diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py new file mode 100644 index 00000000..bf4ab0fa --- /dev/null +++ b/seminar/views/odevzdavatko.py @@ -0,0 +1,93 @@ +from django.views.generic import ListView, DetailView +from django.views.generic.base import TemplateView + +from dataclasses import dataclass +import datetime + +import seminar.models as m +from seminar.utils import aktivniResitele, resi_v_rocniku + +# Co chceme? +# - "Tabulku" aktuální řešitelé x zveřejněné problémy, v buňkách počet řešení +# - TabulkaOdevzdanychReseniView +# - Detail konkrétního problému a řešitele -- přehled všech řešení odevzdaných k tomuto problému +# - ReseniProblemuView +# - Detail konkrétního řešení -- všechny soubory, datum, ... +# - DetailReseniView +# +# Taky se může hodit: +# - Tabulka všech řešitelů x všech problémů? + +@dataclass +class SouhrnReseni: + """Dataclass reprezentující data o odevzdaných řešeních pro zobrazení v tabulce.""" + pocet_reseni : int + posledni_odevzdani : datetime.datetime + body : float + + +class TabulkaOdevzdanychReseniView(TemplateView): + template_name = 'TODO' + + def get_context_data(self, *args, **kwargs): + akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... + resitele = resi_v_rocniku(akt_rocnik) + zadane_problemy = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY) + + ctx = dict() + ctx['problemy'] = zadane_problemy + ctx['resitele'] = resitele + + # Zkonstruujeme jednotlivé řádky + # Řádky budou indexované řešiteli a budou obsahovat SouhrnyReseni + # TODO: Tohle se asi nějak dá urychlit / zpřehlednit... + ctx['radky'] = dict() + for resitel in resitele: + ctx['radky'][resitel] = [] + for problem in zadane_problemy: + reseni_k_tomuto_problemu = m.Reseni.objects.filter( + resitele__in=[resitel], # Snad funguje i takhle + hodnoceni__problem__in=[problem], # ditto + ) + .order_by('-cas_doruceni') + pocet_reseni = reseni_k_tomuto_problemu.count() + nejnovejsi = reseni_k_tomuto_problemu.first().cas_doruceni + pocet_bodu = max( + [h.body for h in m.Hodnoceni.objects.filter( + reseni__in=reseni_k_tomuto_problemu, + problem=problem, + ) + ] + ) + ctx['radky'][resitel].append( + SouhrnReseni( + pocet_reseni=pocet_reseni, + posledni_odevzdani=nejnovejsi, + body=pocet_bodu, + ) + return ctx + +class ReseniProblemuView(ListView): + model = m.Reseni + template_name = 'TODO' + + def get_queryset(self): + qs = super().get_queryset() + + + + + +# Přehled všech řešení kvůli debugování + +class SeznamReseniView(ListView): + model = m.Reseni + template_name = 'TODO' + +class SeznamAktualnichReseniView(SeznamReseniView): + def get_queryset(self): + qs = super().get_queryset() + akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... + resitele = resi_v_rocniku(akt_rocnik) + qs = qs.filter(resitele__in=resitele) # Doufám, že tohle najde řešení, která maji alespoň jednoho řešitele řešícího v aktuálním ročníku + return qs From b2539d6a24ee36e47aed84e77c509500580cffe9 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 27 Oct 2020 22:35:36 +0100 Subject: [PATCH 02/59] Fix syntax --- seminar/views/odevzdavatko.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index bf4ab0fa..137f1fc0 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -48,8 +48,7 @@ class TabulkaOdevzdanychReseniView(TemplateView): reseni_k_tomuto_problemu = m.Reseni.objects.filter( resitele__in=[resitel], # Snad funguje i takhle hodnoceni__problem__in=[problem], # ditto - ) - .order_by('-cas_doruceni') + ).order_by('-cas_doruceni') pocet_reseni = reseni_k_tomuto_problemu.count() nejnovejsi = reseni_k_tomuto_problemu.first().cas_doruceni pocet_bodu = max( @@ -65,6 +64,7 @@ class TabulkaOdevzdanychReseniView(TemplateView): posledni_odevzdani=nejnovejsi, body=pocet_bodu, ) + ) return ctx class ReseniProblemuView(ListView): From 1a1eccb7ed5474e3d572a5d72b340c287635f482 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 27 Oct 2020 22:37:03 +0100 Subject: [PATCH 03/59] =?UTF-8?q?Implementace=20zbyl=C3=BDch=20views=20ohl?= =?UTF-8?q?edn=C4=9B=20odevzd=C3=A1v=C3=A1tka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 137f1fc0..0a121e78 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -73,10 +73,27 @@ class ReseniProblemuView(ListView): def get_queryset(self): qs = super().get_queryset() + resitel_id = self.kwargs['resitel'] + if resitel_id is None: + raise ValueError("Nemám řešitele!") + problem_id = self.kwargs['problem'] + if problem_id is None: + raise ValueError("Nemám problém! (To je problém!)") + + resitel = m.Resitel.objects.get(id=resitel_id) + problem = m.Resitel.objects.get(id=problem_id) + qs = qs.filter( + problem__in=[problem], + resitele__in=[resitel], + ) + return qs + + # Kontext automaticky? - - - +class DetailReseniView(DetailView): + model = m.Reseni + template_name = 'TODO' + # To je všechno? Najde se to bude slugem... # Přehled všech řešení kvůli debugování From beba4c5062550f405b8abd10d2aaf5d93c69b97c Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 27 Oct 2020 22:37:27 +0100 Subject: [PATCH 04/59] =?UTF-8?q?P=C5=99id=C3=A1n=C3=AD=20do=20URLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/urls.py | 5 +++++ seminar/views/__init__.py | 1 + 2 files changed, 6 insertions(+) diff --git a/seminar/urls.py b/seminar/urls.py index ba74dc04..fde4cadb 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -157,5 +157,10 @@ urlpatterns = [ # org_member_required(views.OrganizatorAutocomplete.as_view()), # name='seminar_autocomplete_organizator') + path('temp/reseni/', views.TabulkaOdevzdanychReseniView.as_view()), + path('temp/reseni///', views.ReseniProblemuView.as_view()), + path('temp/reseni/', views.DetailReseniView.as_view()), + path('temp/reseni/all', views.SeznamReseniView.as_view()), + path('temp/reseni/akt', views.SeznamAktualnichReseniView.as_view()), ] diff --git a/seminar/views/__init__.py b/seminar/views/__init__.py index 976a34fe..6e5f1eae 100644 --- a/seminar/views/__init__.py +++ b/seminar/views/__init__.py @@ -1,2 +1,3 @@ from .views_all import * from .autocomplete import * +from .odevzdavatko import * From 797256fcfed7398090cc1bd1578e3b138691c9b9 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 27 Oct 2020 23:50:05 +0100 Subject: [PATCH 05/59] =?UTF-8?q?Patch,=20kdy=C5=BE=20jsou=20bez=20=C5=99e?= =?UTF-8?q?=C5=A1en=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 0a121e78..effb1135 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -50,14 +50,18 @@ class TabulkaOdevzdanychReseniView(TemplateView): hodnoceni__problem__in=[problem], # ditto ).order_by('-cas_doruceni') pocet_reseni = reseni_k_tomuto_problemu.count() - nejnovejsi = reseni_k_tomuto_problemu.first().cas_doruceni - pocet_bodu = max( - [h.body for h in m.Hodnoceni.objects.filter( - reseni__in=reseni_k_tomuto_problemu, - problem=problem, - ) - ] - ) + if pocet_reseni > 0: + nejnovejsi = reseni_k_tomuto_problemu.first().cas_doruceni + pocet_bodu = max( + [h.body for h in m.Hodnoceni.objects.filter( + reseni__in=reseni_k_tomuto_problemu, + problem=problem, + ) + ] + ) + else: + nejnovejsi = None + pocet_bodu = None ctx['radky'][resitel].append( SouhrnReseni( pocet_reseni=pocet_reseni, From 8145932942a9ce4c1cbce8419c0364f6b25becc4 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 27 Oct 2020 23:54:14 +0100 Subject: [PATCH 06/59] =?UTF-8?q?=C3=9Aprava=20koment=C3=A1=C5=99e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index effb1135..ad79f1d8 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -97,7 +97,7 @@ class ReseniProblemuView(ListView): class DetailReseniView(DetailView): model = m.Reseni template_name = 'TODO' - # To je všechno? Najde se to bude slugem... + # To je všechno? Najde se to podle pk... # Přehled všech řešení kvůli debugování From fd754394c22346a1400c75940d59678e952f61a1 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 27 Oct 2020 23:54:35 +0100 Subject: [PATCH 07/59] =?UTF-8?q?P=C5=99id=C3=A1ny=20templates=20(hodn?= =?UTF-8?q?=C4=9B=20z=C3=A1kladn=C3=AD,=20jen=20abych=20v=C4=9Bd=C4=9Bl,?= =?UTF-8?q?=20=C5=BEe=20to=20n=C4=9Bco=20d=C4=9Bl=C3=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../seminar/odevzdavatko/detail.html | 7 ++++++ .../seminar/odevzdavatko/seznam.html | 11 ++++++++++ .../seminar/odevzdavatko/tabulka.html | 22 +++++++++++++++++++ seminar/views/odevzdavatko.py | 8 +++---- 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 seminar/templates/seminar/odevzdavatko/detail.html create mode 100644 seminar/templates/seminar/odevzdavatko/seznam.html create mode 100644 seminar/templates/seminar/odevzdavatko/tabulka.html diff --git a/seminar/templates/seminar/odevzdavatko/detail.html b/seminar/templates/seminar/odevzdavatko/detail.html new file mode 100644 index 00000000..4238c848 --- /dev/null +++ b/seminar/templates/seminar/odevzdavatko/detail.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} + +{% block content %} + +{{ object }} + +{% endblock %} diff --git a/seminar/templates/seminar/odevzdavatko/seznam.html b/seminar/templates/seminar/odevzdavatko/seznam.html new file mode 100644 index 00000000..0fc26df4 --- /dev/null +++ b/seminar/templates/seminar/odevzdavatko/seznam.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block content %} + +
    + {% for obj in object_list %} +
  • {{ obj }} + {% endfor %} +
+ +{% endblock %} diff --git a/seminar/templates/seminar/odevzdavatko/tabulka.html b/seminar/templates/seminar/odevzdavatko/tabulka.html new file mode 100644 index 00000000..893efa6d --- /dev/null +++ b/seminar/templates/seminar/odevzdavatko/tabulka.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} + +{% block content %} + + + + {# Prázdná buňka v levém horním rohu #} + {% for p in problemy %} + + {% endfor %} + + {% for resitel, vysledky in radky %} + + + {% for vysl in vysledky %} + + {% endfor %} + + {% endfor %} +
{{ p }}
{{ resitel } {{ vysl.pocet_reseni }} řešení, dohromady za {{ vysl.body }}, nejnovější z {{ vysl.posledni_odevzdani }}
+ +{% endblock %} diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index ad79f1d8..b53b1913 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -27,7 +27,7 @@ class SouhrnReseni: class TabulkaOdevzdanychReseniView(TemplateView): - template_name = 'TODO' + template_name = 'seminar/odevzdavatko/tabulka.html' def get_context_data(self, *args, **kwargs): akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... @@ -73,7 +73,7 @@ class TabulkaOdevzdanychReseniView(TemplateView): class ReseniProblemuView(ListView): model = m.Reseni - template_name = 'TODO' + template_name = 'seminar/odevzdavatko/seznam.html' def get_queryset(self): qs = super().get_queryset() @@ -96,14 +96,14 @@ class ReseniProblemuView(ListView): class DetailReseniView(DetailView): model = m.Reseni - template_name = 'TODO' + template_name = 'seminar/odevzdavatko/detail.html' # To je všechno? Najde se to podle pk... # Přehled všech řešení kvůli debugování class SeznamReseniView(ListView): model = m.Reseni - template_name = 'TODO' + template_name = 'seminar/odevzdavatko/seznam.html' class SeznamAktualnichReseniView(SeznamReseniView): def get_queryset(self): From f07db53c27c10c02190e785f65b8fabd0d0d5869 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 28 Oct 2020 00:32:09 +0100 Subject: [PATCH 08/59] =?UTF-8?q?Kop=C3=ADrov=C3=A1n=C3=AD=20je=20=C4=8Das?= =?UTF-8?q?t=C3=BDm=20zdrojem...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index b53b1913..92b4cc99 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -85,7 +85,7 @@ class ReseniProblemuView(ListView): raise ValueError("Nemám problém! (To je problém!)") resitel = m.Resitel.objects.get(id=resitel_id) - problem = m.Resitel.objects.get(id=problem_id) + problem = m.Problem.objects.get(id=problem_id) qs = qs.filter( problem__in=[problem], resitele__in=[resitel], From 4cfe76bb3ae51b1bb71140b6cd344bbad9f9999f Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 28 Oct 2020 00:32:20 +0100 Subject: [PATCH 09/59] =?UTF-8?q?=C3=9Aprava=20koment=C3=A1=C5=99e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ono to dělá to, co jsem tam napsal... --- seminar/views/odevzdavatko.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 92b4cc99..3f715bee 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -110,5 +110,5 @@ class SeznamAktualnichReseniView(SeznamReseniView): qs = super().get_queryset() akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... resitele = resi_v_rocniku(akt_rocnik) - qs = qs.filter(resitele__in=resitele) # Doufám, že tohle najde řešení, která maji alespoň jednoho řešitele řešícího v aktuálním ročníku + qs = qs.filter(resitele__in=resitele) # FIXME: Najde řešení i ze starých ročníků, která odevzdal alespoň jeden aktuální řešitel return qs From 568ec372d7212c6ae03adb00f8140aec68c6ab7a Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Tue, 3 Nov 2020 22:23:02 +0100 Subject: [PATCH 10/59] CastNode | Fix missing property. --- vue_frontend/src/components/CastNode.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/vue_frontend/src/components/CastNode.vue b/vue_frontend/src/components/CastNode.vue index 146bf5de..d7e3936f 100644 --- a/vue_frontend/src/components/CastNode.vue +++ b/vue_frontend/src/components/CastNode.vue @@ -25,6 +25,7 @@ export default { props: { item: Object, editorShow: Boolean, + editorMode: Boolean, create: Boolean, where: String, refnode: Object From 514eddcf017f178f05dc73e75e5fcec489da668c Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Tue, 10 Nov 2020 22:06:51 +0100 Subject: [PATCH 11/59] Treenode Editor | pridano mazani textnode a castnode. Priprava na autocomplete problemu, zatim pouze cast API. --- mamweb/routers.py | 1 + seminar/migrations/0090_auto_20201110_1958.py | 19 +++++++++++++++ seminar/models.py | 2 +- seminar/views/views_rest.py | 5 +++- seminar/viewsets.py | 19 +++++++++++++++ vue_frontend/src/components/CastNode.vue | 23 +++++++++++++++++-- vue_frontend/src/components/TextNode.vue | 18 +++++++++++++-- vue_frontend/src/components/TreeNodeRoot.vue | 2 ++ vue_frontend/vue.config.js | 5 ++-- 9 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 seminar/migrations/0090_auto_20201110_1958.py diff --git a/mamweb/routers.py b/mamweb/routers.py index f2a172cb..5a75d39d 100644 --- a/mamweb/routers.py +++ b/mamweb/routers.py @@ -7,4 +7,5 @@ router.register(r'ulohavzoraknode', vs.UlohaVzorakNodeViewSet,basename='ulohavzo router.register(r'text', vs.TextViewSet) router.register(r'textnode', vs.TextNodeViewSet) router.register(r'castnode', vs.CastNodeViewSet) +router.register(r'problem', vs.ProblemViewSet, basename='problem') diff --git a/seminar/migrations/0090_auto_20201110_1958.py b/seminar/migrations/0090_auto_20201110_1958.py new file mode 100644 index 00000000..97949f58 --- /dev/null +++ b/seminar/migrations/0090_auto_20201110_1958.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.12 on 2020-11-10 18:58 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0089_cislo_datum_preddeadline'), + ] + + operations = [ + migrations.AlterField( + model_name='textnode', + name='text', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Text', verbose_name='text'), + ), + ] diff --git a/seminar/models.py b/seminar/models.py index cf8cd6a9..db9f67f9 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -1475,7 +1475,7 @@ class TextNode(TreeNode): verbose_name = 'Text (Node)' verbose_name_plural = 'Text (Node)' text = models.ForeignKey(Text, - on_delete=models.PROTECT, + on_delete=models.CASCADE, verbose_name = 'text') def aktualizuj_nazev(self): diff --git a/seminar/views/views_rest.py b/seminar/views/views_rest.py index aa3fca55..739c57c9 100644 --- a/seminar/views/views_rest.py +++ b/seminar/views/views_rest.py @@ -11,7 +11,10 @@ class TextSerializer(serializers.ModelSerializer): model = m.Text fields = '__all__' - +class ProblemSerializer(serializers.ModelSerializer): + class Meta: + model = m.Problem + fields = '__all__' class UlohaVzorakNodeSerializer(serializers.ModelSerializer): class Meta: diff --git a/seminar/viewsets.py b/seminar/viewsets.py index 8c83c067..67b13b3d 100644 --- a/seminar/viewsets.py +++ b/seminar/viewsets.py @@ -1,4 +1,8 @@ from rest_framework import viewsets,filters +from rest_framework import status +from rest_framework.response import Response +from django.core.exceptions import PermissionDenied + from . import models as m from . import views @@ -66,6 +70,14 @@ class CastNodeViewSet(ReadWriteSerializerMixin,viewsets.ModelViewSet): write_serializer_class = views.CastNodeSerializer create_serializer_class = views.CastNodeCreateSerializer + def destroy(self, request, *args, **kwargs): + obj = self.get_object() + print(obj) + if obj.first_child is None: + return super().destroy(request,*args,**kwargs) + raise PermissionDenied('Nelze smazat CastNode, který má děti!') + + class UlohaVzorakNodeViewSet(viewsets.ModelViewSet): serializer_class = views.UlohaVzorakNodeSerializer @@ -75,3 +87,10 @@ class UlohaVzorakNodeViewSet(viewsets.ModelViewSet): if nazev is not None: queryset = queryset.filter(nazev__contains=nazev) return queryset + +class ProblemViewSet(viewsets.ModelViewSet): + serializer_class = views.ProblemSerializer + + def get_queryset(self): + queryset = m.Problem.objects.all() + return queryset diff --git a/vue_frontend/src/components/CastNode.vue b/vue_frontend/src/components/CastNode.vue index 146bf5de..35390136 100644 --- a/vue_frontend/src/components/CastNode.vue +++ b/vue_frontend/src/components/CastNode.vue @@ -7,7 +7,9 @@
-

{{ currentText }}

+

{{ currentText }}

+ +
@@ -25,6 +27,7 @@ export default { props: { item: Object, editorShow: Boolean, + editorMode: Boolean, create: Boolean, where: String, refnode: Object @@ -76,11 +79,27 @@ export default { } this.editorShow = false; + }, + deleteCast: function() { + console.log("Deleting cast"); + axios.delete('/api/castnode/'+this.item.node.id+'/' + ).then( () => { + this.loading = false; + this.$root.$emit('updateData',"castNode delete update"); + }).catch(e => { + this.errors.push(e); + }); } - } + } } diff --git a/vue_frontend/src/components/TextNode.vue b/vue_frontend/src/components/TextNode.vue index aaa02fdb..b565d229 100644 --- a/vue_frontend/src/components/TextNode.vue +++ b/vue_frontend/src/components/TextNode.vue @@ -23,7 +23,8 @@ @@ -162,6 +163,16 @@ export default { } this.editorShow = false; }, + deleteText: function() { + console.log("Deleting text"); + axios.delete('/api/textnode/'+this.item.node.id+'/' + ).then( () => { + this.loading = false; + this.$root.$emit('updateData',"textNode delete update"); + }).catch(e => { + this.errors.push(e); + }); + }, } } @@ -169,6 +180,9 @@ export default { diff --git a/vue_frontend/src/components/TreeNodeRoot.vue b/vue_frontend/src/components/TreeNodeRoot.vue index 20cf47ac..674d0fda 100644 --- a/vue_frontend/src/components/TreeNodeRoot.vue +++ b/vue_frontend/src/components/TreeNodeRoot.vue @@ -3,6 +3,7 @@
Loading...
+
@@ -11,6 +12,7 @@ +
diff --git a/vue_frontend/vue.config.js b/vue_frontend/vue.config.js index 8d61b6ce..e4fc61ce 100644 --- a/vue_frontend/vue.config.js +++ b/vue_frontend/vue.config.js @@ -15,7 +15,7 @@ const pages = { module.exports = { pages: pages, filenameHashing: false, - productionSourceMap: false, + productionSourceMap: true, publicPath: process.env.NODE_ENV === 'production' ? '/static/seminar/vue/' : 'http://localhost:8080/', @@ -23,6 +23,7 @@ module.exports = { chainWebpack: config => { + config.optimization.minimize(false) config.optimization .splitChunks({ cacheGroups: { @@ -33,7 +34,7 @@ module.exports = { priority: 1 }, }, - }); + }).minimize(false); Object.keys(pages).forEach(page => { config.plugins.delete(`html-${page}`); From 00720e1e73b6ee9c3ef0efae733eacbd9508c08d Mon Sep 17 00:00:00 2001 From: "Tomas \"Jethro\" Pokorny" Date: Tue, 17 Nov 2020 20:18:40 +0100 Subject: [PATCH 12/59] TreeNode editor | Priprava na vybirani vzoraku. --- seminar/viewsets.py | 11 +++++++++++ vue_frontend/src/components/UlohaVzorakNode.vue | 11 ++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/seminar/viewsets.py b/seminar/viewsets.py index 67b13b3d..9d600375 100644 --- a/seminar/viewsets.py +++ b/seminar/viewsets.py @@ -93,4 +93,15 @@ class ProblemViewSet(viewsets.ModelViewSet): def get_queryset(self): queryset = m.Problem.objects.all() + ucel = self.request.query_params.get('ucel',None) + rocnik = self.request.query_params.get('rocnik',None) + tema = self.request.query_params.get('tema',None) + + if rocnik is not None: + queryset = queryset.filter(rocnik=rocnik) + + #if tema is not None: + + + return queryset diff --git a/vue_frontend/src/components/UlohaVzorakNode.vue b/vue_frontend/src/components/UlohaVzorakNode.vue index 753a5cef..35804198 100644 --- a/vue_frontend/src/components/UlohaVzorakNode.vue +++ b/vue_frontend/src/components/UlohaVzorakNode.vue @@ -1,7 +1,8 @@