Beispiel #1
0
    def _create_renderables(self, child, view):

        cls = ""

        if child.tag in XMLFormFactory.controlClasses:
            cls = XMLFormFactory.controlClasses[child.tag]
        elif Registry.get_renderable(child.tag):
            cls = Registry.get_renderable(child.tag)
        else:
            cls = eval(child.tag.capitalize())

        kwargs = {}

        for elt in child.xpath("./property"):
            kwargs[elt.get("name")] = elt.text

        for elt in ["hint", "help", "alert"]:
            if child.xpath("./%s" % elt):
                kwargs[elt] = child.xpath("./%s" % elt)[0].text or ''

        if cls == Text:
            ctrl = cls(child.get("id"),
                       child.text,
                       bind=child.get("bind"),
                       **kwargs)

        elif cls.__name__ == "Hidden":
            ctrl = cls(child.get("id"), bind=child.get("bind"), **kwargs)

        elif cls == Submit:
            ctrl = cls(child.get("id"), child.find("label").text, **kwargs)
        elif cls == Group:
            cls = eval("%sGroup" % child.get("layout", "flow").capitalize())

            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"), label, **kwargs)
        else:
            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"),
                       label,
                       bind=child.get("bind"),
                       **kwargs)

        if hasattr(ctrl, "addOption"):

            for subchild in child.xpath("option"):
                ctrl.addOption(
                    Option(subchild.get("value"), subchild.text or ''))

        for subchild in child.xpath("|".join(
                Registry.get_registered_renderables())):

            self._create_renderables(subchild, ctrl)

        view.addRenderable(ctrl)
    def _create_renderables(self, child, view):

        cls = ""

        if child.tag in XMLFormFactory.controlClasses:
            cls = XMLFormFactory.controlClasses[child.tag]
        elif Registry.get_renderable(child.tag):
            cls = Registry.get_renderable(child.tag)
        else:
            cls = eval(child.tag.capitalize())

        kwargs = {}

        for attrib in child.keys():
            if attrib in kwargs_attrs:
                kwargs[attrib] = child.get(attrib)

        for elt in child.xpath("./property"):
            kwargs[elt.get("name")] = elt.text

        for elt in ["hint", "help", "alert", "placeholder"]:
            if child.xpath("./%s" % elt):
                kwargs[elt] = child.xpath("./%s" % elt)[0].text or ''

        if cls == Text:

            ctrl = cls(child.get("id"),
                       ''.join(child.xpath("./text()")),
                       **kwargs)

        elif cls == Hidden:
            ctrl = cls(child.get("id"),
                       **kwargs)

        elif cls == Submit:

            ctrl = cls(child.get("id"),
                       child.find("label").text,
                       **kwargs)
        elif cls == Group:

            layout_class = "%sGroup" % child.get("layout", "flow").capitalize()

            if Registry.get_renderable(layout_class.lower()):
                cls = Registry.get_renderable(layout_class.lower())
            else:
                cls = eval(layout_class)

            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"),
                       label,
                       **kwargs)
        else:
            label = ''

            try:
                label = child.find("label").text
            except:
                pass

            ctrl = cls(child.get("id"),
                       label,
                       **kwargs)

        if hasattr(ctrl, "addOption") and getattr(ctrl, "addOption"):

            for subchild in child.xpath("option"):
                if subchild.xpath("label"):
                    # assume only one
                    text = subchild.xpath("label")[0].text
                else:
                    text = subchild.text or ''

                ctrl.addOption(Option(subchild.get("value"), text))

        for subchild in child.xpath("|".join(
                Registry.get_registered_renderables())):
            self._create_renderables(subchild, ctrl)

        view.addRenderable(ctrl)