diff options
Diffstat (limited to 'nikola/plugins/compile_rest/gist_directive.py')
| -rw-r--r-- | nikola/plugins/compile_rest/gist_directive.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/nikola/plugins/compile_rest/gist_directive.py b/nikola/plugins/compile_rest/gist_directive.py new file mode 100644 index 0000000..3bfe818 --- /dev/null +++ b/nikola/plugins/compile_rest/gist_directive.py @@ -0,0 +1,56 @@ +# This file is public domain according to its author, Brian Hsu + +from docutils.parsers.rst import Directive, directives +from docutils import nodes + +try: + import requests +except ImportError: + requests = None # NOQA + + +class GitHubGist(Directive): + """ Embed GitHub Gist. + + Usage: + .. gist:: GIST_ID + + """ + + required_arguments = 1 + optional_arguments = 1 + option_spec = {'file': directives.unchanged} + final_argument_whitespace = True + has_content = False + + def get_raw_gist_with_filename(self, gistID, filename): + url = "https://raw.github.com/gist/%s/%s" % (gistID, filename) + return requests.get(url).text + + def get_raw_gist(self, gistID): + url = "https://raw.github.com/gist/%s/" % (gistID) + return requests.get(url).text + + def run(self): + if requests is None: + print('To use the gist directive, you need to install the ' + '"requests" package.') + return [] + gistID = self.arguments[0].strip() + embedHTML = "" + rawGist = "" + + if 'file' in self.options: + filename = self.options['file'] + rawGist = (self.get_raw_gist_with_filename(gistID, filename)) + embedHTML = ('<script src="https://gist.github.com/%s.js?file=%s">' + '</script>') % (gistID, filename) + else: + rawGist = (self.get_raw_gist(gistID)) + embedHTML = ('<script src="https://gist.github.com/%s.js">' + '</script>') % gistID + + return [nodes.raw('', embedHTML, format='html'), + nodes.raw('', '<noscript>', format='html'), + nodes.literal_block('', rawGist), + nodes.raw('', '</noscript>', format='html')] |
