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. 61
      seminar/templates/seminar/treenode_recursive.html
  3. 104
      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;
}

61
seminar/templates/seminar/treenode_recursive.html

@ -3,10 +3,18 @@
<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,37 +30,62 @@
{% 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">
{# ----------- Přidáváme před prvního syna -------- #}
{% if obj.node|appendableChildren %}
<div class="pink">Přidat před <div class="pink">Přidat před
<select> <select>
<option value="TextNode">Text</option> {% for chld in obj.node|appendableChildren %}
<option value="NadpisNode">Nadpis</option> <option value="{{chld.0}}">{{chld.1}}</option>
<option value="UlohaNode">Úloha</option> {% endfor %}
<option value="TemaNode">Téma</option>
</select> </select>
<button>Přídat</button> <button>Přídat</button>
</div> </div>
{% endif %}{# appendablebleChildren #}
{# ----------- /Přidáváme před -------- #}
{%for ch in obj.children %} {%for ch in obj.children %}
{# ----------- Vypisujeme podstrom ----------#}
{%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %} {%with obj=ch depth=depth|add:"1" template_name="seminar/treenode_recursive.html" %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}
{# ----------- /Vypisujeme podstrom ---------#}
{# ----------- Přidáváme mezi syny / za posledního -------- #}
{% if obj.node|appendableChildren %}
<div class="pink"> <div class="pink">
{% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %} {% if forloop.last %} Přidat za {% else %} Přidat mezi {% endif %}
<select> <select>
<option value="TextNode">Text</option> {% for chld in obj.node|appendableChildren %}
<option value="NadpisNode">Nadpis</option> <option value="{{chld.0}}">{{chld.1}}</option>
<option value="UlohaNode">Úloha</option> {% endfor %}
<option value="TemaNode">Téma</option>
</select> </select>
<button>Přídat na stejnou úroveň</button> <button>Přídat</button>
<button>Přídat jako syna</button> </div>
&nbsp;&nbsp;&nbsp; {% endif %}{# appendablebleChildren #}
{% if not forloop.last %} {# ----------- /Přidáváme mezi syny / za posledního -------- #}
<div class="pink">
{% if not forloop.last and ch|editableSiblings %}
<button>Prohodit ^ a v</button> <button>Prohodit ^ a v</button>
{% endif %} {% 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> </div>
{% endif %}
{# ----------- /Přidáváme prvního syna -------- #}
{% endfor %} {% endfor %}
</div> </div>
{%endif%} {%endif%}

104
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()
@ -56,7 +57,106 @@ def isUlohaZadani(value):
def isPohadka(value): def isPohadka(value):
return isinstance(value, m.PohadkaNode) return isinstance(value, m.PohadkaNode)
#@register.filter @register.filter
#def isOtisteneReseniNode(value): def isReseni(value):
return False
# return isinstance(value, m.OtisteneReseniNode) # 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
#def is(value):
# 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,25 +85,33 @@ 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
def treenode_strom_na_seznamy(node): if parent:
out = TNLData(node) self.tema_in_path = parent.tema_in_path
for ch in treelib.all_children(node): if isinstance(anode, m.TemaVCisleNode):
outitem = treenode_strom_na_seznamy(ch) 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) out.children.append(outitem)
return out return out
class TreeNodeView(generic.DetailView): class TreeNodeView(generic.DetailView):
model = s.TreeNode model = s.TreeNode
template_name = 'seminar/treenode.html' template_name = 'seminar/treenode.html'
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