definitionList UI support
This commit is contained in:
parent
a571a9ceb1
commit
30d0709781
|
@ -125,11 +125,11 @@ def export_sense(doc, sense):
|
|||
definition_list = doc.createElement("definitionList")
|
||||
sense_xml.appendChild(definition_list)
|
||||
|
||||
for typ, text in sense.definition.items():
|
||||
definition = doc.createElement("definition")
|
||||
definition.textContent = text
|
||||
definition.setAttribute("type", typ)
|
||||
definition_list.appendChild(definition)
|
||||
for definition in sense.definitions:
|
||||
definition_xml = doc.createElement("definition")
|
||||
definition_xml.textContent = definition["value"]
|
||||
definition_xml.setAttribute("type", definition["type"])
|
||||
definition_list.appendChild(definition_xml)
|
||||
|
||||
translation_container_list = doc.createElement("translationContainerList")
|
||||
export_translation_list(doc, sense, translation_container_list)
|
||||
|
|
|
@ -26,6 +26,11 @@ def double_list_getter(firstParameter, secondParameter, allowEmptyField = False)
|
|||
|
||||
return result
|
||||
|
||||
def definitions_getter():
|
||||
result = {}
|
||||
result["indicator"] = document.getElementById("indicator-input").value
|
||||
result["explanation"] = document.getElementById("explanation-input").value
|
||||
return result
|
||||
|
||||
def label_list_getter():
|
||||
result = []
|
||||
|
|
|
@ -16,6 +16,7 @@ class ShowSenseLabelEdit(ClickMessage):
|
|||
class ShowSenseDefinitionEdit(ClickMessage):
|
||||
def update_model(self, model):
|
||||
model.sense = self.get_arg(0, Sense)
|
||||
model.sense.make_copy()
|
||||
model.modal_set(lambda: modals.edit_sense_definition(model.sense))
|
||||
|
||||
|
||||
|
|
|
@ -43,15 +43,42 @@ class AddToLabelList(NoReset):
|
|||
class AddSense(Message):
|
||||
def update_model(self, model):
|
||||
sense = Sense()
|
||||
sense.definition = {"indicator": "New Sense"}
|
||||
sense.definitions = [{"type": "indicator", "value": "Nov pomen"}]
|
||||
model.entry.senses.append(sense)
|
||||
|
||||
|
||||
class EditSenseDefinition(QuestionMessage):
|
||||
class EditSenseDefinition(Message):
|
||||
def update_model(self, model):
|
||||
sense = self.get_arg(0, Sense)
|
||||
sense.definition["indicator"] = self.new_text
|
||||
definitions_values = common_accessors.definitions_getter()
|
||||
indicator = None
|
||||
explanation = None
|
||||
|
||||
for x in sense.definitions:
|
||||
if indicator is None and x["type"] == "indicator":
|
||||
indicator = x
|
||||
if explanation is not None:
|
||||
break
|
||||
if explanation is None and x["type"] == "explanation":
|
||||
explanation = x
|
||||
if indicator is not None:
|
||||
break
|
||||
|
||||
if definitions_values["indicator"] != "":
|
||||
if indicator is None:
|
||||
indicator = {"type": "indicator"}
|
||||
sense.definitions.append(indicator)
|
||||
indicator["value"] = definitions_values["indicator"]
|
||||
elif indicator is not None:
|
||||
sense.definitions.remove(indicator)
|
||||
|
||||
if definitions_values["explanation"] != "":
|
||||
if explanation is None:
|
||||
explanation = {"type": "explanation"}
|
||||
sense.definitions.append(explanation)
|
||||
explanation["value"] = definitions_values["explanation"]
|
||||
elif explanation is not None:
|
||||
sense.definitions.remove(explanation)
|
||||
|
||||
class EditComment(QuestionMessage):
|
||||
def update_model(self, model):
|
||||
|
|
|
@ -12,7 +12,7 @@ class Sense(Data):
|
|||
def __init__(self):
|
||||
self.original_idx = -1
|
||||
self.id = None
|
||||
self.definition = {}
|
||||
self.definitions = []
|
||||
self.labels = []
|
||||
self.translations = []
|
||||
self.examples = []
|
||||
|
@ -21,9 +21,7 @@ class Sense(Data):
|
|||
self.original_idx = idx
|
||||
self.id = sense_xml.getAttribute("id") if sense_xml.hasAttribute("id") else None
|
||||
|
||||
for definition in sense_xml.querySelectorAll("definitionList definition"):
|
||||
key = definition.getAttribute("type")
|
||||
self.definition[key] = definition.textContent
|
||||
self.definitions = [{"value": v.textContent, "type": v.getAttribute("type")} for v in sense_xml.querySelectorAll("definitionList definition")]
|
||||
|
||||
self.labels = import_label_list("sense > labelList label", sense_xml)
|
||||
self.translations = from_container_list(
|
||||
|
@ -39,13 +37,18 @@ class Sense(Data):
|
|||
|
||||
def view(self, model, sense_num):
|
||||
examples = [example.view(model, self) for example in self.examples]
|
||||
definition = ""
|
||||
for x in self.definitions:
|
||||
if x["type"] == "indicator":
|
||||
definition = x.value
|
||||
break
|
||||
|
||||
result = h("div.elm-div", {}, [
|
||||
h("div.sense-num", {"on": {"click": M.msg(M.ShowSenseMenu, self)}}, str(sense_num + 1)),
|
||||
h("div.sense", {}, [
|
||||
h("span.sense-label-list", { "on": { "click": M.msg(M.ShowSenseLabelEdit, self) }}, [
|
||||
h("span.sense-label", {}, clean_label(slabel)) for _, slabel in self.labels ]),
|
||||
h("span.sense-definition", { "on": { "click": M.msg(M.ShowSenseDefinitionEdit, self) }}, self.definition["indicator"]),
|
||||
h("span.sense-definition", { "on": { "click": M.msg(M.ShowSenseDefinitionEdit, self) }}, definition),
|
||||
h("div", {}, View.view_translations(self.translations, self, model)),
|
||||
h("div", {}, examples)])])
|
||||
return result
|
||||
|
|
|
@ -11,7 +11,7 @@ def modal_template(content, title, msg, delete_msg=None):
|
|||
if msg is not None:
|
||||
footer.append(h("a#modal-ok.button", {"on": {"click": message.msg(*msg)}}, "OK"))
|
||||
|
||||
footer.append(h("label.button.dangerous", {"on": {"click": reset}}, "Cancel"))
|
||||
footer.append(h("label.button.dangerous", {"on": {"click": reset}}, "Prekliči"))
|
||||
if delete_msg is not None:
|
||||
footer.append(h("label.button.warning.modal-delete", {"on": {"click": message.msg(*delete_msg)}}, "🗑"))
|
||||
|
||||
|
@ -47,6 +47,34 @@ def generic_list_editor(title, element_list_getter):
|
|||
content.append(h("button", {"on": {"click": message.msg(message.AddToGenericList, element_list_getter)}}, "+"))
|
||||
return content
|
||||
|
||||
def generic_key_value_editor(title, element_list_getter, key, value = "value"):
|
||||
def split_line2(left, right):
|
||||
cls = "flex.two{}".format(".double-list-row")
|
||||
return h("div.{}".format(cls), {}, [
|
||||
h("div.half", {}, left), h("div.half", {}, right)])
|
||||
content = [h("p", {}, title)]
|
||||
for i, element in enumerate(element_list_getter()):
|
||||
keys = []
|
||||
values = []
|
||||
keys.append(h("label", {"attrs": {"for": i}}, key.capitalize() + ":"))
|
||||
keys.append(h("input." + key + "-input", {"props": {"type": "text", "value": element[key], "id": i}}, ""))
|
||||
values.append(h("label", {"attrs": {"for": i + "-value"}}, "Value:"))
|
||||
values.append(
|
||||
h("input.value-input", {"props": {"type": "text", "value": element[value], "id": i + "-value"}}, ""))
|
||||
content.append(split_line2(keys, values))
|
||||
content.append(h("button", {"on": {"click": message.msg(message.AddToGenericList, element_list_getter)}}, "+"))
|
||||
return content
|
||||
|
||||
def sense_definitions_editor(title, type_value, explanation_value):
|
||||
type_props = {"value": type_value, "type": "text"}
|
||||
explanation_props = {"value": explanation_value, "type": "text"}
|
||||
return [
|
||||
h("span", {}, "Indikator:"),
|
||||
h("label", {}, [h("input#indicator-input", {"props": type_props}, "")]),
|
||||
h("span", {}, "Razlaga:"),
|
||||
h("label", {}, [h("input#explanation-input", {"props": explanation_props}, "")])
|
||||
]
|
||||
|
||||
def homonymy_editor(title, current_labels):
|
||||
def split_line2(left, right):
|
||||
cls = "flex.two{}".format(".double-list-row")
|
||||
|
|
|
@ -109,10 +109,9 @@ def edit_variants(entry):
|
|||
|
||||
def edit_homonymy(entry):
|
||||
hget = lambda: entry.copy().homonymy
|
||||
content = homonymy_editor("Homonymy", hget)
|
||||
content = generic_key_value_editor("Homonymy", hget, "name")
|
||||
return modal_template(content, "Add or remove homonymy features", (message.EditHomonymy,), (message.DeleteHomonymy,))
|
||||
|
||||
|
||||
def edit_related_entries(entry):
|
||||
reget = lambda: entry.copy().related_entries
|
||||
content = generic_list_editor("Related entries", reget)
|
||||
|
@ -125,7 +124,19 @@ def edit_entry_labels(entry):
|
|||
|
||||
|
||||
def edit_sense_definition(sense):
|
||||
return modal_template(question("Edit sense definition", sense.definition["indicator"]), "Sense definition", (message.EditSenseDefinition, sense))
|
||||
indicator = ""
|
||||
explanation = ""
|
||||
for x in sense.copy().definitions:
|
||||
if indicator == "" and x["type"] == "indicator":
|
||||
indicator = x.value
|
||||
if explanation is not "":
|
||||
break
|
||||
if explanation == "" and x["type"] == "explanation":
|
||||
explanation = x.value
|
||||
if indicator is not "":
|
||||
break
|
||||
content = sense_definitions_editor(indicator, explanation)
|
||||
return modal_template(content, "Definicije pomena", (message.EditSenseDefinition, sense))
|
||||
|
||||
|
||||
def edit_comment(comment):
|
||||
|
|
Loading…
Reference in New Issue
Block a user