From c0ca84a9012b82c3f711c8543ce9772f1bd01d7d Mon Sep 17 00:00:00 2001 From: Ozbolt Menegatti Date: Wed, 19 Feb 2020 23:08:21 +0100 Subject: [PATCH] Entry now redrawn only on data change --- src/message/simple_messages.py | 3 +++ src/model/example/__init__.py | 1 + src/update.py | 7 ++++-- src/view/modals.py | 7 ------ src/view/view.py | 43 +++++++++------------------------- 5 files changed, 20 insertions(+), 41 deletions(-) diff --git a/src/message/simple_messages.py b/src/message/simple_messages.py index ec9c1aa..74eb66e 100644 --- a/src/message/simple_messages.py +++ b/src/message/simple_messages.py @@ -36,6 +36,9 @@ class KeyboardPress(Message): key = self.get_arg(0, str) return key == "Escape" + def data_change(self): + return False + def update_model(self, model): key = self.get_arg(0, str) diff --git a/src/model/example/__init__.py b/src/model/example/__init__.py index 9eb4295..343b047 100644 --- a/src/model/example/__init__.py +++ b/src/model/example/__init__.py @@ -1 +1,2 @@ from model.example.example import Example +from model.example.component_lexeme import ComponentLexeme diff --git a/src/update.py b/src/update.py index d14cd1e..8fb007c 100644 --- a/src/update.py +++ b/src/update.py @@ -7,8 +7,10 @@ class Update: self.view = None def update_model(self): - # check if we need to reset the model + data_change = False reset = False + + # check if we need to reset the model for msg in self.message_queue: if msg.reset(): reset = True @@ -21,6 +23,7 @@ class Update: for msg in self.message_queue: if msg.data_change(): screenful.changed() + data_change = True break # do update @@ -31,8 +34,8 @@ class Update: if reset: self.model.post_reset() + self.view.view(self.model, data_change) self.message_queue = [] - self.view.view(self.model) def schedule(self, msg): self.message_queue.append(msg) diff --git a/src/view/modals.py b/src/view/modals.py index 5a052db..deeff99 100644 --- a/src/view/modals.py +++ b/src/view/modals.py @@ -64,13 +64,6 @@ def edit_example(example, sense): h("div.three-fifth", {}, middle), h("div.one-fifth", {}, buttons_right(idx))])) - cluster = example.get_cluster() - if cluster is not None: - divs.append(h("hr", {}, [])) - divs.append(h("div.flex.five.example-component", {}, [ - h("div.one-fifth", {}, "Cluster"), - h("div.four-fifth", {}, show_toggle_cluster_buttons(sense, example))])) - return modal_template(divs, "Edit Example", (message.EditExampleText, example_original)) diff --git a/src/view/view.py b/src/view/view.py index 31ed72b..2955493 100644 --- a/src/view/view.py +++ b/src/view/view.py @@ -11,27 +11,30 @@ from export import export_to_xml class View: def __init__(self, container): self.vdom = h('div', {}, "Loading...") + self.entry_vdom = None self.model = None patch(container, self.vdom) # this does not work on parent div, so attaching to document here document.addEventListener("keyup", msg(KeyboardPress)) - def view(self, model): + def view(self, model, data_change): self.model = model - self.model.pre_view() + if data_change or self.entry_vdom is None: + self.model.pre_view() + self.entry_vdom = self.model.entry.view(self.model) + new_vdom = self._view() patch(self.vdom, new_vdom) self.vdom = new_vdom def _view(self): return h("div", {"on": { "click": msg(Reset) }}, [ - self.model.entry.view(self.model), - h("button.blk", {"on": { "click": lambda _: check_export(self.model) } }, "CHK"), - View.view_menu(self.model.menu_location, self.model.menu_target, self.model.entry), - View.view_modal(self.model.modal_shown, self.model.modal)]) - + self.entry_vdom, + # h("button.blk", {"on": { "click": lambda _: check_export(self.model) } }, "CHK"), + View.view_menu(self.model.menu_location, self.model.menu_target, self.model.entry), + View.view_modal(self.model.modal_shown, self.model.modal)]) @staticmethod def view_toggle_buttons(model): @@ -41,38 +44,15 @@ class View: return [h("span.button.toggle", {"on": {"click": msg(ToggleExamples)}}, txt_examples), h("span.button.toggle", {"on": {"click": msg(ToggleClusters)}}, txt_clusters)] - - - @staticmethod def view_translations(translations, parent, model): result = [] for cluster in translations: - result.append(h("div.translation-div-cluster", {}, [View.view_one_translation(t, model) for t in cluster])) + result.append(h("div.translation-div-cluster", {}, [t.view(model) for t in cluster])) result.append(h("button.add-button", {"on": {"click": msg(ShowAddTranslation, parent)}}, "+")) return result - @staticmethod - def view_one_translation(translation, model): - elements = [] - - if translation.tags: - tags = h("div.translation-tags", {}, [ - h("span", {"attr": {"title": key}}, clean_label(value)) - for key, value in translation.tags]) - elements.append(tags) - - elements.append(h("span.translation-text", {}, translation.translation)) - if translation.source: - elements.append(h("span.translation-source", {}, translation.source)) - - explanation_class = ".translation-explanation" if translation.translation else "" - elements.append(h("span{}".format(explanation_class), {}, translation.explanation)) - - return h("div.translation-div", {"on": {"click": msg(ShowTranslationMenu, translation) }}, elements) - - @staticmethod def view_menu(location, menu_target, entry): style = { @@ -110,7 +90,6 @@ class View: else: console.log("Should not be heree!!") - @staticmethod def view_modal(modal_shown, modal): return h("div.modal", {}, [