diff --git a/src/message/message.py b/src/message/message.py index 3b99ef2..54d5cdf 100644 --- a/src/message/message.py +++ b/src/message/message.py @@ -1,16 +1,39 @@ from update import update +from browser import window class Message: + def __init__(self, *args): + self._args = args + self.error = None + def update_model(self, model): raise NotImplementedError("This message does not implement update_model method") + def on_event(self, event): + pass + + def get_arg(self, n, argtype=None): + if n > len(self._args): + window.console.log("not enough arguments: {} <= {}".format(n, len(self._args))) + + result = self._args[n] + if argtype is not None: + if not type(result) is argtype: + window.console.trace("Error type check!") + return None + + return result + + def add_arg(self, arg): + self._args.append(arg) + def reset(self): return True class ClickMessage(Message): - def __init__(self, event): + def on_event(self, event): event.stopPropagation() diff --git a/src/message/show_messages.py b/src/message/show_messages.py index f32e973..78c88aa 100644 --- a/src/message/show_messages.py +++ b/src/message/show_messages.py @@ -5,79 +5,68 @@ from model.sense import NewSense from view import modals -class GenericShowModal(ClickMessage): - def __init__(self, event, arg): - super().__init__(event) - self.arg = arg - - def update_model(self, model): - model.modal_shown = True - - class ShowMenu(ClickMessage): - def __init__(self, event, translation): - super().__init__(event) + def on_event(self, event): location_x = event.currentTarget.offsetLeft location_y = event.currentTarget.offsetTop + event.currentTarget.offsetHeight self.menu_location = (location_x, location_y) - console.log(self.menu_location, event.currentTarget) - self.translation = translation + super().on_event(event) def update_model(self, model): model.menu_location = self.menu_location model.menu_shown = True - model.translation = self.translation + model.translation = self.get_arg(0, Translation) -class ShowSenseLabelEdit(GenericShowModal): +class ShowSenseLabelEdit(ClickMessage): def update_model(self, model): - super().update_model(model) - model.sense = self.arg + model.modal_shown = True + model.sense = self.get_arg(0, Sense) model.sense.make_copy() model.modal = lambda: modals.edit_sense_label(model.sense) -class ShowSenseDefinitionEdit(GenericShowModal): +class ShowSenseDefinitionEdit(ClickMessage): def update_model(self, model): - super().update_model(model) - model.sense = self.arg - model.modal = lambda: modals.edit_sense_definition(self.arg) + model.modal_shown = True + model.sense = self.get_arg(0, Sense) + model.modal = lambda: modals.edit_sense_definition(model.sense) -class ShowSenseAdd(GenericShowModal): +class ShowSenseAdd(ClickMessage): def update_model(self, model): - super().update_model(model) - model.modal = lambda: modals.add_sense(NewSense()) + model.modal_shown = True + model.modal = lambda: modals.add_sense() -# I don't need GenericShowModal since there is only one comment class ShowCommentEdit(ClickMessage): def update_model(self, model): model.modal_shown = True model.modal = lambda: modals.edit_comment(model.entry.comment) -class ShowExampleEdit(GenericShowModal): +class ShowExampleEdit(ClickMessage): def update_model(self, model): - super().update_model(model) - model.modal = lambda: modals.edit_example(self.arg) + model.modal_shown = True + example = self.get_arg(0, Example) + model.modal = lambda: modals.edit_example(example) -class ShowExampleTranslationEdit(GenericShowModal): +class ShowExampleTranslationEdit(ClickMessage): def update_model(self, model): - super().update_model(model) - example = self.arg + model.modal_shown = True + example = self.get_arg(0, Example) example.make_copy() model.modal = lambda: modals.edit_example_translation(example) -class ShowEditTranslation(GenericShowModal): +class ShowEditTranslation(ClickMessage): def update_model(self, model): model.modal_shown = True # I need to get number of all clusters and cluster of self.arg - translation = self.arg + translation = self.get_arg(0, Translation) for sense in model.entry.senses: num_clusters = len(sense.translations) for cidx, cluster in enumerate(sense.translations): @@ -91,10 +80,10 @@ class ShowEditTranslation(GenericShowModal): console.log("Should not be here!") -class ShowAddTranslation(GenericShowModal): +class ShowAddTranslation(ClickMessage): def update_model(self, model): model.modal_shown = True - chosen_sense = self.arg + chosen_sense = self.get_arg(0, Sense) for sense in model.entry.senses: if sense == chosen_sense: diff --git a/src/message/simple_edits.py b/src/message/simple_edits.py index 4728382..e8d68c2 100644 --- a/src/message/simple_edits.py +++ b/src/message/simple_edits.py @@ -5,40 +5,34 @@ from browser import document from model import Sense, Example -class SimpleEditMessage(Message): - def __init__(self, event, prop): - input_element = document.getElementById("modal-input") +class QuestionMessage(Message): + def on_event(self, event): + input_element = document.getElementById("modal-question") self.new_text = input_element.value - self.prop = prop class EditSenseLabel(Message): - def __init__(self, _, prop): - assert(type(prop) is Sense) - self.sense = prop - def update_model(self, model): - self.sense.labels = [] + sense = self.get_arg(0, Sense) + sense.labels = [] for input_el in document.getElementsByClassName("sense-edit-input"): new_sense_label = input_el.value if new_sense_label != "": - self.sense.labels.append(new_sense_label) + sense.labels.append(new_sense_label) class AddSenseLabel(NoReset): - def __init__(self, _, prop): - assert(type(prop) is Sense) - self.sense = prop - def update_model(self, model): + sense = self.get_arg(0, Sense) # just adding to the copy to show in the modal - self.sense.copy().labels.append("") + sense.copy().labels.append("") class AddExampleTranslation(NoReset): - def __init__(self, _, prop): - assert(type(prop) is Example) - self.example = prop + def update_model(self, model): + example = self.get_arg(0, Example) + # just adding to the copy to show in the modal + example.copy().translations.append("") def update_model(self, model): # just adding to the copy to show in the modal @@ -46,36 +40,31 @@ class AddExampleTranslation(NoReset): class EditExampleTranslation(Message): - def __init__(self, _, prop): - assert(type(prop) is Example) - self.example = prop - def update_model(self, model): - self.example.translations = common_accessors.generic_list_getter() + example = self.get_arg(0, Example) + example.translations = common_accessors.generic_list_getter() -class AddSense(SimpleEditMessage): +class AddSense(QuestionMessage): def update_model(self, model): sense = Sense.new_empty() sense.labels = [self.new_text] model.entry.senses.append(sense) -class EditSenseDefinition(SimpleEditMessage): +class EditSenseDefinition(QuestionMessage): def update_model(self, model): - sense = self.prop - assert(type(sense) is Sense) + sense = self.get_arg(0, Sense) sense.definition = self.new_text -class EditComment(SimpleEditMessage): +class EditComment(QuestionMessage): def update_model(self, model): model.entry.comment = self.new_text -class EditExample(SimpleEditMessage): +class EditExample(QuestionMessage): def update_model(self, model): - example = self.prop - assert(type(example) is Example) + example = self.get_arg(0, Example) example.example = self.new_text diff --git a/src/message/translation_edit.py b/src/message/translation_edit.py index 1883e73..1cbd61d 100644 --- a/src/message/translation_edit.py +++ b/src/message/translation_edit.py @@ -3,12 +3,6 @@ from browser import document, window from model.translation import TAGS, NewTranslation -class TranslationActionMessage(ClickMessage): - def __init__(self, event, translation): - super().__init__(event) - self.translation = translation - - def get_translation_location(entry, translation): for si, sense in enumerate(entry.senses): for ci, cluster in enumerate(sense.translations): @@ -72,25 +66,28 @@ class EditTranslation(TranslationActionMessage): sense.translations.splice(cidx, 1) -class MoveRight(TranslationActionMessage): +class MoveRight(ClickMessage): def update_model(self, model): - (_, _, idx), (_, cluster) = get_translation_location(model.entry, self.translation) + translation = self.get_arg(0, Translation) + (_, _, idx), (_, cluster) = get_translation_location(model.entry, translation) if idx != len(cluster) - 1: cluster[idx], cluster[idx + 1] = cluster[idx + 1], cluster[idx] model.translation = None -class MoveLeft(TranslationActionMessage): +class MoveLeft(ClickMessage): def update_model(self, model): - (_, _, idx), (_, cluster) = get_translation_location(model.entry, self.translation) + translation = self.get_arg(0, Translation) + (_, _, idx), (_, cluster) = get_translation_location(model.entry, translation) if idx != 0 and len(cluster) > 1: cluster[idx], cluster[idx - 1] = cluster[idx - 1], cluster[idx] model.translation = None -class BinTranslation(TranslationActionMessage): +class BinTranslation(ClickMessage): def update_model(self, model): - (_, cidx, tidx), (sense, cluster) = get_translation_location(model.entry, self.translation) + translation = self.get_arg(0, Translation) + (_, cidx, tidx), (sense, cluster) = get_translation_location(model.entry, translation) if len(cluster) == 1: # remove empty cluster sense.translations.splice(cidx, 1)