Browse Source

Priprava GUI, chybi operace pro presun mezi vrstvami.

export_seznamu_prednasek
parent
commit
49b517bef0
  1. 29
      mamweb/static/css/mamweb-dev.css
  2. 101
      seminar/templates/seminar/treenode_recursive.html
  3. 124
      seminar/templatetags/treenodes.py
  4. 25
      seminar/views/views_all.py

29
mamweb/static/css/mamweb-dev.css

@ -0,0 +1,29 @@
.pink {
background-color: #ffc0cb;
}
div.borderized {
border-style: solid;
border-radius: 5px;
padding: 5px;
padding-right: 20px;
}
div.tnmenu {
float: right;
margin-right: 0px;
}
div.parent {
border-width: 2px;
}
div.children {
border-width: 1px;
}
div.node_type {
background-color: #d4d4d4;
}

101
seminar/templates/seminar/treenode_recursive.html

@ -2,11 +2,19 @@
{# <b>{{depth}}</b> #} {# <b>{{depth}}</b> #}
<div class="borderized parent"> <div class="borderized parent">
<div class="node_type"> <div class="node_type">
{{obj.node}} {{obj.node}}
{% if obj.node|deletable %}
<button>Smazat</button> <button>Smazat</button>
<button>O úroveň výš</button> {% endif %}
<button>Podvěsit pod ^</button> {% if not obj.children and obj.node|appendableChildren %}
{% endif %}
</div>
{% if obj|editableSiblings %}
<div class="node_move">
<button>Odvěsit na úroveň {{obj.parent.node}}</button>
<button>Podvěsit pod předchozí</button>
</div> </div>
{% endif %}
{% if obj.node|isRocnik %} {% if obj.node|isRocnik %}
<h{{depth}}> Ročník {{obj.node.rocnik}} </h{{depth}}> <h{{depth}}> Ročník {{obj.node.rocnik}} </h{{depth}}>
{% elif obj.node|isCislo %} {% elif obj.node|isCislo %}
@ -22,38 +30,63 @@
{% else %} {% else %}
Objekt jiného typu {{obj.node}} Objekt jiného typu {{obj.node}}
{% endif %} {% endif %}
{%if obj.children %}
{%if obj.children %}
<div class="borderized children"> <div class="borderized children">
<div class="pink">Přidat před
<select>
<option value="TextNode">Text</option>
<option value="NadpisNode">Nadpis</option>
<option value="UlohaNode">Úloha</option>
<option value="TemaNode">Téma</option>
</select>
<button>Přídat</button>
</div>
{%for ch in obj.children %}
{%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %}
{%include template_name%}
{%endwith%}
<div class="pink">
{% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %}
<select>
<option value="TextNode">Text</option>
<option value="NadpisNode">Nadpis</option>
<option value="UlohaNode">Úloha</option>
<option value="TemaNode">Téma</option>
</select>
<button>Přídat na stejnou úroveň</button>
<button>Přídat jako syna</button>
&nbsp;&nbsp;&nbsp;
{% if not forloop.last %}
<button>Prohodit ^ a v</button>
{% endif %}
</div> {# ----------- Přidáváme před prvního syna -------- #}
{%endfor%} {% if obj.node|appendableChildren %}
<div class="pink">Přidat před
<select>
{% for chld in obj.node|appendableChildren %}
<option value="{{chld.0}}">{{chld.1}}</option>
{% endfor %}
</select>
<button>Přídat</button>
</div>
{% endif %}{# appendablebleChildren #}
{# ----------- /Přidáváme před -------- #}
{%for ch in obj.children %}
{# ----------- Vypisujeme podstrom ----------#}
{%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %}
{%include template_name%}
{%endwith%}
{# ----------- /Vypisujeme podstrom ---------#}
{# ----------- Přidáváme mezi syny / za posledního -------- #}
{% if obj.node|appendableChildren %}
<div class="pink">
{% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %}
<select>
{% for chld in obj.node|appendableChildren %}
<option value="{{chld.0}}">{{chld.1}}</option>
{% endfor %}
</select>
<button>Přídat</button>
</div>
{% endif %}{# appendablebleChildren #}
{# ----------- /Přidáváme mezi syny / za posledního -------- #}
<div class="pink">
{% if not forloop.last and ch|editableSiblings %}
<button>Prohodit ^ a v</button>
{% endif %}
</div>
{% empty %}
{# ----------- Přidáváme prvního syna -------- #}
{% if obj.node|appendableChildren %}
<div class="pink">
Přidat jako syna
<select>
{% for chld in obj.node|appendableChildren %}
<option value="{{chld.0}}">{{chld.1}}</option>
{% endfor %}
</select>
<button>Přidat</button>
</div>
{% endif %}
{# ----------- /Přidáváme prvního syna -------- #}
{% endfor %}
</div> </div>
{%endif%} {%endif%}
</div> </div>

124
seminar/templatetags/treenodes.py

@ -1,4 +1,5 @@
from django import template from django import template
from enum import Enum
import seminar.models as m import seminar.models as m
register = template.Library() register = template.Library()
@ -18,45 +19,144 @@ def nodeType(value):
@register.filter @register.filter
def isRocnik(value): def isRocnik(value):
return isinstance(value, m.RocnikNode) return isinstance(value, m.RocnikNode)
@register.filter @register.filter
def isCislo(value): def isCislo(value):
return isinstance(value, m.CisloNode) return isinstance(value, m.CisloNode)
@register.filter @register.filter
def isCast(value): def isCast(value):
return isinstance(value, m.CastNode) return isinstance(value, m.CastNode)
@register.filter @register.filter
def isText(value): def isText(value):
return isinstance(value, m.TextNode) return isinstance(value, m.TextNode)
@register.filter @register.filter
def isTemaVCisle(value): def isTemaVCisle(value):
return isinstance(value, m.TemaVCisleNode) return isinstance(value, m.TemaVCisleNode)
@register.filter @register.filter
def isKonfera(value): def isKonfera(value):
return isinstance(value, m.KonferaNode) return isinstance(value, m.KonferaNode)
@register.filter @register.filter
def isClanek(value): def isClanek(value):
return isinstance(value, m.ClanekNode) return isinstance(value, m.ClanekNode)
@register.filter @register.filter
def isUlohaVzorak(value): def isUlohaVzorak(value):
return isinstance(value, m.UlohaVzorakNode) return isinstance(value, m.UlohaVzorakNode)
@register.filter @register.filter
def isUlohaZadani(value): def isUlohaZadani(value):
return isinstance(value, m.UlohaZadaniNode) return isinstance(value, m.UlohaZadaniNode)
@register.filter @register.filter
def isPohadka(value): def isPohadka(value):
return isinstance(value, m.PohadkaNode) return isinstance(value, m.PohadkaNode)
@register.filter
def isReseni(value):
return False
# return isinstance(value, m.OtisteneReseniNode)
@register.filter
def isOrgText(value):
return False
# return isinstance(value, m.OrgTextNode)
###
#@register.filter
#def podvesitelneNody(value):
# if isText()
@register.filter
def deletable(value):
if isTemaVCisle(value):
return True
if isOrgText(value):
return True
if isReseni(value):
return True
if isUlohaZadani(value):
return True
if isUlohaVzorak(value):
return True
if isCast(value):
return True
if isText(value):
return True
return False
@register.filter
def editableSiblings(value):
if isCast(value.node):
return True
if isText(value.node):
return True
if isReseni(value.node) and value.tema_in_path:
return True
if isUlohaZadani(value.node) and value.tema_in_path:
return True
if isUlohaVzorak(value.node) and value.tema_in_path:
return True
return False
@register.filter
def editableChildren(value):
if isRocnik(value.node):
return False
if isCislo(value.node):
return False
if isText(value.node):
return False
return True
class NodeTypes(Enum):
ROCNIK = ('rocnikNode','Ročník')
CISLO = ('cisloNode', 'Číslo')
CAST = ('castNode', 'Část')
TEXT = ('textNode', 'Text')
TEMAVCISLE = ('temaVCisleNode', 'Téma v čísle')
RESENI = ('reseniNode','Řešení')
ULOHAZADANI = ('ulohaZadaniNode','Zadání')
ULOHAVZORAK = ('ulohaVzorakNode','Vzorák')
POHADKA = ('pohadkaNode','Pohádka')
ORGTEXT = ('orgText','Orgtext')
@register.filter
def appendableChildren(value):
if isTemaVCisle(value):
return (NodeTypes.RESENI.value,
NodeTypes.ULOHAZADANI.value,
NodeTypes.ULOHAVZORAK.value,
NodeTypes.CAST.value,
NodeTypes.TEXT.value,
)
if isOrgText(value) or isReseni(value) or isUlohaZadani(value) or isUlohaVzorak(value):
return (NodeTypes.CAST.value,
NodeTypes.TEXT.value,
)
if isCast(value):
return appendableChildren(value.parent)
return None
#@register.filter
#def is(value):
# return
#
# NodeTypes..value,
#@register.filter #@register.filter
#def isOtisteneReseniNode(value): #def is(value):
# return isinstance(value, m.OtisteneReseniNode) # return

25
seminar/views/views_all.py

@ -17,6 +17,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.db import transaction from django.db import transaction
import seminar.models as s import seminar.models as s
import seminar.models as m
from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
from seminar import utils,treelib from seminar import utils,treelib
@ -84,17 +85,25 @@ class ObalkovaniView(generic.ListView):
return context return context
class TNLData(object): class TNLData(object):
def __init__(self,anode): def __init__(self,anode,parent=None):
self.node = anode self.node = anode
self.children = [] self.children = []
self.parent = parent
self.tema_in_path = False
if parent:
self.tema_in_path = parent.tema_in_path
if isinstance(anode, m.TemaVCisleNode):
self.tema_in_path = True
@classmethod
def from_treenode(cls,anode,parent=None):
out = cls(anode,parent)
for ch in treelib.all_children(anode):
outitem = cls.from_treenode(ch,out)
out.children.append(outitem)
return out
def treenode_strom_na_seznamy(node):
out = TNLData(node)
for ch in treelib.all_children(node):
outitem = treenode_strom_na_seznamy(ch)
out.children.append(outitem)
return out
class TreeNodeView(generic.DetailView): class TreeNodeView(generic.DetailView):
model = s.TreeNode model = s.TreeNode
@ -102,7 +111,7 @@ class TreeNodeView(generic.DetailView):
def get_context_data(self,**kwargs): def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['tnldata'] = treenode_strom_na_seznamy(self.object) context['tnldata'] = TNLData.from_treenode(self.object)
return context return context
# TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného... # TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného...

Loading…
Cancel
Save