diff --git a/src/message/show_messages.py b/src/message/show_messages.py index 6ceaa44..31aa01c 100644 --- a/src/message/show_messages.py +++ b/src/message/show_messages.py @@ -30,7 +30,7 @@ class ShowSenseLabelEdit(GenericShowModal): super().update_model(model) model.sense = self.arg - model.sense.temporary_labels = model.sense.labels[:] + model.sense.make_copy() model.modal = lambda: modals.edit_sense_label(model.sense) diff --git a/src/message/simple_edits.py b/src/message/simple_edits.py index 51b3db5..9571774 100644 --- a/src/message/simple_edits.py +++ b/src/message/simple_edits.py @@ -30,7 +30,8 @@ class AddSenseLabel(NoReset): self.sense = prop def update_model(self, model): - self.sense.temporary_labels.append("") + # just adding to the copy to show in the modal + self.sense.copy().labels.append("") class EditSenseDefinition(SimpleEditMessage): diff --git a/src/modals.py b/src/modals.py index 0712235..9ace176 100644 --- a/src/modals.py +++ b/src/modals.py @@ -70,7 +70,7 @@ def edit_translation(translation, cluster_idx, num_clusters, cls, prop): def edit_sense_label(sense): content = [h("span", {}, "Edit sense labels")] - for slabel in sense.temporary_labels: + for slabel in sense.copy().labels: content.append(h("label", {}, [ h("input.sense-edit-input", {"props": {"type": "text", "value": slabel}}, "")])) diff --git a/src/model/editable.py b/src/model/editable.py new file mode 100644 index 0000000..eac889e --- /dev/null +++ b/src/model/editable.py @@ -0,0 +1,25 @@ +class Editable: + def make_copy(self): + # delete old copy + if hasattr(self, "_copy"): + if self._copy is not None: + self._copy = None + + # make new copy + self._copy = JSON.parse(JSON.stringify(self)) + + def copy(self): + # check if even initialized + if hasattr(self, "_copy"): + return self._copy + else: + return None + + def overwrite_with_copy(self): + for key, value in dict(self._copy).items(): + if key == "_copy": + continue + setattr(self, key, value) + + self._copy = None + diff --git a/src/model/sense.py b/src/model/sense.py index dd9a82b..f210812 100644 --- a/src/model/sense.py +++ b/src/model/sense.py @@ -1,8 +1,9 @@ from model.example import Example from model.translation import Translation +from model.editable import Editable -class Sense: +class Sense(Editable): def __init__(self, sense_xml): definition = sense_xml.querySelector("definitionList definition") @@ -23,7 +24,4 @@ class Sense: self.translations = [[] for _ in range(max_num_cluster)] for clusterNum, translation in translations: self.translations[clusterNum - 1].append(translation) - - # useful for editing - self.temporary_labels = None diff --git a/src/view.py b/src/view.py index d51e156..770d157 100644 --- a/src/view.py +++ b/src/view.py @@ -61,15 +61,11 @@ class View: @staticmethod def view_translations(translations, sense): - joiner = lambda: h("span.translation-semicolon", {}, ";") result = [] - for cluster in translations: - result.extend([View.view_one_translation(t) for t in cluster]) - result.append(joiner()) + result.append(h("div.translation-div-cluster", {}, [View.view_one_translation(t) for t in cluster])) - # remove last ';' and add + button; [-1] does not work in transcrypt - result[len(result) - 1] = h("button", {"on": {"click": msg(ShowAddTranslation, sense)}}, "+") + result.append(h("button", {"on": {"click": msg(ShowAddTranslation, sense)}}, "+")) return result @staticmethod