from abc import ABC, abstractmethod from .admin import AdminController from owrx.config import Config class Input(ABC): def __init__(self, id, label, infotext=None): self.id = id self.label = label self.infotext = infotext def bootstrap_decorate(self, input): infotext = "{text}".format(text=self.infotext) if self.infotext else "" return """
{input} {infotext}
""".format(id=self.id, label=self.label, input=input, infotext=infotext) def input_classes(self): return " ".join(["form-control", "form-control-sm"]) @abstractmethod def render_input(self, value): pass def render(self, config): return self.bootstrap_decorate(self.render_input(config[self.id])) class TextInput(Input): def render_input(self, value): return """ """.format(id=self.id, label=self.label, classes=self.input_classes(), value=value) class LocationInput(Input): def render_input(self, value): # TODO make this work and pretty return "Placeholder for a map widget to select receiver location" class TextAreaInput(Input): def render_input(self, value): return """ """.format(id=self.id, classes=self.input_classes(), value=value) class SettingsController(AdminController): inputs = [ TextInput("receiver_name", "Receiver name"), TextInput("receiver_location", "Receiver location"), TextInput("receiver_asl", "Receiver elevation", infotext="Elevation in meters above mean see level"), TextInput("receiver_admin", "Receiver admin"), LocationInput("receiver_gps", "Receiver coordinates"), TextInput("photo_title", "Photo title"), TextAreaInput("photo_desc", "Photo description") ] def indexAction(self): self.serve_template("admin.html", **self.template_variables()) def render_form(self): config = Config.get() inputs = "".join([i.render(config) for i in SettingsController.inputs]) return "
{inputs}
".format(inputs=inputs) def template_variables(self): variables = super().template_variables() variables["form"] = self.render_form() return variables