57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
"""
|
|
Speakerdeck Tag
|
|
---------------
|
|
This implements a Liquid-style speakerdeck tag for Pelican.
|
|
|
|
Syntax
|
|
------
|
|
{% speakerdeck id %}
|
|
|
|
Example
|
|
-------
|
|
{% speakerdeck 82b209c0f181013106da6eb14261a8ef %}
|
|
|
|
Output
|
|
------
|
|
<script
|
|
async
|
|
class="speakerdeck-embed"
|
|
data-id="82b209c0f181013106da6eb14261a8ef"
|
|
data-ratio="1.33333333333333"
|
|
src="//speakerdeck.com/assets/embed.js">
|
|
</script>
|
|
"""
|
|
import re
|
|
|
|
from .mdx_liquid_tags import LiquidTags
|
|
|
|
SYNTAX = "{% speakerdeck id [ratio] %}"
|
|
|
|
REGEX = re.compile(r'([\S]+)(\s+(\d*\.?\d*))?')
|
|
|
|
|
|
@LiquidTags.register('speakerdeck')
|
|
def speakerdeck(preprocessor, tag, markup):
|
|
ratio = 1.33333333333333
|
|
id = None
|
|
match = REGEX.search(markup)
|
|
if match:
|
|
groups = match.groups()
|
|
id = groups[0]
|
|
ratio = groups[2] or ratio
|
|
if id:
|
|
speakerdeck_out = """
|
|
<script async class="speakerdeck-embed" data-id="{id}"
|
|
data-ratio="{ratio}" src="//speakerdeck.com/assets/embed.js"></script>
|
|
""".format(id=id, ratio=ratio)
|
|
else:
|
|
raise ValueError(
|
|
"Error processing input, expected syntax: {0}".format(SYNTAX)
|
|
)
|
|
return speakerdeck_out
|
|
|
|
|
|
# ---------------------------------------------------
|
|
# This import allows speakerdeck tag to be a Pelican plugin
|
|
from liquid_tags import register # noqa # isort:skip
|