adding of multiword examples, still some cleanup to do.

This commit is contained in:
Ozbolt Menegatti 2020-06-11 22:34:04 +02:00
parent fcd6f158a1
commit 887eb37d20
8 changed files with 56 additions and 7 deletions

View File

@ -3,11 +3,11 @@ from message.translation_edit import EditTranslation, MoveRight, MoveLeft, BinTr
from message.show_messages import ShowEntryLabelsEdit, ShowEditTranslation, ShowSenseLabelEdit, ShowSenseDefinitionEdit, ShowCommentEdit, ShowAddTranslation, ShowExampleEdit, ShowVariantsEdit, ShowRelatedEntriesEdit from message.show_messages import ShowEntryLabelsEdit, ShowEditTranslation, ShowSenseLabelEdit, ShowSenseDefinitionEdit, ShowCommentEdit, ShowAddTranslation, ShowExampleEdit, ShowVariantsEdit, ShowRelatedEntriesEdit
from message.simple_edits import EditSenseLabel, EditSenseDefinition, EditComment, AddSenseLabel, AddSense, AddExampleTranslation, DoChosenExamples, AddToLabelList, AddToGenericList, EditVariants, EditRelatedEntries, EditEntryLabels, ExampleClusterEdit, ExampleClusterAdd from message.simple_edits import EditSenseLabel, EditSenseDefinition, EditComment, AddSenseLabel, AddSense, AddExampleTranslation, DoChosenExamples, AddToLabelList, AddToGenericList, EditVariants, EditRelatedEntries, EditEntryLabels, ExampleClusterEdit, ExampleClusterAdd
from message.show_menu import ShowTranslationMenu, ShowSenseMenu, ShowExampleMenu from message.show_menu import ShowTranslationMenu, ShowSenseMenu, ShowExampleMenu
from message.sense_edit import SenseMoveUp, SenseMoveDown, SenseBin from message.sense_edit import SenseMoveUp, SenseMoveDown, SenseBin, AddMultiwordExample
from message.example_edit import ExampleMoveUp, ExampleMoveDown, ExampleBin, ExampleRoleChange, ExampleComponentSpace, ExampleComponentAdd, ExampleComponentRemove, EditExampleText, ToggleExamples, ToggleClusters from message.example_edit import ExampleMoveUp, ExampleMoveDown, ExampleBin, ExampleRoleChange, ExampleComponentSpace, ExampleComponentAdd, ExampleComponentRemove, EditExampleText, ToggleExamples, ToggleClusters
from message.delete_messages import DeleteComment, DeleteVariants, DeleteRelatedEntries, DeleteEntryLabels from message.delete_messages import DeleteComment, DeleteVariants, DeleteRelatedEntries, DeleteEntryLabels
from message.ske_messages import ShowSkeModal, SearchInSkeModal, SkeInsert from message.ske_messages import ShowSkeModal, SearchInSkeModal, SkeInsert
from message.message import msg from message.message import msg, delayed_msg

View File

@ -2,6 +2,7 @@ from browser import document
from message.simple_messages import DataChgClickMessage, ClickMessage, NoReset from message.simple_messages import DataChgClickMessage, ClickMessage, NoReset
from message.message import Message from message.message import Message
from model.example import Example, ComponentLexeme from model.example import Example, ComponentLexeme
from model.sense import Sense
@ -48,15 +49,23 @@ class ExampleBin(DataChgClickMessage):
class EditExampleText(Message): class EditExampleText(Message):
def update_model(self, model): def update_model(self, model):
example = self.get_arg(0, Example) example = self.get_arg(0, Example)
sense = self.get_arg(1, Sense)
example.overwrite_with_copy() example.overwrite_with_copy()
example.edited = True example.edited = True
# if this was a newly created example, now we can add it to the sense
# easier to add here than to add before editing and checking if the user
# canceled the operation
if example.newly_created:
example.newly_created = False
sense.examples.append(example)
idx = 0 idx = 0
for txt in document.getElementsByClassName("example-component-text"): for txt in document.getElementsByClassName("example-component-text"):
example.components[idx].text = txt.value example.components[idx].text = txt.value
idx += 1 idx += 1
class ExampleRoleChange(NoReset): class ExampleRoleChange(NoReset):
def update_model(self, model): def update_model(self, model):
example = self.get_arg(0, Example) example = self.get_arg(0, Example)

View File

@ -54,3 +54,7 @@ def msg(message_class, *params):
message.on_event(event) message.on_event(event)
update.update_model(message) update.update_model(message)
return callback return callback
def delayed_msg(message_class, event, timeout_ms, *params):
window.setTimeout(lambda: msg(message_class, *params)(event), timeout_ms)

