Web M&M
https://mam.matfyz.cz
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
5.7 KiB
243 lines
5.7 KiB
from django import template
|
|
from enum import Enum
|
|
import seminar.models as m
|
|
|
|
register = template.Library()
|
|
|
|
@register.filter
|
|
def nodeType(value):
|
|
if isinstance(value,RocnikNode): return "Ročník"
|
|
if isinstance(value,CisloNode): return "Číslo"
|
|
if isinstance(value,CastNode): return "Část"
|
|
if isinstance(value,TextNode): return "Text"
|
|
if isinstance(value,TemaVCisleNode): return "Téma v čísle"
|
|
if isinstance(value,KonferaNode): return "Konfera"
|
|
if isinstance(value,ClanekNode): return "Článek"
|
|
if isinstance(value,UlohaVzorakNode): return "Vzorák"
|
|
if isinstance(value,UlohaZadaniNode): return "Zadání úlohy"
|
|
if isinstance(value,PohadkaNode): return "Pohádka"
|
|
|
|
### NASLEDUJICI FUNKCE SE POUZIVAJI VE views_all.py V SEKCI PRIPRAVJICI TNLData
|
|
### NEMAZAT, PRESUNOUT S TNLDaty NEKAM BOKEM
|
|
|
|
@register.filter
|
|
def isRocnik(value):
|
|
return isinstance(value, m.RocnikNode)
|
|
|
|
@register.filter
|
|
def isCislo(value):
|
|
return isinstance(value, m.CisloNode)
|
|
|
|
@register.filter
|
|
def isCast(value):
|
|
return isinstance(value, m.CastNode)
|
|
|
|
@register.filter
|
|
def isText(value):
|
|
return isinstance(value, m.TextNode)
|
|
|
|
@register.filter
|
|
def isTemaVCisle(value):
|
|
return isinstance(value, m.TemaVCisleNode)
|
|
|
|
@register.filter
|
|
def isKonfera(value):
|
|
return isinstance(value, m.KonferaNode)
|
|
|
|
@register.filter
|
|
def isClanek(value):
|
|
return isinstance(value, m.ClanekNode)
|
|
|
|
@register.filter
|
|
def isUlohaVzorak(value):
|
|
return isinstance(value, m.UlohaVzorakNode)
|
|
|
|
@register.filter
|
|
def isUlohaZadani(value):
|
|
return isinstance(value, m.UlohaZadaniNode)
|
|
|
|
@register.filter
|
|
def isPohadka(value):
|
|
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
|
|
|
|
@register.filter
|
|
def textOnlySubtree(value):
|
|
text_only = True
|
|
if isText(value.node):
|
|
return True
|
|
if not isCast(value.node):
|
|
return False
|
|
for ch in value.children:
|
|
if not textOnlySubtree(ch):
|
|
return False
|
|
return True
|
|
|
|
def canPodvesit(obj,new_parent):
|
|
if isCast(new_parent.node):
|
|
# print("Lze",obj,new_parent)
|
|
return True
|
|
if textOnlySubtree(obj):
|
|
# print("Lze",obj,new_parent)
|
|
return True
|
|
return False
|
|
|
|
@register.filter
|
|
def canPodvesitZa(value):
|
|
if not value.index or value.index+1 >= len(value.parent.children):
|
|
return False
|
|
new_parent = value.parent.children[value.index+1]
|
|
return canPodvesit(value,new_parent)
|
|
|
|
@register.filter
|
|
def canPodvesitPred(value):
|
|
if not value.index or value.index <= 0:
|
|
return False
|
|
new_parent = value.parent.children[value.index-1]
|
|
return canPodvesit(value,new_parent)
|
|
|
|
|
|
class NodeTypes(Enum):
|
|
ROCNIK = ('rocnikNode','Ročník')
|
|
CISLO = ('cisloNode', 'Číslo')
|
|
MEZICISLO = ('mezicisloNode', 'Mezičí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.simple_tag
|
|
def appendableChildren(value):
|
|
print(value)
|
|
print(value.node)
|
|
print(isUlohaZadani(value.node))
|
|
if isTemaVCisle(value.node):
|
|
return (NodeTypes.RESENI.value[0],
|
|
NodeTypes.ULOHAZADANI.value[0],
|
|
NodeTypes.ULOHAVZORAK.value[0],
|
|
NodeTypes.CAST.value[0],
|
|
NodeTypes.TEXT.value[0],
|
|
)
|
|
if isOrgText(value.node) or isReseni(value.node) or isUlohaZadani(value.node) or isUlohaVzorak(value.node):
|
|
print("Text/Cast")
|
|
return (NodeTypes.CAST.value[0],
|
|
NodeTypes.TEXT.value[0],
|
|
)
|
|
if isCast(value.node):
|
|
return appendableChildren(value.parent)
|
|
return []
|
|
|
|
@register.simple_tag
|
|
def canAppendReseni(value):
|
|
if isTemaVCisle(value.node):
|
|
return True
|
|
if isCast(value.node):
|
|
return canAppendReseni(value.parent)
|
|
return False
|
|
|
|
@register.simple_tag
|
|
def canAppendUlohaZadani(value):
|
|
if isTemaVCisle(value.node):
|
|
return True
|
|
if isCast(value.node):
|
|
return canAppendUlohaZadani(value.parent)
|
|
return False
|
|
|
|
@register.simple_tag
|
|
def canAppendUlohaVzorak(value):
|
|
if isTemaVCisle(value.node):
|
|
return True
|
|
if isCast(value.node):
|
|
return canAppendUlohaVzorak(value.parent)
|
|
return False
|
|
|
|
@register.simple_tag
|
|
def canAppendCast(value):
|
|
if isTemaVCisle(value.node) or isOrgText(value.node) or isReseni(value.node) or isUlohaZadani(value.node) or isUlohaVzorak(value.node):
|
|
return True
|
|
if isCast(value.node):
|
|
return canAppendCast(value.parent)
|
|
return False
|
|
|
|
@register.simple_tag
|
|
def canAppendText(value):
|
|
if isTemaVCisle(value.node) or isOrgText(value.node) or isReseni(value.node) or isUlohaZadani(value.node) or isUlohaVzorak(value.node):
|
|
return True
|
|
if isCast(value.node):
|
|
return canAppendText(value.parent)
|
|
return False
|
|
|
|
#@register.filter
|
|
#def is(value):
|
|
# return
|
|
#
|
|
# NodeTypes..value,
|
|
#@register.filter
|
|
#def is(value):
|
|
# return
|
|
|
|
|