Merge branch 'develop' into test
This commit is contained in:
commit
5da1fe6db4
6 changed files with 3 additions and 156 deletions
|
@ -109,9 +109,7 @@ INSTALLED_APPS = (
|
|||
'dal',
|
||||
'dal_select2',
|
||||
|
||||
'fluent_comments',
|
||||
'crispy_forms',
|
||||
'threadedcomments',
|
||||
'django_comments',
|
||||
|
||||
'django.contrib.flatpages',
|
||||
|
@ -221,12 +219,6 @@ REST_FRAMEWORK = {
|
|||
'PAGE_SIZE': 100
|
||||
}
|
||||
|
||||
# Comments
|
||||
|
||||
COMMENTS_APP = 'fluent_comments'
|
||||
#COMMENTS_APP = 'threadedcomments'
|
||||
FLUENT_COMMENTS_EXCLUDE_FIELDS = ('name', 'email', 'url', 'title')
|
||||
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
# Create file 'django.secret' in every install (it is not kept in git)
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
<script src="{% static 'js/jquery-1.11.1.js' %}"></script>
|
||||
<script src="{% static 'js/jquery-3.4.1.js' %}"></script>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="{% static 'fluent_comments/css/ajaxcomments.css' %}" />
|
||||
<script type="text/javascript" src="{% static 'fluent_comments/js/ajaxcomments.js' %}"></script>
|
||||
|
||||
{# nastavení MathJaxu, aby nahrazoval i matiku obalenou jednoduchými $ #}
|
||||
<script type="text/x-mathjax-config">
|
||||
MathJax.Hub.Config({
|
||||
|
|
|
@ -47,7 +47,6 @@ urlpatterns = [
|
|||
|
||||
# Comments (interni i verejne)
|
||||
path('comments_dj/', include('django_comments.urls')),
|
||||
path('comments_fl/', include('fluent_comments.urls')),
|
||||
|
||||
# REST API
|
||||
path('api/', include(router.urls)),
|
||||
|
|
|
@ -23,9 +23,9 @@
|
|||
</tr>
|
||||
{% for hodn in hodnoceni %}
|
||||
<tr>
|
||||
<td>{{ hodn.reseni.cas_doruceni | date:"d.m.Y H:i"}}</td>
|
||||
<td><a href="{% url 'odevzdavatko_resitel_reseni' hodn.reseni.id %}">{{ hodn.reseni.cas_doruceni | date:"d.m.Y H:i"}}</a></td>
|
||||
<td id="problem"><span title="{{ hodn.problem.nazev }}">{{ hodn.problem.nazev | zkrat_nazev_problemu }}</span></td>
|
||||
<td><a href="{% url 'odevzdavatko_resitel_reseni' hodn.reseni.id %}">{{ hodn.body|default_if_none:"---" }}</a></td>
|
||||
<td>{{ hodn.body|default_if_none:"---" }}</td>
|
||||
<td>{{ hodn.reseni.cas_doruceni | deadline_html }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
|
|
@ -34,9 +34,6 @@ django-webpack-loader
|
|||
django-rest-polymorphic
|
||||
|
||||
# Comments
|
||||
akismet==1.0.1
|
||||
django-fluent-comments==2.1
|
||||
django-threadedcomments==1.2
|
||||
django-contrib-comments==1.9.0
|
||||
|
||||
# debug tools/extensions
|
||||
|
|
|
@ -68,144 +68,6 @@ class ObalkovaniView(generic.ListView):
|
|||
context['cislo'] = self.cislo
|
||||
return context
|
||||
|
||||
class TNLData(object):
|
||||
def __init__(self,anode,parent=None, index=None):
|
||||
self.node = anode
|
||||
self.sernode = vr.TreeNodeSerializer(anode)
|
||||
self.children = []
|
||||
self.parent = parent
|
||||
self.tema_in_path = False
|
||||
self.index = index
|
||||
|
||||
if parent:
|
||||
self.tema_in_path = parent.tema_in_path
|
||||
if isinstance(anode, m.TemaVCisleNode):
|
||||
self.tema_in_path = True
|
||||
|
||||
def add_edit_options(self):
|
||||
self.deletable = tnltt.deletable(self)
|
||||
self.editable_siblings = tnltt.editableSiblings(self)
|
||||
self.editable_children = tnltt.editableChildren(self)
|
||||
self.text_only_subtree = tnltt.textOnlySubtree(self)
|
||||
self.can_podvesit_za = tnltt.canPodvesitZa(self)
|
||||
self.can_podvesit_pred = tnltt.canPodvesitPred(self)
|
||||
self.appendable_children = tnltt.appendableChildren(self)
|
||||
print("appChld",self.appendable_children)
|
||||
if self.parent:
|
||||
self.appendable_siblings = tnltt.appendableChildren(self.parent)
|
||||
else:
|
||||
self.appendable_siblings = []
|
||||
@classmethod
|
||||
def public_above(cls, anode):
|
||||
""" Returns output of verejne for closest Rocnik, Cislo or Problem above.
|
||||
(All of them have method verejne.)"""
|
||||
parent = anode # chceme začít už od konkrétního node včetně
|
||||
while True:
|
||||
rocnik = isinstance(parent, s.RocnikNode)
|
||||
cislo = isinstance(parent, s.CisloNode)
|
||||
uloha = (isinstance(parent, s.UlohaVzorakNode) or
|
||||
isinstance(parent, s.UlohaZadaniNode))
|
||||
tema = isinstance(parent, s.TemaVCisleNode)
|
||||
|
||||
if (rocnik or cislo or uloha or tema) or parent==None:
|
||||
break
|
||||
else:
|
||||
parent = treelib.get_parent(parent)
|
||||
if rocnik:
|
||||
return parent.rocnik.verejne()
|
||||
elif cislo:
|
||||
return parent.cislo.verejne()
|
||||
elif uloha:
|
||||
return parent.uloha.verejne()
|
||||
elif tema:
|
||||
return parent.tema.verejne()
|
||||
elif None:
|
||||
print("Existuje TreeNode, který není pod číslem, ročníkem, úlohou"
|
||||
"ani tématem. {}".format(anode))
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def all_public_children(cls, anode):
|
||||
for ch in treelib.all_children(anode):
|
||||
if TNLData.public_above(ch):
|
||||
yield ch
|
||||
else:
|
||||
continue
|
||||
|
||||
@classmethod
|
||||
def from_treenode(cls, anode, user, parent=None, index=None):
|
||||
if TNLData.public_above(anode) or user.has_perm('auth.org'):
|
||||
out = cls(anode,parent,index)
|
||||
else:
|
||||
raise PermissionDenied()
|
||||
|
||||
if user.has_perm('auth.org'):
|
||||
enum_children = enumerate(treelib.all_children(anode))
|
||||
else:
|
||||
enum_children = enumerate(TNLData.all_public_children(anode))
|
||||
|
||||
for (idx,ch) in enum_children:
|
||||
outitem = cls.from_treenode(ch, user, out, idx)
|
||||
out.children.append(outitem)
|
||||
out.add_edit_options()
|
||||
return out
|
||||
|
||||
@classmethod
|
||||
def from_tnldata_list(cls, tnllist):
|
||||
"""Vyrobíme virtuální TNL, který nemá obsah, ale má za potomky všechna zadaná TNLData"""
|
||||
result = cls(None)
|
||||
for idx, tnl in enumerate(tnllist):
|
||||
result.children.append(tnl)
|
||||
tnl.parent = result
|
||||
tnl.index = idx
|
||||
result.add_edit_options()
|
||||
return result
|
||||
|
||||
@classmethod
|
||||
def filter_treenode(cls, treenode, predicate):
|
||||
tnll = cls._filter_treenode_recursive(treenode, predicate) # TreeNodeList List :-)
|
||||
return TNLData.from_tnldata_list(tnll)
|
||||
|
||||
@classmethod
|
||||
def _filter_treenode_recursive(cls, treenode, predicate):
|
||||
if predicate(treenode):
|
||||
return [cls.from_treenode(treenode)]
|
||||
else:
|
||||
found = []
|
||||
for tn in treelib.all_children(treenode):
|
||||
result = cls.filter_treenode(tn, predicate)
|
||||
# Result by v tuhle chvíli měl být seznam TNLDat odpovídající treenodům, jež matchnuly predikát.
|
||||
for tnl in result:
|
||||
found.append(tnl)
|
||||
return found
|
||||
|
||||
def to_json(self):
|
||||
#self.node = anode
|
||||
#self.children = []
|
||||
#self.parent = parent
|
||||
#self.tema_in_path = False
|
||||
#self.index = index
|
||||
out = {}
|
||||
out['node'] = self.sernode.data
|
||||
out['children'] = [n.to_json() for n in self.children]
|
||||
out['tema_in_path'] = self.tema_in_path
|
||||
out['index'] = self.index
|
||||
out['deletable'] = self.deletable
|
||||
out['editable_siblings'] = self.editable_siblings
|
||||
out['editable_children'] = self.editable_children
|
||||
out['text_only_subtree'] = self.text_only_subtree
|
||||
out['can_podvesit_za'] = self.can_podvesit_za
|
||||
out['can_podvesit_pod'] = self.can_podvesit_pred
|
||||
out['appendable_children'] = self.appendable_children
|
||||
out['appendable_siblings'] = self.appendable_siblings
|
||||
|
||||
return out
|
||||
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return("TNL({})".format(self.node))
|
||||
|
||||
|
||||
# FIXME: Pozor, níž je ještě jeden ProblemView!
|
||||
#class ProblemView(generic.DetailView):
|
||||
|
@ -749,7 +611,7 @@ class ClankyResitelView(generic.ListView):
|
|||
queryset = []
|
||||
skupiny_clanku = group_by_rocnik(clanky)
|
||||
for skupina in skupiny_clanku:
|
||||
skupina.sort(key=lambda clanek: clanek.kod_v_rocniku())
|
||||
skupina.sort(key=lambda clanek: clanek.kod_v_rocniku)
|
||||
for clanek in skupina:
|
||||
queryset.append(clanek)
|
||||
return queryset
|
||||
|
|
Loading…
Reference in a new issue