Source code for ll.xist.ns.meta

# -*- coding: utf-8 -*-
# cython: language_level=3, always_allow_keywords=True

## Copyright 1999-2024 by LivingLogic AG, Bayreuth/Germany
## Copyright 1999-2024 by Walter Dörwald
##
## All Rights Reserved
##
## See ll/xist/__init__.py for the license


"""
An XIST module that contains elements that simplify handling meta data. All
elements in this module will generate a :class:`ll.xist.ns.html.meta` element
when converted.
"""


from ll.xist import xsc, sims
from ll.xist.ns import html


__docformat__ = "reStructuredText"


xmlns = "http://xmlns.livinglogic.de/xist/ns/meta"


[docs] class contenttype(html.meta): """ Can be used for a ``<meta http-equiv="Content-Type" content="text/html"/>``, where the character set will be automatically inserted on a call to :meth:`ll.xist.xsc.Node.publish`. Usage is simple: ``meta.contenttype()``. """ xmlns = xmlns class Attrs(html.meta.Attrs): http_equiv = None name = None content = None class mimetype(xsc.TextAttr): required = True default = "text/html" def convert(self, converter): target = converter.target if target.xmlns == html.xmlns: e = target.meta( self.attrs.withoutnames("mimetype"), http_equiv="Content-Type", content=self["mimetype"], ) else: raise ValueError(f"unknown conversion target {target!r}") return e.convert(converter) def publish(self, publisher): # fall back to the Element method return xsc.Element.publish(self, publisher) # return a generator-iterator
[docs] class contentscripttype(html.meta): """ Can be used for a ``<meta http-equiv="Content-Script-Type" content="..."/>``. Usage is simple: ``<markup>meta.contentscripttype(type="text/javascript")``. """ xmlns = xmlns class Attrs(html.meta.Attrs): http_equiv = None name = None content = None class type(xsc.TextAttr): pass def convert(self, converter): e = html.meta(self.attrs.withoutnames("type")) e.attrs["http-equiv"] = "Content-Script-Type" e.attrs["content"] = self["type"] return e.convert(converter)
[docs] class keywords(html.meta): """ Can be used for a ``<meta name="keywords" content="..."/>``. Usage is simple: ``meta.keywords("foo, bar")``. """ xmlns = xmlns model = sims.NoElements() class Attrs(html.meta.Attrs): http_equiv = None name = None content = None def convert(self, converter): e = html.meta(self.attrs) e.attrs["name"] = "keywords" e.attrs["content"] = self.content return e.convert(converter)
[docs] class description(html.meta): """ Can be used for a ``<meta name="description" content="..."/>``. Usage is simple: ``meta.description("This page describes the ...")``. """ xmlns = xmlns model = sims.NoElements() class Attrs(html.meta.Attrs): http_equiv = None name = None content = None def convert(self, converter): e = html.meta(self.attrs) e.attrs["name"] = "description" e.attrs["content"] = self.content return e.convert(converter)
[docs] class stylesheet(html.link): """ Can be used for a ``<link rel="stylesheet" type="text/css" href="..."/>``. Usage is simple: ``meta.stylesheet(href="root:stylesheets/main.css")``. """ xmlns = xmlns class Attrs(html.link.Attrs): rel = None type = None def convert(self, converter): e = html.link(self.attrs, rel="stylesheet", type="text/css") return e.convert(converter)
[docs] class made(html.link): """ Can be used for a ``<link rel="made" href="mailto:..."/>``. Usage is simple: ``meta.made(href="foobert@bar.org")``. """ xmlns = xmlns class Attrs(html.link.Attrs): rel = None def convert(self, converter): e = html.link(self.attrs, rel="made", href=("mailto:", self["href"])) return e.convert(converter)
[docs] class author(xsc.Element): """ Can be used to embed author information in the header. It will generate ``<link rel="made"/>`` and ``<meta name="author"/>`` elements. """ xmlns = xmlns model = sims.Empty() class Attrs(xsc.Element.Attrs): class lang(xsc.TextAttr): pass class name(xsc.TextAttr): pass class email(xsc.TextAttr): pass def convert(self, converter): e = xsc.Frag() if "name" in self.attrs: e.append(html.meta(name="author", content=self.attrs["name"])) if "lang" in self.attrs: e[-1].attrs["lang"] = self["lang"] if "email" in self.attrs: e.append(html.link(rel="made", href=("mailto:", self["email"]))) return e.convert(converter)
[docs] class refresh(xsc.Element): """ A refresh header. """ xmlns = xmlns model = sims.Empty() class Attrs(xsc.Element.Attrs): class secs(xsc.IntAttr): default = 0 class href(xsc.URLAttr): pass def convert(self, converter): e = html.meta(http_equiv="Refresh", content=(self.attrs["secs"], "; url=", self.attrs["href"])) return e.convert(converter)