Created
June 13, 2012 07:56
-
-
Save dbrgn/2922648 to your computer and use it in GitHub Desktop.
ReStructuredText Youtube / Vimeo video embed directive
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
""" | |
ReST directive for embedding Youtube and Vimeo videos. | |
There are two directives added: ``youtube`` and ``vimeo``. The only | |
argument is the video id of the video to include. | |
Both directives have three optional arguments: ``height``, ``width`` | |
and ``align``. Default height is 281 and default width is 500. | |
Example:: | |
.. youtube:: anwy2MPT5RE | |
:height: 315 | |
:width: 560 | |
:align: left | |
:copyright: (c) 2012 by Danilo Bargen. | |
:license: BSD 3-clause | |
""" | |
from __future__ import absolute_import | |
from docutils import nodes | |
from docutils.parsers.rst import Directive, directives | |
def align(argument): | |
"""Conversion function for the "align" option.""" | |
return directives.choice(argument, ('left', 'center', 'right')) | |
class IframeVideo(Directive): | |
has_content = False | |
required_arguments = 1 | |
optional_arguments = 0 | |
final_argument_whitespace = False | |
option_spec = { | |
'height': directives.nonnegative_int, | |
'width': directives.nonnegative_int, | |
'align': align, | |
} | |
default_width = 500 | |
default_height = 281 | |
def run(self): | |
self.options['video_id'] = directives.uri(self.arguments[0]) | |
if not self.options.get('width'): | |
self.options['width'] = self.default_width | |
if not self.options.get('height'): | |
self.options['height'] = self.default_height | |
if not self.options.get('align'): | |
self.options['align'] = 'left' | |
return [nodes.raw('', self.html % self.options, format='html')] | |
class Youtube(IframeVideo): | |
html = '<iframe src="http://www.youtube.com/embed/%(video_id)s" \ | |
width="%(width)u" height="%(height)u" frameborder="0" \ | |
webkitAllowFullScreen mozallowfullscreen allowfullscreen \ | |
class="align-%(align)s"></iframe>' | |
class Vimeo(IframeVideo): | |
html = '<iframe src="http://player.vimeo.com/video/%(video_id)s" \ | |
width="%(width)u" height="%(height)u" frameborder="0" \ | |
webkitAllowFullScreen mozallowfullscreen allowFullScreen \ | |
class="align-%(align)s"></iframe>' | |
def setup(builder): | |
directives.register_directive('youtube', Youtube) | |
directives.register_directive('vimeo', Vimeo) |
Suggest to update the iframe embed url from http to https, otherwise this error may pop up
MQTT.html:332 Mixed Content: The page at 'https://xxxxxxxx' was loaded over HTTPS, but requested an insecure frame 'http://www.youtube.com/embed/xxxxxxxxx'. This request has been blocked; the content must be served over HTTPS.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@jukent hehe, nice that this is still being used 🙂
Alignment options are left, center and right. I don't know if it still works, you may need to adjust the code. I haven't used this in a long time.