예제 #1
0
파일: resources.py 프로젝트: ruqaiya/shuup
    def _render_resource(self, resource):
        """
        Render a single resource.

        :param resource: The resource.
        :type resource: str|InlineMarkupResource|InlineScriptResource
        :return: String of HTML
        """
        if not resource:  # pragma: no cover
            return ""

        if isinstance(resource, JinjaMarkupResource):
            return resource.render()

        if isinstance(resource, InlineMarkupResource):
            return force_text(resource)

        if isinstance(resource, InlineStyleResource):
            return '<style type="text/css">%s</style>' % resource

        if isinstance(resource, InlineScriptResource):
            return "<script>%s</script>" % resource

        resource = force_text(resource)

        # TODO: should this be extensible?

        if resource.endswith(".js"):
            return "<script%s></script>" % get_html_attrs({"src": resource})

        if resource.endswith(".css"):
            return "<link%s>" % get_html_attrs({"href": resource, "rel": "stylesheet"})

        return "<!-- (unknown resource type: %s) -->" % escape(resource)
예제 #2
0
    def _render_resource(self, resource):
        """
        Render a single resource.

        :param resource: The resource.
        :type resource: str|InlineMarkupResource|InlineScriptResource
        :return: String of HTML
        """
        if not resource:  # pragma: no cover
            return ""

        if isinstance(resource, InlineMarkupResource):
            return force_text(resource)

        if isinstance(resource, InlineScriptResource):
            return "<script>%s</script>" % resource

        resource = force_text(resource)

        # TODO: should this be extensible?

        if resource.endswith(".js"):
            return "<script%s></script>" % get_html_attrs({"src": resource})

        if resource.endswith(".css"):
            return "<link%s>" % get_html_attrs({
                "href": resource,
                "rel": "stylesheet"
            })

        return "<!-- (unknown resource type: %s) -->" % escape(resource)
예제 #3
0
    def render(self):
        """
        Get this placeholder's rendered contents.

        :return: Rendered markup.
        :rtype: markupsafe.Markup
        """
        if not may_inject(self.context):
            return ""

        full_content = ""
        for layout in self.layouts:
            wrapper_start = "<div%s>" % get_html_attrs(
                self._get_wrapper_attrs(layout))
            buffer = []
            write = buffer.append
            self._render_layout(write, layout)
            content = "".join(buffer)
            full_content += ("%(wrapper_start)s%(content)s%(wrapper_end)s" % {
                "wrapper_start": wrapper_start,
                "content": content,
                "wrapper_end": "</div>",
            })

        return Markup(full_content)
예제 #4
0
파일: rendering.py 프로젝트: zarlant/shuup
    def _render_cell(self, write, x, cell):
        """
        Render a layout cell into HTML.

        :param write: Writer function
        :type write: callable
        :param x: Cell X coordinate
        :type x: int
        :param cell: Cell
        :type cell: shuup.xtheme.view_config.LayoutCell
        """
        classes = ["xt-ph-cell"]
        for breakpoint, width in cell.sizes.items():
            if width is None:
                continue
            if width <= 0:
                classes.append(self.layout.hide_cell_class_template % {
                    "breakpoint": breakpoint,
                    "width": width
                })
            else:
                classes.append(self.layout.cell_class_template % {
                    "breakpoint": breakpoint,
                    "width": width
                })
        cell_attrs = {"class": classes}
        if self.edit:
            cell_attrs.update({"data-xt-cell": str(x)})
        write("<div%s>" % get_html_attrs(cell_attrs))
        content = cell.render(self.context)
        if content is not None:  # pragma: no branch
            write(force_text(content))
        write("</div>")
예제 #5
0
파일: rendering.py 프로젝트: gurch101/shuup
    def _render_cell(self, write, x, cell):
        """
        Render a layout cell into HTML.

        :param write: Writer function
        :type write: callable
        :param x: Cell X coordinate
        :type x: int
        :param cell: Cell
        :type cell: shuup.xtheme.view_config.LayoutCell
        """
        classes = ["xt-ph-cell"]
        for breakpoint, width in cell.sizes.items():
            if width is None:
                continue
            if width <= 0:
                classes.append(self.layout.hide_cell_class_template % {"breakpoint": breakpoint, "width": width})
            else:
                classes.append(self.layout.cell_class_template % {"breakpoint": breakpoint, "width": width})

        classes.append(cell.align)

        cell_attrs = {
            "class": classes
        }
        if self.edit:
            cell_attrs.update({"data-xt-cell": str(x)})
        write("<div%s>" % get_html_attrs(cell_attrs))
        content = cell.render(self.context)
        if content is not None:  # pragma: no branch
            write(force_text(content))
        write("</div>")
