Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Add a gist shortcode (Issue #2459). Would be nice to make rest_gist a…
…nd mdx_gist base on this. Nicer even to remove them all to the plugins repo
- Loading branch information
Showing
with
78 additions
and 0 deletions.
- +1 −0 CHANGES.txt
- +6 −0 docs/manual.txt
- +13 −0 nikola/plugins/shortcode/gist.plugin
- +58 −0 nikola/plugins/shortcode/gist.py
@@ -0,0 +1,13 @@ | ||
[Core] | ||
name = gist | ||
module = gist | ||
|
||
[Nikola] | ||
plugincategory = Shortcode | ||
|
||
[Documentation] | ||
author = Roberto Alsina | ||
version = 0.1 | ||
website = https://getnikola.com/ | ||
description = Gist shortcode | ||
|
@@ -0,0 +1,58 @@ | ||
# -*- coding: utf-8 -*- | ||
# This file is public domain according to its author, Brian Hsu | ||
|
||
"""Gist directive for reStructuredText.""" | ||
|
||
import requests | ||
from docutils.parsers.rst import Directive, directives | ||
from docutils import nodes | ||
|
||
from nikola.plugin_categories import ShortcodePlugin | ||
|
||
|
||
class Plugin(ShortcodePlugin): | ||
"""Plugin for gist directive.""" | ||
|
||
name = "gist" | ||
|
||
def set_site(self, site): | ||
"""Set Nikola site.""" | ||
self.site = site | ||
site.register_shortcode('gist', self.handler) | ||
return super(Plugin, self).set_site(site) | ||
|
||
def get_raw_gist_with_filename(self, gistID, filename): | ||
"""Get raw gist text for a filename.""" | ||
url = '/'.join(("https://gist.github.com/raw", gistID, filename)) | ||
return requests.get(url).text | ||
|
||
def get_raw_gist(self, gistID): | ||
"""Get raw gist text.""" | ||
url = "https://gist.github.com/raw/{0}".format(gistID) | ||
try: | ||
return requests.get(url).text | ||
except requests.exceptions.RequestException: | ||
raise self.error('Cannot get gist for url={0}'.format(url)) | ||
|
||
def handler(self, gistID, filename=None, site=None, data=None, lang=None, post=None): | ||
"""Create HTML for gist.""" | ||
if 'https://' in gistID: | ||
gistID = gistID.split('/')[-1].strip() | ||
else: | ||
gistID = gistID.strip() | ||
embedHTML = "" | ||
rawGist = "" | ||
|
||
if filename is not None: | ||
rawGist = (self.get_raw_gist_with_filename(gistID, filename)) | ||
embedHTML = ('<script src="https://gist.github.com/{0}.js' | ||
'?file={1}"></script>').format(gistID, filename) | ||
else: | ||
rawGist = (self.get_raw_gist(gistID)) | ||
embedHTML = ('<script src="https://gist.github.com/{0}.js">' | ||
'</script>').format(gistID) | ||
|
||
output = '''{} | ||
<noscript><pre>{}</pre></noscript>'''.format(embedHTML, rawGist) | ||
|
||
return output, [] |