Compare commits
2 Commits
f26ea7c507
...
17a9ed1273
Author | SHA1 | Date | |
---|---|---|---|
17a9ed1273 | |||
69012044f8 |
@ -56,6 +56,8 @@ stylesheet = "dragonglass.css"
|
|||||||
[metadata]
|
[metadata]
|
||||||
# If true, use page title as default description.
|
# If true, use page title as default description.
|
||||||
description-title = false
|
description-title = false
|
||||||
|
# The language of the site, expressed as a RFC5646 language identifier.
|
||||||
|
lang = "en"
|
||||||
# The site base URL. If supplied, this will be added to a <base> element in the page metadata.
|
# The site base URL. If supplied, this will be added to a <base> element in the page metadata.
|
||||||
sitebase = ""
|
sitebase = ""
|
||||||
# The site title. If supplied, this will be included in page metadata and used to formulate the default title.
|
# The site title. If supplied, this will be included in page metadata and used to formulate the default title.
|
||||||
|
@ -1,20 +1,23 @@
|
|||||||
TEMPLATE VARIABLES PROVIDED BY DRAGONGLASS WHEN RENDERING A DOCUMENT
|
TEMPLATE VARIABLES PROVIDED BY DRAGONGLASS WHEN RENDERING A DOCUMENT
|
||||||
|
|
||||||
backlinks
|
backlinks:
|
||||||
A list of pages that link to the page being rendered. Formatted as a list of dicts with
|
A list of pages that link to the page being rendered. Formatted as a list of dicts with
|
||||||
two elements, "name" and "link", containing the page title and the link to it, respectively.
|
two elements, "name" and "link", containing the page title and the link to it, respectively.
|
||||||
|
|
||||||
default_stylesheet
|
default_stylesheet:
|
||||||
The filename of the default stylesheet which is generated by dragonglass and added to the
|
The filename of the default stylesheet which is generated by dragonglass and added to the
|
||||||
generated pages.
|
generated pages.
|
||||||
|
|
||||||
description
|
description:
|
||||||
The description of this page. May be empty.
|
The description of this page. May be empty.
|
||||||
|
|
||||||
dragonglass_version
|
dragonglass_version:
|
||||||
The version number of dragonglass.
|
The version number of dragonglass.
|
||||||
|
|
||||||
python_version
|
lang:
|
||||||
|
The configured site language, as a RFC5646 language identifier.
|
||||||
|
|
||||||
|
python_version:
|
||||||
The version number of Python that's running dragonglass.
|
The version number of Python that's running dragonglass.
|
||||||
|
|
||||||
site_base:
|
site_base:
|
||||||
@ -26,8 +29,8 @@ site_title:
|
|||||||
tags:
|
tags:
|
||||||
A list of all tags the page being rendered has, in sorted order.
|
A list of all tags the page being rendered has, in sorted order.
|
||||||
|
|
||||||
text
|
text:
|
||||||
The text of the page being rendered.
|
The text of the page being rendered.
|
||||||
|
|
||||||
title
|
title:
|
||||||
The title of the page being rendered.
|
The title of the page being rendered.
|
||||||
|
@ -121,14 +121,20 @@ class Context:
|
|||||||
@property
|
@property
|
||||||
def site_base(self) -> str | None:
|
def site_base(self) -> str | None:
|
||||||
"""Returns the configured site base URL."""
|
"""Returns the configured site base URL."""
|
||||||
generate_section = self.config.get("metadata", {})
|
metadata_section = self.config.get("metadata", {})
|
||||||
return generate_section.get("sitebase", None)
|
return metadata_section.get("sitebase", None)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def site_language(self) -> str:
|
||||||
|
"""Returns the defayult language for the site."""
|
||||||
|
metadata_section = self.config.get("metadata", {})
|
||||||
|
return metadata_section.get("lang", "en")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def site_title(self) -> str | None:
|
def site_title(self) -> str | None:
|
||||||
"""Returns the configured site title."""
|
"""Returns the configured site title."""
|
||||||
generate_section = self.config.get("metadata", {})
|
metadata_section = self.config.get("metadata", {})
|
||||||
return generate_section.get("sitetitle", None)
|
return metadata_section.get("sitetitle", None)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def url_prefix(self) -> str:
|
def url_prefix(self) -> str:
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from jinja2 import Environment, BaseLoader, ChoiceLoader, FunctionLoader, FileSystemLoader
|
from jinja2 import Environment, BaseLoader, ChoiceLoader, FunctionLoader, FileSystemLoader
|
||||||
from typing import Any
|
from typing import Any, Callable
|
||||||
from urllib.parse import quote as urlquote
|
from urllib.parse import quote as urlquote
|
||||||
|
|
||||||
from .config import Context, DEFAULT_TEMPLATE_NAME
|
from .config import Context, DEFAULT_TEMPLATE_NAME
|
||||||
@ -13,7 +13,7 @@ from ._version import __version__
|
|||||||
|
|
||||||
|
|
||||||
"""The default template used to render Markdown data."""
|
"""The default template used to render Markdown data."""
|
||||||
DEFAULT_TEMPLATE = """<html>
|
DEFAULT_TEMPLATE = """<html lang="{{ lang }}">
|
||||||
<head>
|
<head>
|
||||||
{% if site_title is defined %}
|
{% if site_title is defined %}
|
||||||
<title>{{ title }} - {{ site_title }}</title>
|
<title>{{ title }} - {{ site_title }}</title>
|
||||||
@ -21,6 +21,7 @@ DEFAULT_TEMPLATE = """<html>
|
|||||||
{% else %}
|
{% else %}
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<meta charset="utf-8"/>
|
||||||
{% if site_base is defined %}
|
{% if site_base is defined %}
|
||||||
<base href="{{ site_base }}"/>
|
<base href="{{ site_base }}"/>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -73,6 +74,28 @@ def _create_loader(ctxt: Context) -> BaseLoader:
|
|||||||
return ChoiceLoader(choices)
|
return ChoiceLoader(choices)
|
||||||
|
|
||||||
|
|
||||||
|
def makepath(ctxt: Context, node: SourceNode | None, s: str) -> str:
|
||||||
|
"""
|
||||||
|
Turn a string into a proper path reference, based on relative link settings and prefix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ctxt (Context): The context to use for the operation.
|
||||||
|
node (SourceNode): The current node being processed; if this is ``None``, it's taken from the context.
|
||||||
|
s (str): The string to interpret.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The resolved link.
|
||||||
|
"""
|
||||||
|
if not node:
|
||||||
|
node = ctxt.current_node
|
||||||
|
if ctxt.relative_links:
|
||||||
|
in_path = ctxt.source_dir / s
|
||||||
|
rel_path = ctxt.source_dir / node.path
|
||||||
|
return urlquote(in_path.relative_to(rel_path.parent, walk_up=True).as_posix())
|
||||||
|
else:
|
||||||
|
return urlquote(ctxt.url_prefix + s)
|
||||||
|
|
||||||
|
|
||||||
def create_template_environment(ctxt: Context) -> Environment:
|
def create_template_environment(ctxt: Context) -> Environment:
|
||||||
"""
|
"""
|
||||||
Create the template environment used to render the data to the destination.
|
Create the template environment used to render the data to the destination.
|
||||||
@ -83,7 +106,24 @@ def create_template_environment(ctxt: Context) -> Environment:
|
|||||||
Returns:
|
Returns:
|
||||||
Environment: The new template environment.
|
Environment: The new template environment.
|
||||||
"""
|
"""
|
||||||
return Environment(loader=_create_loader(ctxt))
|
tenv = Environment(loader=_create_loader(ctxt))
|
||||||
|
|
||||||
|
# Add global variables easily calculated.
|
||||||
|
tenv.globals['dragonglass_version'] = __version__
|
||||||
|
tenv.globals["python_version"] = f"{sys.version_info[0]}.{sys.version_info[1]}.{sys.version_info[2]}"
|
||||||
|
|
||||||
|
# Add values derived from configuration.
|
||||||
|
tenv.globals["lang"] = ctxt.site_language
|
||||||
|
t = ctxt.site_base
|
||||||
|
if t:
|
||||||
|
tenv.globals["site_base"] = t
|
||||||
|
t = ctxt.site_title
|
||||||
|
if t:
|
||||||
|
tenv.globals["site_title"] = t
|
||||||
|
|
||||||
|
# Add global functions.
|
||||||
|
tenv.globals['makepath'] = lambda s: makepath(ctxt, None, s)
|
||||||
|
return tenv
|
||||||
|
|
||||||
|
|
||||||
def template_vars(node: SourceNode, ctxt: Context) -> dict[str, Any]:
|
def template_vars(node: SourceNode, ctxt: Context) -> dict[str, Any]:
|
||||||
@ -103,18 +143,6 @@ def template_vars(node: SourceNode, ctxt: Context) -> dict[str, Any]:
|
|||||||
if not tvars["description"] and ctxt.description_title:
|
if not tvars["description"] and ctxt.description_title:
|
||||||
tvars["description"] = node.page_title
|
tvars["description"] = node.page_title
|
||||||
|
|
||||||
# Add easily-calculated "global" variables.
|
|
||||||
tvars["dragonglass_version"] = __version__
|
|
||||||
tvars["python_version"] = f"{sys.version_info[0]}.{sys.version_info[1]}.{sys.version_info[2]}"
|
|
||||||
|
|
||||||
# Add values derived from configuration.
|
|
||||||
t = ctxt.site_base
|
|
||||||
if t:
|
|
||||||
tvars["site_base"] = t
|
|
||||||
t = ctxt.site_title
|
|
||||||
if t:
|
|
||||||
tvars["site_title"] = t
|
|
||||||
|
|
||||||
# Compute backlinks for this node. Don't include nodes that aren't published.
|
# Compute backlinks for this node. Don't include nodes that aren't published.
|
||||||
backlinks = sorted([n for n in node.backlinks if n.publish], key=lambda n: n.page_title)
|
backlinks = sorted([n for n in node.backlinks if n.publish], key=lambda n: n.page_title)
|
||||||
tvars['backlinks'] = [{'title': n.page_title,
|
tvars['backlinks'] = [{'title': n.page_title,
|
||||||
@ -122,12 +150,7 @@ def template_vars(node: SourceNode, ctxt: Context) -> dict[str, Any]:
|
|||||||
for n in backlinks]
|
for n in backlinks]
|
||||||
|
|
||||||
# Add reference to the default stylesheet.
|
# Add reference to the default stylesheet.
|
||||||
if ctxt.relative_links:
|
tvars['default_stylesheet'] = makepath(ctxt, node, ctxt.default_stylesheet)
|
||||||
stylesheet_path = ctxt.source_dir / ctxt.default_stylesheet
|
|
||||||
rel_path = ctxt.source_dir / node.path
|
|
||||||
tvars['default_stylesheet'] = urlquote(stylesheet_path.relative_to(rel_path.parent, walk_up=True).as_posix())
|
|
||||||
else:
|
|
||||||
tvars['default_stylesheet'] = urlquote(ctxt.url_prefix + ctxt.default_stylesheet)
|
|
||||||
|
|
||||||
return tvars
|
return tvars
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user