예제 #6
0
파일: rendering.py 프로젝트: ruqaiya/shuup
    def render(self):
        """
        Get this placeholder's rendered contents.

        :return: Rendered markup.
        :rtype: markupsafe.Markup
        """
        if not may_inject(self.context):
            return ""

        full_content = ""
        for layout in self.layouts:
            wrapper_start = "<div%s>" % get_html_attrs(self._get_wrapper_attrs(layout))
            buffer = []
            write = buffer.append
            self._render_layout(write, layout)
            content = "".join(buffer)
            full_content += (
                "%(wrapper_start)s%(content)s%(wrapper_end)s" % {
                    "wrapper_start": wrapper_start,
                    "content": content,
                    "wrapper_end": "</div>",
                })

        return Markup('<div class="placeholder-edit-wrap">%s</div>' % full_content)
예제 #7
0
파일: rendering.py 프로젝트: rhocom/shuup
    def render(self):
        """
        Get this placeholder's rendered contents.

        :return: Rendered markup.
        :rtype: markupsafe.Markup
        """
        language = get_language()

        if not may_inject(self.context):
            return ""

        full_content = ""
        saved_view_config = self.view_config.saved_view_config
        for layout in self.layouts:
            cache_key = slugify(
                "shuup_xtheme_placeholders:placeholder_%s_%s_%s_%s_%s_%s" % (
                    (saved_view_config.pk if saved_view_config else ""),
                    (saved_view_config.status if saved_view_config else ""),
                    (
                        saved_view_config.modified_on.isoformat()
                        if saved_view_config and saved_view_config.modified_on
                        else ""
                    ),
                    language,
                    self.placeholder_name,
                    get_layout_data_key(self.placeholder_name, layout, self.context)
                )
            )
            layout_content = cache.get(cache_key)
            if (
                settings.SHUUP_XTHEME_USE_PLACEHOLDER_CACHE and
                saved_view_config and
                saved_view_config.status == SavedViewConfigStatus.PUBLIC and
                layout_content
            ):
                full_content += layout_content
            else:
                wrapper_start = "<div%s>" % get_html_attrs(self._get_wrapper_attrs(layout))
                buffer = []
                write = buffer.append
                self._render_layout(write, layout)
                content = "".join(buffer)
                layout_content = (
                    "%(wrapper_start)s%(content)s%(wrapper_end)s" % {
                        "wrapper_start": wrapper_start,
                        "content": content,
                        "wrapper_end": "</div>",
                    })
                cache.set(cache_key, layout_content)
                full_content += layout_content

        return Markup('<div class="placeholder-edit-wrap">%s</div>' % full_content)
예제 #8
0
    def _render_resource(self, resource):
        """
        Render a single resource.

        :param resource: The resource.
        :type resource: str|InlineMarkupResource|InlineScriptResource
        :return: String of HTML.
        """
        if not resource:  # pragma: no cover
            return ""

        if isinstance(resource, JinjaMarkupResource):
            return resource.render()

        if isinstance(resource, InlineMarkupResource):
            return force_text(resource)

        if isinstance(resource, InlineStyleResource):
            return '<style type="text/css">%s</style>' % resource

        if isinstance(resource, InlineScriptResource):
            return "<script>%s</script>" % resource

        resource = force_text(resource)

        from six.moves.urllib.parse import urlparse

        file_path = urlparse(resource)
        file_name = os.path.basename(file_path.path)

        if file_name.endswith(".js"):
            return "<script%s></script>" % get_html_attrs({"src": resource})

        if file_name.endswith(".css"):
            return "<link%s>" % get_html_attrs({
                "href": resource,
                "rel": "stylesheet"
            })

        return "<!-- (unknown resource type: %s) -->" % escape(resource)
예제 #9
0
 def _render_default_layout_script_tag(self, write):
     # This script tag is read by editor.js
     write("<script%s>" % get_html_attrs({
         "class": "xt-ph-default-layout",
         "type": "text/plain"
     }))
     layout = self.default_layout
     if hasattr(layout, "serialize"):
         layout = layout.serialize()
     # TODO: Might have to do something about ..
     # TODO: .. http://www.w3.org/TR/html5/scripting-1.html#restrictions-for-contents-of-script-elements
     write(TaggedJSONEncoder(separators=",:").encode(layout))
     write("</script>")
예제 #10
0
파일: rendering.py 프로젝트: gurch101/shuup
 def _render_default_layout_script_tag(self, write):
     # This script tag is read by editor.js
     write("<script%s>" % get_html_attrs({
         "class": "xt-ph-default-layout",
         "type": "text/plain"
     }))
     layout = self.default_layout
     if hasattr(layout, "serialize"):
         layout = layout.serialize()
     # TODO: Might have to do something about ..
     # TODO: .. http://www.w3.org/TR/html5/scripting-1.html#restrictions-for-contents-of-script-elements
     write(TaggedJSONEncoder(separators=",:").encode(layout))
     write("</script>")
예제 #11
0
파일: rendering.py 프로젝트: gurch101/shuup
    def render(self):
        """
        Get this placeholder's rendered contents.

        :return: Rendered markup.
        :rtype: markupsafe.Markup
        """
        wrapper_start = "<div%s>" % get_html_attrs(self._get_wrapper_attrs())
        buffer = []
        write = buffer.append
        self._render_layout(write)
        content = "".join(buffer)
        return Markup("%(wrapper_start)s%(content)s%(wrapper_end)s" % {
            "wrapper_start": wrapper_start,
            "content": content,
            "wrapper_end": "</div>",
        })
예제 #12
0
    def render(self):
        """
        Get this placeholder's rendered contents.

        :return: Rendered markup.
        :rtype: markupsafe.Markup
        """
        wrapper_start = "<div%s>" % get_html_attrs(self._get_wrapper_attrs())
        buffer = []
        write = buffer.append
        self._render_layout(write)
        content = "".join(buffer)
        return Markup("%(wrapper_start)s%(content)s%(wrapper_end)s" % {
            "wrapper_start": wrapper_start,
            "content": content,
            "wrapper_end": "</div>",
        })
예제 #13
0
    def _render_row(self, write, layout, y, row):
        """
        Render a layout row into HTML.

        :param write: Writer function
        :type write: callable
        :param y: Row Y coordinate
        :type y: int
        :param row: Row object
        :type row: shuup.xtheme.view_config.LayoutRow
        """
        row_attrs = {"class": [layout.row_class, "xt-ph-row"]}
        if self.edit:
            row_attrs["data-xt-row"] = str(y)
        write("<div%s>" % get_html_attrs(row_attrs))
        for x, cell in enumerate(row):
            self._render_cell(write, layout, x, cell)
        write("</div>\n")
예제 #14
0
파일: rendering.py 프로젝트: gurch101/shuup
    def _render_row(self, write, y, row):
        """
        Render a layout row into HTML.

        :param write: Writer function
        :type write: callable
        :param y: Row Y coordinate
        :type y: int
        :param row: Row object
        :type row: shuup.xtheme.view_config.LayoutRow
        """
        row_attrs = {
            "class": [self.layout.row_class, "xt-ph-row"]
        }
        if self.edit:
            row_attrs["data-xt-row"] = str(y)
        write("<div%s>" % get_html_attrs(row_attrs))
        for x, cell in enumerate(row):
            self._render_cell(write, x, cell)
        write("</div>\n")
예제 #15
0
    def _render_row(self, write, layout, y, row):
        """
        Render a layout row into HTML.

        :param write: Writer function
        :type write: callable
        :param y: Row Y coordinate
        :type y: int
        :param row: Row object
        :type row: shuup.xtheme.view_config.LayoutRow
        """
        row_attrs = {"class": [layout.row_class, "xt-ph-row"]}
        if self.edit:
            row_attrs["data-xt-row"] = str(y)
        write("<div%s>" % get_html_attrs(row_attrs))

        language = get_language()
        saved_view_config = self.view_config.saved_view_config

        for x, cell in enumerate(row):
            cache_key_prefix = slugify(
                "{x}_{y}_{pk}_{status}_{modified_on}_{lang}_{placeholder}_{data_key}"
                .format(
                    x=x,
                    y=y,
                    pk=(saved_view_config.pk if saved_view_config else ""),
                    status=(saved_view_config.status
                            if saved_view_config else ""),
                    modified_on=(saved_view_config.modified_on.isoformat()
                                 if saved_view_config
                                 and saved_view_config.modified_on else ""),
                    lang=language,
                    placeholder=self.placeholder_name,
                    data_key=get_layout_data_key(self.placeholder_name, layout,
                                                 self.context),
                ))
            self._render_cell(write, layout, x, cell, cache_key_prefix)

        write("</div>\n")