diff --git a/src/message/message.py b/src/message/message.py index cb07624..bbbde63 100644 --- a/src/message/message.py +++ b/src/message/message.py @@ -38,12 +38,13 @@ class Message: self._args = [] -def msg(message, params): - if not issubclass(type(message), Message): - window.console.log("Not scheduling a Message type, this will not work!") - return lambda: None - +def msg(message_class, params): def callback(event): - message.on_event(event) #message_class(event, params) + message = message_class(params) + if not issubclass(type(message), Message): + window.console.log("Not scheduling a Message type, this will not work!") + return + + message.on_event(event) update.schedule(message) return callback diff --git a/src/message/show_messages.py b/src/message/show_messages.py index e848b16..11d246f 100644 --- a/src/message/show_messages.py +++ b/src/message/show_messages.py @@ -55,7 +55,7 @@ class ShowEditTranslation(ClickMessage): translation.make_copy() num_clusters = len(parent.translations) model.modal_set(lambda: modals.edit_translation( - translation, cidx, num_clusters, EditTranslation(translation, cidx))) + translation, cidx, num_clusters, (EditTranslation, translation, cidx))) class ShowAddTranslation(ClickMessage): @@ -68,7 +68,7 @@ class ShowAddTranslation(ClickMessage): translation, -1, len(chosen_sense_or_example.translations), - AddTranslation(translation, -1, chosen_sense_or_example))) + (AddTranslation, translation, -1, chosen_sense_or_example))) class ShowEntryLabelsEdit(ClickMessage): diff --git a/src/message/simple_messages.py b/src/message/simple_messages.py index 8aafb34..ec9c1aa 100644 --- a/src/message/simple_messages.py +++ b/src/message/simple_messages.py @@ -62,7 +62,7 @@ class _ModalResetDelayed(Message): class ModalNotOkClose(Reset): def update_model(self, model): # msg just creates a callback, need to actually run it! - window.setTimeout(lambda: msg(_ModalResetDelayed())(None), 100) + window.setTimeout(lambda: msg(_ModalResetDelayed)(None), 100) def data_change(self): return False diff --git a/src/view/modal_templates.py b/src/view/modal_templates.py index 00110c1..90c5a6c 100644 --- a/src/view/modal_templates.py +++ b/src/view/modal_templates.py @@ -4,16 +4,16 @@ from model.tags import TAGS from browser import document def modal_template(content, title, msg, delete_msg=None): - reset = message.msg(message.ModalNotOkClose()) + reset = message.msg(message.ModalNotOkClose) footer = [] if msg is not None: - footer.append(h("a#modal-ok.button", {"on": {"click": message.msg(msg)}}, "OK")) + footer.append(h("a#modal-ok.button", {"on": {"click": message.msg(*msg)}}, "OK")) footer.append(h("label.button.dangerous", {"on": {"click": reset}}, "Cancel")) if delete_msg is not None: - footer.append(h("label.button.warning.modal-delete", {"on": {"click": message.msg(delete_msg)}}, "🗑")) + footer.append(h("label.button.warning.modal-delete", {"on": {"click": message.msg(*delete_msg)}}, "🗑")) return [ h("header", {}, [ @@ -35,7 +35,7 @@ def generic_list_editor(title, element_list_getter): for slabel in element_list_getter(): content.append(h("label", {}, [ h("input.list-adder-input", {"props": {"type": "text", "value": slabel}}, "")])) - content.append(h("button", {"on": {"click": message.msg(message.AddToGenericList(element_list_getter))}}, "+")) + content.append(h("button", {"on": {"click": message.msg(message.AddToGenericList, element_list_getter)}}, "+")) return content @@ -66,11 +66,11 @@ def label_list_editor(current_labels, add_label_message_class): def get_new_label_type(): select = document.getElementById("new-tag-select") return (select.options[select.selectedIndex].text, "") - add_label_message_class.add_arg(get_new_label_type) + add_label_message_class.append(get_new_label_type) left = h("span", {}, "Add more!") center = h("select#new-tag-select", {}, [h("option", {}, ltype) for ltype in TAGS.keys()]) - right = h("button", {"style": {"float": "right"}, "on": {"click": message.msg(add_label_message_class)}}, "+") + right = h("button", {"style": {"float": "right"}, "on": {"click": message.msg(*add_label_message_class)}}, "+") content.append(split_line3(left, center, right, False)) content.append(h("hr", {}, [])) diff --git a/src/view/modals.py b/src/view/modals.py index 51d5cad..5a052db 100644 --- a/src/view/modals.py +++ b/src/view/modals.py @@ -20,14 +20,14 @@ def edit_translation(translation, cluster_idx, num_clusters, cls): content.append(split_line2("Stevilka gruce:", h("select#cluster-num", {}, options))) content.append(h("h4", {}, "Tags")) - content.extend(label_list_editor(translation.copy().tags, message.AddToLabelList(translation.copy().tags))) + content.extend(label_list_editor(translation.copy().tags, [message.AddToLabelList, translation.copy().tags])) return modal_template(content, "Translation", cls) def edit_sense_label(sense): - content = label_list_editor(sense.copy().labels, message.AddToLabelList(sense.copy().labels)) - return modal_template(content, "Translation", message.EditSenseLabel(sense)) + content = label_list_editor(sense.copy().labels, [message.AddToLabelList, sense.copy().labels]) + return modal_template(content, "Translation", (message.EditSenseLabel, sense)) def edit_example(example, sense): @@ -35,7 +35,7 @@ def edit_example(example, sense): example = example_original.copy() def role_msg(idx, role): - return message.msg(message.ExampleRoleChange(example_original, idx, role)) + return message.msg(message.ExampleRoleChange, example_original, idx, role) divs = [] buttons_right = lambda idx: [ @@ -48,9 +48,9 @@ def edit_example(example, sense): h("span.example-component-button.example-component-none", {"on": {"click": role_msg(idx, "none")}}, "N"), h("span.example-component-button", - {"on": {"click": message.msg(message.ExampleComponentAdd(example_original, idx))}}, "+"), + {"on": {"click": message.msg(message.ExampleComponentAdd, example_original, idx)}}, "+"), h("span.example-component-button", - {"on": {"click": message.msg(message.ExampleComponentRemove(example_original, idx))}}, "-")] + {"on": {"click": message.msg(message.ExampleComponentRemove, example_original, idx)}}, "-")] for idx, component in enumerate(example.components): role_txt = component.role if component.role is not None else "none" @@ -71,32 +71,32 @@ def edit_example(example, sense): 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)) + return modal_template(divs, "Edit Example", (message.EditExampleText, example_original)) def edit_variants(entry): vget = lambda: entry.copy().variants content = generic_list_editor("Variants", vget) - return modal_template(content, "Add or remove variants", message.EditVariants(), message.DeleteVariants()) + return modal_template(content, "Add or remove variants", (message.EditVariants,), (message.DeleteVariants,)) def edit_related_entries(entry): reget = lambda: entry.copy().related_entries content = generic_list_editor("Related entries", reget) - return modal_template(content, "Add or remove related entries", message.EditRelatedEntries(), message.DeleteRelatedEntries()) + return modal_template(content, "Add or remove related entries", (message.EditRelatedEntries,), (message.DeleteRelatedEntries,)) def edit_entry_labels(entry): - content = label_list_editor(entry.copy().labels, message.AddToLabelList(entry.copy().labels)) - return modal_template(content, "Translation", message.EditEntryLabels(), message.DeleteEntryLabels()) + content = label_list_editor(entry.copy().labels, [message.AddToLabelList, entry.copy().labels]) + return modal_template(content, "Translation", (message.EditEntryLabels,), (message.DeleteEntryLabels,)) def edit_sense_definition(sense): - return modal_template(question("Edit sense definition", sense.definition["indicator"]), "Sense definition", message.EditSenseDefinition(sense)) + return modal_template(question("Edit sense definition", sense.definition["indicator"]), "Sense definition", (message.EditSenseDefinition, sense)) def edit_comment(comment): - return modal_template(question("Edit comment", comment), "Comment", message.EditComment(), message.DeleteComment()) + return modal_template(question("Edit comment", comment), "Comment", (message.EditComment,), (message.DeleteComment,)) def do_chosen_examples(example_list, entry): @@ -122,4 +122,4 @@ def do_chosen_examples(example_list, entry): options.append(h("label.checkable", {"attrs": {"for": id_}}, text)) options.append(h("br", {}, [])) - return modal_template(options, "Examples picker", message.DoChosenExamples(example_list)) + return modal_template(options, "Examples picker", (message.DoChosenExamples, example_list)) diff --git a/src/view/utils.py b/src/view/utils.py index f6782c4..4cfa685 100644 --- a/src/view/utils.py +++ b/src/view/utils.py @@ -23,12 +23,12 @@ def show_toggle_cluster_buttons(sense, example): result.append(h(tag, {"attrs": attrs, "style": style, - "on": {"click": message.msg(message.ExampleClusterEdit(example, opt))}}, [])) + "on": {"click": message.msg(message.ExampleClusterEdit, example, opt)}}, [])) result.append(h(base_tag, {"attrs": {"value": "+", "type": "button"}, "style": {"width": "1em"}, - "on": {"click": message.msg(message.ExampleClusterAdd(example))}}, + "on": {"click": message.msg(message.ExampleClusterAdd, example)}}, [])) return result diff --git a/src/view/view.py b/src/view/view.py index 2a889a8..d2c4685 100644 --- a/src/view/view.py +++ b/src/view/view.py @@ -15,7 +15,7 @@ class View: patch(container, self.vdom) # this does not work on parent div, so attaching to document here - document.addEventListener("keyup", msg(KeyboardPress())) + document.addEventListener("keyup", msg(KeyboardPress)) def view(self, model): self.model = model @@ -26,8 +26,8 @@ class View: self.vdom = new_vdom def _view(self): - return h("div", {"on": { "click": msg(Reset()) }}, [ - View.view_entry(self.model.entry, self.model), + 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)]) @@ -57,8 +57,8 @@ class View: txt_examples = "Hide examples" if model.examples_shown else "Show examples" txt_clusters = "Hide clusters" if model.clusters_shown else "Show clusters" - return [h("span.button.toggle", {"on": {"click": msg(ToggleExamples())}}, txt_examples), - h("span.button.toggle", {"on": {"click": msg(ToggleClusters())}}, txt_clusters)] + return [h("span.button.toggle", {"on": {"click": msg(ToggleExamples)}}, txt_examples), + h("span.button.toggle", {"on": {"click": msg(ToggleClusters)}}, txt_clusters)] @staticmethod @@ -148,7 +148,7 @@ class View: return h("div.example", {"style": {"display": parent_display}}, [ h("div.example-dot", dot_attr, "▣"), h(example_tag, {}, [ - h("span.example-text", {"on": {"click": msg(ShowExampleMenu(example))} }, example_content), + h("span.example-text", {"on": {"click": msg(ShowExampleMenu, example)} }, example_content), h("div.example-translation-list", {}, [ h("div.example-translation", {}, View.view_translations(example.translations, example, model))]), h("div.example-clusters", @@ -160,7 +160,7 @@ class View: for cluster in translations: result.append(h("div.translation-div-cluster", {}, [View.view_one_translation(t, model) for t in cluster])) - result.append(h("button.add-button", {"on": {"click": msg(ShowAddTranslation(parent))}}, "+")) + result.append(h("button.add-button", {"on": {"click": msg(ShowAddTranslation, parent)}}, "+")) return result @staticmethod @@ -180,7 +180,7 @@ class View: 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) + return h("div.translation-div", {"on": {"click": msg(ShowTranslationMenu, translation) }}, elements) @staticmethod @@ -197,26 +197,26 @@ class View: elif type(menu_target) is Translation: translation = menu_target return h("span.popup-menu", { "style": style }, [ - h("button.shyButton", { "on": {"click": msg(ShowEditTranslation(translation))}}, "✎"), - h("button.shyButton", { "on": {"click": msg(MoveRight(translation))}}, "→"), - h("button.shyButton", { "on": {"click": msg(MoveLeft(translation))}}, "←"), - h("button.shyButton", { "on": {"click": msg(BinTranslation(translation))}}, "🗑")]) + h("button.shyButton", { "on": {"click": msg(ShowEditTranslation, translation)}}, "✎"), + h("button.shyButton", { "on": {"click": msg(MoveRight, translation)}}, "→"), + h("button.shyButton", { "on": {"click": msg(MoveLeft, translation)}}, "←"), + h("button.shyButton", { "on": {"click": msg(BinTranslation, translation)}}, "🗑")]) elif type(menu_target) is Sense: sense = menu_target return h("span.popup-menu", { "style": style }, [ - h("button.shyButton", { "on": {"click": msg(SenseMoveUp(sense))}}, "↑"), - h("button.shyButton", { "on": {"click": msg(SenseMoveDown(sense))}}, "↓"), - h("button.shyButton", { "on": {"click": msg(SenseBin(sense))}}, "🗑")]) + h("button.shyButton", { "on": {"click": msg(SenseMoveUp, sense)}}, "↑"), + h("button.shyButton", { "on": {"click": msg(SenseMoveDown, sense)}}, "↓"), + h("button.shyButton", { "on": {"click": msg(SenseBin, sense)}}, "🗑")]) elif type(menu_target) is Example: example = menu_target sense = example_sense(example, entry) return h("span.popup-menu", { "style": style }, [ - h("button.shyButton", { "on": {"click": msg(ShowExampleEdit(example, sense))}}, "✎"), - h("button.shyButton", { "on": {"click": msg(ExampleMoveUp(example))}}, "↑"), - h("button.shyButton", { "on": {"click": msg(ExampleMoveDown(example))}}, "↓"), - h("button.shyButton", { "on": {"click": msg(ExampleBin(example))}}, "🗑")]) + h("button.shyButton", { "on": {"click": msg(ShowExampleEdit, example, sense)}}, "✎"), + h("button.shyButton", { "on": {"click": msg(ExampleMoveUp, example)}}, "↑"), + h("button.shyButton", { "on": {"click": msg(ExampleMoveDown, example)}}, "↓"), + h("button.shyButton", { "on": {"click": msg(ExampleBin, example)}}, "🗑")]) else: console.log("Should not be heree!!") @@ -226,5 +226,5 @@ class View: return h("div.modal", {}, [ h("input", { "props": {"type": "checkbox", "checked": modal_shown} }, ""), h("label.overlay", {}, ""), - h("article", {"on": { "click": msg(NoReset()) }}, modal())]) + h("article", {"on": { "click": msg(NoReset) }}, modal())])