You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lexonomy_custom_editor/src/view/modal_templates.py

125 lines
4.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import message
from lib.snabbdom import h
from model.tags import TAGS
from browser import document
def modal_template(content, title, msg, delete_msg=None):
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("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)}}, "🗑"))
return [
h("header", {}, [
h("h3", {}, title),
h("label.close", {"on": {"click": reset}}, "×")]),
h("section.content", {}, content ),
h("footer", {}, footer)]
def _question(question, current_value, input_element):
props = {"value": current_value}
if input_element == "input":
props["type"] = "text"
return [
h("span", {}, question),
h("label", {}, [
h("{}#modal-question".format(input_element), {"props": props}, "")])]
def big_question(question, current_value):
return _question(question, current_value, "textarea")
def question(question, current_value):
return _question(question, current_value, "input")
def generic_list_editor(title, element_list_getter):
content = [h("p", {}, title)]
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)}}, "+"))
return content
def homonymy_editor(title, current_labels):
def split_line2(left, right):
cls = "flex.two{}".format(".label-list-row")
return h("div.{}".format(cls), {}, [
h("span.half", {}, left), h("span.half", {}, right)])
content = [h("p", {}, title)]
for i, feature in enumerate(current_labels()):
console.log(feature)
console.log(feature["name"])
name = [h("div", {})]
value = [h("div", {})]
name.append(h("label", {"attrs": {"for": i}}, "Name:"))
name.append(h("input.list-adder-input", {"props": {"type": "text", "value": feature["name"], "id": i}}, ""))
value.append(h("label", {"attrs": {"for": i + "-value"}}, "Value:"))
value.append(h("input.list-adder-input", {"props": {"type": "text", "value": feature["value"], "id": i + "-value"}}, ""))
content.append(split_line2(name, value))
content.append(h("button", {"on": {"click": message.msg(message.AddToGenericList, current_labels)}}, "+"))
return content
def label_list_editor(current_labels, add_label_message_class):
console.log(current_labels)
console.log(add_label_message_class)
def split_line3(left, center, right, is_llr=True):
cls = "flex.three{}".format(".label-list-row" if is_llr else "")
return h("div.{}".format(cls), {}, [
h("span.third", {}, left), h("span.third", {}, center), h("span.third", {}, right)])
def dropdown_right(label_type, label):
left = h("span.label-type", {}, label_type)
options = [h("option", {}, [])]
for value in TAGS[label_type]:
options.append(h("option", {"props": {"selected": label == value}}, value))
center = h("select.label-value", {}, options)
right_value = label if label not in TAGS[label_type] else ""
right = h("input.label-value-other",
{"props": {"type": "text", "value": right_value, "placeholder": "drugo"}},
[])
return split_line3(left, center, right)
content = []
kontrastivno = False
for key, value in current_labels:
# we will show kontrastivno a bit differently
if value == "kontrastivno":
kontrastivno = True
continue
content.append(dropdown_right(key, value))
# add a way to get new element to add to tag list
def get_new_label_type():
select = document.getElementById("new-tag-select")
return (select.options[select.selectedIndex].text, "")
add_label_message_class.append(get_new_label_type)
content.append(split_line3(
h("", {}, []),
h("label", {}, [
h("input#kontrastivno-input", {"props": {"type": "checkbox", "checked": kontrastivno}}, []),
h("span.checkable", {}, "kontrastivno")]),
h("", {}, [])))
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)}}, "+")
content.append(split_line3(left, center, right, False))
content.append(h("hr", {}, []))
return content