Render CLDF markdown in clld apps
Include (and configure the plugin) in your app's main function:
def main(global_config, **settings):
settings['clld_markdown_plugin'] = {
'model_map': {'ValueTable': common.ValueSet},
'function_map': {}
}
config = Configurator(settings=settings)
config.include('clld.web.app')
...
config.include('clld_markdown_plugin')Then you can use clld_markdown_plugin.markup as follows in your templates:
<%! from clld_markdown_plugin import markdown %>
${markdown(req, '[x](LanguageTable#cldf:abad1241)')|n}By default, links to objects in the CLDF dataset will be rendered as HTML links to the corresponding object's details page in the clld app.
The plugin can be configured via the following four configuration options:
model_map: Adictmapping CLDF component names to DB model classes defined for the app. This allows for a flexible mapping between CLDF components and the clld DB classes.renderer_map: See below for details.extensions: A list of markdown extensions in dot notation, to be activated when calling themarkdownfunction.keep_link_labels: Abooleanindicating whether to keep link labels as they appear in the CLDF Markdown text. By default (False), labels will be substituted using the linked object's name.
The renderer_map configuration option for clld_markdown_plugin accepts a dict mapping
CLDF component names to Python callables with the following signature:
import clld.web.app
def renderer(req: clld.web.app.ClldRequest, objid: str, table, session: clld.db.meta.DBSession, ids=None) -> str:
"""
The returned `str` is interpreted as Markdown, so it may also include HTML.
"""