Skip to content

Instantly share code, notes, and snippets.

@westurner
Forked from mgedmin/conf.py.rst
Last active August 29, 2015 14:08
Show Gist options
  • Save westurner/d89c1ea1af05c5c514f9 to your computer and use it in GitHub Desktop.
Save westurner/d89c1ea1af05c5c514f9 to your computer and use it in GitHub Desktop.
ENH: Add Show Source, Show on GitHub, Edit on GitHub Sphinx sidebar links

Edit on GitHub links for Sphinx

Create _ext/ and _templates/ subdirectories.

Move edit_on_github.py into the _ext/ subdirectory.

Move sourcelink.html into the _templates/ subdirectory.

Add the following after the import sys, os line :

sys.path.insert(0, os.path.abspath('_ext'))

Add edit_on_github to the list of extensions :

extensions = ['edit_on_github']

Configure the extension :

edit_on_github_project = 'username/reponame'
edit_on_github_branch = 'master'

edit_on_github_src = 'docs/'  # optional. default: ''

Make sure the template path is specified correctly :

templates_path = ['_templates']
"""
Sphinx extension to add ReadTheDocs-style "Edit on GitHub" links to the
sidebar.
Loosely based on https://github.com/astropy/astropy/pull/347
"""
import os
import warnings
__licence__ = 'BSD (3 clause)'
def get_github_url(app, view, path):
return (
'https://github.com/{project}/{view}/{branch}/{src_path}{path}'.format(
project=app.config.edit_on_github_project,
view=view,
branch=app.config.edit_on_github_branch,
src_path=app.config.edit_on_github_src_path,
path=path))
def html_page_context(app, pagename, templatename, context, doctree):
if templatename != 'page.html':
return
if not app.config.edit_on_github_project:
warnings.warn("edit_on_github_project not specified")
return
if not doctree:
warnings.warn("doctree is None")
return
path = os.path.relpath(doctree.get('source'), app.builder.srcdir)
show_url = get_github_url(app, 'blob', path)
edit_url = get_github_url(app, 'edit', path)
context['show_on_github_url'] = show_url
context['edit_on_github_url'] = edit_url
def setup(app):
app.add_config_value('edit_on_github_project', '', True)
app.add_config_value('edit_on_github_branch', 'master', True)
app.add_config_value('edit_on_github_src_path', '', True) # 'eg' "docs/"
app.connect('html-page-context', html_page_context)
@westurner
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment