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)
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)
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)
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>")
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>")
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)
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)
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)
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>")
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>", })
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")
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")
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")