View File

@ -1,5 +1,8 @@
from message.simple_messages import DataChgClickMessage from message.simple_messages import DataChgClickMessage
from message.message import delayed_msg
from message.show_messages import ShowExampleEdit
from model import Sense from model import Sense
from model import Example
def _get_sense_idx(sense, model): def _get_sense_idx(sense, model):
@ -38,3 +41,18 @@ class SenseBin(DataChgClickMessage):
assert(sidx >= 0) assert(sidx >= 0)
model.entry.senses.splice(sidx, 1) model.entry.senses.splice(sidx, 1)
class AddMultiwordExample(DataChgClickMessage):
def on_event(self, event):
super().on_event(event)
self.event_copy = event
def update_model(self, model):
sense = self.get_arg(0, Sense)
new_example = Example.new_multiword()
# open up an edit example dialog
delayed_msg(ShowExampleEdit, self.event_copy, 0, new_example, sense)

View File

@ -1,5 +1,5 @@
from browser import window, document from browser import window, document
from message.message import Message, msg from message.message import Message, msg, delayed_msg
# click messages stuff # click messages stuff
@ -78,8 +78,8 @@ class _ModalResetDelayed(Message):
class ModalNotOkClose(Reset): class ModalNotOkClose(Reset):
def update_model(self, model): def update_model(self, model):
# msg just creates a callback, need to actually run it! # modal reset should be called a bit later for shoother transition
window.setTimeout(lambda: msg(_ModalResetDelayed)(None), 100) delayed_msg(_ModalResetDelayed, None, 100)
def data_change(self): def data_change(self):
return False return False

View File

@ -8,6 +8,7 @@ from view.utils import show_toggle_cluster_buttons
from model.example.component_lexeme import ComponentLexeme from model.example.component_lexeme import ComponentLexeme
from model.example.corpus_example import CorpusExample from model.example.corpus_example import CorpusExample
from model.example.multiword_example import MultiwordExample from model.example.multiword_example import MultiwordExample
from model.example_clusters import ExampleClusters
class Example(Data): class Example(Data):
@ -16,12 +17,27 @@ class Example(Data):
self.inner = None self.inner = None
self.components = [] self.components = []
self.edited = False self.edited = False
self.newly_created = False
# removes space from last component if multiword example # removes space from last component if multiword example
def check_multiword_components(self): def check_multiword_components(self):
if self.is_multiword(): if self.is_multiword():
self.components[len(self.components) - 1].no_space = ComponentLexeme.LAST_COMPONENT_SPACE self.components[len(self.components) - 1].no_space = ComponentLexeme.LAST_COMPONENT_SPACE
@staticmethod
def new_multiword():
example = Example()
example.newly_created = True
example.edited = True
example.inner = MultiwordExample()
example.inner.cluster = ExampleClusters.first_empty_cluster()
example.inner.type = "type??"
empty_component = ComponentLexeme()
empty_component.role = "headword"
example.components.append(empty_component)
return example
def import_xml(self, example_xml): def import_xml(self, example_xml):
self.translations = from_container_list(example_xml.querySelectorAll("translationContainer")) self.translations = from_container_list(example_xml.querySelectorAll("translationContainer"))

View File

@ -89,7 +89,8 @@ def edit_example(example, sense):
h("div.three-fifth", {}, middle), h("div.three-fifth", {}, middle),
h("div.one-fifth", {}, list_of_right_buttons(idx, component))])) h("div.one-fifth", {}, list_of_right_buttons(idx, component))]))
return modal_template(divs, "Edit Example", (message.EditExampleText, example_original)) return modal_template(divs, "Edit Example",
(message.EditExampleText, example_original, sense))
def edit_variants(entry): def edit_variants(entry):

View File

@ -92,6 +92,7 @@ class View:
return h("span.popup-menu", { "style": style }, [ return h("span.popup-menu", { "style": style }, [
h("button.shyButton", { "on": {"click": msg(SenseMoveUp, sense)}}, ""), h("button.shyButton", { "on": {"click": msg(SenseMoveUp, sense)}}, ""),
h("button.shyButton", { "on": {"click": msg(SenseMoveDown, sense)}}, ""), h("button.shyButton", { "on": {"click": msg(SenseMoveDown, sense)}}, ""),
h("button.shyButton", { "on": {"click": msg(AddMultiwordExample, sense)}}, "+"),
h("button.shyButton", { "on": {"click": msg(SenseBin, sense)}}, "🗑")]) h("button.shyButton", { "on": {"click": msg(SenseBin, sense)}}, "🗑")])
elif type(menu_target) is Example: elif type(menu_target) is Example: