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.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