From c1cbdfaf687437baba73fbbe5551907b6913f0a4 Mon Sep 17 00:00:00 2001 From: Trevor Bramwell Date: Fri, 2 Feb 2018 12:16:52 -0800 Subject: [PATCH] OPNFV Sphinx Theme This is a standalone theme for OPNFV docs based on the Sphinx Bootstrap Theme used in opnfvdocs. Change-Id: Ie145c0dc9c1e4c1ed0d8d72d687524b4ef5883de Signed-off-by: Trevor Bramwell --- opnfv-theme/.gitignore | 5 +++ opnfv-theme/MANIFEST.in | 7 +++ opnfv-theme/README.rst | 48 +++++++++++++++++++++ opnfv-theme/setup.py | 30 +++++++++++++ opnfv-theme/sphinx_opnfv_theme/__init__.py | 15 +++++++ opnfv-theme/sphinx_opnfv_theme/opnfv/layout.html | 5 +++ .../opnfv/my_custom_sidebar.html | 3 ++ .../sphinx_opnfv_theme/opnfv/relations.html | 15 +++++++ .../sphinx_opnfv_theme/opnfv/static/favicon.ico | Bin 0 -> 15086 bytes .../sphinx_opnfv_theme/opnfv/static/logo.png | Bin 0 -> 2829 bytes .../sphinx_opnfv_theme/opnfv/static/my-styles.css | 33 ++++++++++++++ opnfv-theme/sphinx_opnfv_theme/opnfv/theme.conf | 7 +++ 12 files changed, 168 insertions(+) create mode 100644 opnfv-theme/.gitignore create mode 100644 opnfv-theme/MANIFEST.in create mode 100644 opnfv-theme/README.rst create mode 100644 opnfv-theme/setup.py create mode 100644 opnfv-theme/sphinx_opnfv_theme/__init__.py create mode 100644 opnfv-theme/sphinx_opnfv_theme/opnfv/layout.html create mode 100644 opnfv-theme/sphinx_opnfv_theme/opnfv/my_custom_sidebar.html create mode 100644 opnfv-theme/sphinx_opnfv_theme/opnfv/relations.html create mode 100755 opnfv-theme/sphinx_opnfv_theme/opnfv/static/favicon.ico create mode 100644 opnfv-theme/sphinx_opnfv_theme/opnfv/static/logo.png create mode 100644 opnfv-theme/sphinx_opnfv_theme/opnfv/static/my-styles.css create mode 100644 opnfv-theme/sphinx_opnfv_theme/opnfv/theme.conf diff --git a/opnfv-theme/.gitignore b/opnfv-theme/.gitignore new file mode 100644 index 000000000..83b2238da --- /dev/null +++ b/opnfv-theme/.gitignore @@ -0,0 +1,5 @@ +/dist +/build +*.egg-info +*.pyc +__pycache__ diff --git a/opnfv-theme/MANIFEST.in b/opnfv-theme/MANIFEST.in new file mode 100644 index 000000000..a5886cd20 --- /dev/null +++ b/opnfv-theme/MANIFEST.in @@ -0,0 +1,7 @@ +include *.txt +include *.rst + +recursive-include sphinx_opnfv_theme * +recursive-include sphinx_opnfv_theme/opnfv * + +global-exclude *.pyc diff --git a/opnfv-theme/README.rst b/opnfv-theme/README.rst new file mode 100644 index 000000000..484a7a793 --- /dev/null +++ b/opnfv-theme/README.rst @@ -0,0 +1,48 @@ +OPNFV Documentation Theme +========================= + +This theme is used for all OPNFV documentation and is released seperatly +from the documentation itself. It's and extention of the `Sphinx +Bootstrap Theme`_ + +Installation +------------ + +Here's how to install the theme from PyPI_ + +To install and configure the theme do the following. + +#. Install the theme from pypi:: + + $ pip install sphinx_opnfv_theme + +#. Configure Sphinx to use the theme: + +.. code-block:: python + + # conf.py + import sphinx_opnfv_theme + + # ... + + html_theme = 'opnfv' + html_theme_path = sphinx_opnfv_theme.get_html_theme_path() + +Customization +------------- + +There are no customization specific to this theme yet, but all +all customizations_ Sphinx Bootstrap Theme are supported. + +If you'd like your documentation to match OPNFV's style configure the +following options for the bootstrap theme:: + + html_theme_options = { + 'bootswatch_theme': 'journal', + 'navbar_sidebarrel': false, + 'navbar_title': '', + } + +.. _Sphinx Bootstrap Theme: https://github.com/ryan-roemer/sphinx-bootstrap-theme +.. _Pypi: http://pypi.python.org/pypi/sphinx-opnfv-theme/ +.. _customizations: https://github.com/ryan-roemer/sphinx-bootstrap-theme#customization diff --git a/opnfv-theme/setup.py b/opnfv-theme/setup.py new file mode 100644 index 000000000..5375c0940 --- /dev/null +++ b/opnfv-theme/setup.py @@ -0,0 +1,30 @@ +from setuptools import setup, find_packages + +from sphinx_opnfv_theme import __version__ + +with open('README.rst') as f: + readme_text = f.read() + +setup( + name='sphinx_opnfv_theme', + description="OPNFV Theme for Sphinx", + long_description=readme_text, + url='https://docs.opnfv.org/', + author='Trevor Bramwell', + author_email='tbramwell@linuxfoundation.org', + version=__version__, + entry_points = { + 'sphinx.html_themes': [ + 'opnfv = sphinx_opnfv_theme', + ] + }, + packages=find_packages(), + install_requires = [ + 'sphinx_bootstrap_theme', + 'sphinxcontrib.httpdomain', + ], + include_package_data=True, + package_data = { + 'sphinx_opnfv_theme': ['opnfv/**',] + }, +) diff --git a/opnfv-theme/sphinx_opnfv_theme/__init__.py b/opnfv-theme/sphinx_opnfv_theme/__init__.py new file mode 100644 index 000000000..007927521 --- /dev/null +++ b/opnfv-theme/sphinx_opnfv_theme/__init__.py @@ -0,0 +1,15 @@ +"""OPNFV Sphinx Theme""" + +from os import path + +__version__='0.1.1' + + +def get_html_theme_path(): + """Return list of HTML theme paths.""" + local_path = path.abspath(path.dirname(__file__)) + return [local_path] + +def setup(app): + """Required by Sphinx to create the theme.""" + app.add_html_theme('opnfv', path.abspath(path.dirname(__file__))) diff --git a/opnfv-theme/sphinx_opnfv_theme/opnfv/layout.html b/opnfv-theme/sphinx_opnfv_theme/opnfv/layout.html new file mode 100644 index 000000000..ddd674cf1 --- /dev/null +++ b/opnfv-theme/sphinx_opnfv_theme/opnfv/layout.html @@ -0,0 +1,5 @@ +{# Import the theme's layout. #} +{% extends "bootstrap/layout.html" %} + +{# Custom CSS overrides #} +{% set css_files = css_files + ['_static/my-styles.css'] %} diff --git a/opnfv-theme/sphinx_opnfv_theme/opnfv/my_custom_sidebar.html b/opnfv-theme/sphinx_opnfv_theme/opnfv/my_custom_sidebar.html new file mode 100644 index 000000000..6b259bc93 --- /dev/null +++ b/opnfv-theme/sphinx_opnfv_theme/opnfv/my_custom_sidebar.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/opnfv-theme/sphinx_opnfv_theme/opnfv/relations.html b/opnfv-theme/sphinx_opnfv_theme/opnfv/relations.html new file mode 100644 index 000000000..5bad0b562 --- /dev/null +++ b/opnfv-theme/sphinx_opnfv_theme/opnfv/relations.html @@ -0,0 +1,15 @@ +
+
+ {% if prev %} + Prev Page + {% else %} + + {% endif %} + + {% if next %} + Next Page + {% else %} + + {% endif %} +
+
\ No newline at end of file diff --git a/opnfv-theme/sphinx_opnfv_theme/opnfv/static/favicon.ico b/opnfv-theme/sphinx_opnfv_theme/opnfv/static/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..bbe55ab40de1dca529711bd956dd395f831c8661 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/opnfv-theme/sphinx_opnfv_theme/opnfv/static/logo.png b/opnfv-theme/sphinx_opnfv_theme/opnfv/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1519503eba764f7a00877b9b8bdbbd37fd3707c6 GIT binary patch literal 2829 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