from model.data import Data as Editable from model.translation import from_container_list from lib.snabbdom import h from model.example.component_lexeme import ComponentLexeme from model.example.corpus_example import CorpusExample from model.example.multiword_example import MultiwordExample class Example(Editable): def __init__(self, example_xml): self.translations = from_container_list(example_xml.querySelectorAll("translationContainer")) inner_xml = example_xml.querySelector("corpusExample") if inner_xml is not None: self.inner = CorpusExample(inner_xml) else: inner_xml = example_xml.querySelector("multiwordExample") self.inner = MultiwordExample(inner_xml) all_components = [ComponentLexeme(el) for el in inner_xml.childNodes] self.components = [comp for comp in all_components if comp.isValid()] def export(self, doc): result = doc.createElement("exampleContainer") inner = self.inner.export(doc) # TODO: bad quick fix for comp in self.components: inner.appendChild(comp.export(doc)) result.appendChild(inner) return result def view(self): return self.inner.view(self.components) def get_cluster(self): return self.inner.get_cluster() def set_cluster(self, cluster): self.inner.cluster = cluster def get_structure(self): return self.inner.get_structure() def is_collocation(self): return self.get_view_type() == 2 def is_multiword(self): return self.get_view_type() != 1 def get_view_type(self): # as per the bosses, these are the rules for different colors if type(self.inner) is CorpusExample: return 1 elif self.inner.type == "collocation": return 2 else: return 3 def get_other_attributes(self): return self.inner.other_attributes