From aabf364e7fdd0c7001671c9aa011b8ac1ca24649 Mon Sep 17 00:00:00 2001
From: Philipp Rudiger <P.Rudiger@ed.ac.uk>
Date: Mon, 22 May 2017 13:07:10 +0100
Subject: [PATCH] Initial holoviews docs them redesign

---
 doc/_templates/footer.html                    |  42 -----
 doc/_templates/layout.html                    | 162 ------------------
 doc/_templates/page.html                      |   3 -
 doc/conf.py                                   |  65 ++++++-
 doc/holoviews_theme/includes/ga.html          |  10 ++
 doc/holoviews_theme/includes/searchbox.html   |   8 +
 doc/holoviews_theme/layout.html               | 121 +++++++++++++
 doc/holoviews_theme/search.html               |  41 +++++
 doc/holoviews_theme/static/images/favicon.ico | Bin 0 -> 1150 bytes
 doc/holoviews_theme/static/images/logo.png    | Bin 0 -> 17919 bytes
 doc/holoviews_theme/static/images/logo.svg    |  82 +++++++++
 doc/holoviews_theme/static/js/main.js         |  73 ++++++++
 doc/holoviews_theme/theme.conf                |   7 +
 13 files changed, 398 insertions(+), 216 deletions(-)
 delete mode 100644 doc/_templates/footer.html
 delete mode 100644 doc/_templates/layout.html
 delete mode 100644 doc/_templates/page.html
 create mode 100644 doc/holoviews_theme/includes/ga.html
 create mode 100644 doc/holoviews_theme/includes/searchbox.html
 create mode 100644 doc/holoviews_theme/layout.html
 create mode 100644 doc/holoviews_theme/search.html
 create mode 100644 doc/holoviews_theme/static/images/favicon.ico
 create mode 100644 doc/holoviews_theme/static/images/logo.png
 create mode 100644 doc/holoviews_theme/static/images/logo.svg
 create mode 100644 doc/holoviews_theme/static/js/main.js
 create mode 100644 doc/holoviews_theme/theme.conf

diff --git a/doc/_templates/footer.html b/doc/_templates/footer.html
deleted file mode 100644
index d81bd54019..0000000000
--- a/doc/_templates/footer.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<footer>
-  {% if next or prev %}
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      {% if next %}
-        <a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}"/>Next <span class="fa fa-arrow-circle-right"></span></a>
-      {% endif %}
-      {% if prev %}
-        <a href="{{ prev.link|e }}" class="btn btn-neutral" title="{{ prev.title|striptags|e }}"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      {% endif %}
-    </div>
-  {% endif %}
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-    {%- if show_copyright %}
-      {%- if hasdoc('copyright') %}
-        {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
-      {%- else %}
-        {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}
-      {%- endif %}
-    {%- endif %}
-
-    {%- if last_updated %}
-      {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
-    {%- endif %}
-    </p>
-  </div>
-
-  <script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-  ga('create', 'UA-61554933-1', 'auto');
-  ga('require', 'linkid');
-  ga('send', 'pageview');
-
-  </script>
-</footer>
diff --git a/doc/_templates/layout.html b/doc/_templates/layout.html
deleted file mode 100644
index f19bc37a60..0000000000
--- a/doc/_templates/layout.html
+++ /dev/null
@@ -1,162 +0,0 @@
-{# TEMPLATE VAR SETTINGS #}
-{%- set url_root = pathto('', 1) %}
-{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
-{%- if not embedded and docstitle %}
-  {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
-{%- else %}
-  {%- set titlesuffix = "" %}
-{%- endif %}
-
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  {% block htmltitle %}
-  <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
-  {% endblock %}
-
-  {# FAVICON #}
-  {% if favicon %}
-    <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
-  {% endif %}
-
-  {# CSS #}
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  {# OPENSEARCH #}
-  {% if not embedded %}
-    {% if use_opensearch %}
-      <link rel="search" type="application/opensearchdescription+xml" title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" href="{{ pathto('_static/opensearch.xml', 1) }}"/>
-    {% endif %}
-
-  {% endif %}
-
-  {# RTD hosts this file, so just load on non RTD builds #}
-  {% if not READTHEDOCS %}
-    <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
-  {% endif %}
-
-  {% for cssfile in css_files %}
-    <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
-  {% endfor %}
-
-  {%- block linktags %}
-    {%- if hasdoc('about') %}
-        <link rel="author" title="{{ _('About these documents') }}"
-              href="{{ pathto('about') }}"/>
-    {%- endif %}
-    {%- if hasdoc('genindex') %}
-        <link rel="index" title="{{ _('Index') }}"
-              href="{{ pathto('genindex') }}"/>
-    {%- endif %}
-    {%- if hasdoc('search') %}
-        <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}"/>
-    {%- endif %}
-    {%- if hasdoc('copyright') %}
-        <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}"/>
-    {%- endif %}
-    <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}"/>
-    {%- if parents %}
-        <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}"/>
-    {%- endif %}
-    {%- if next %}
-        <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}"/>
-    {%- endif %}
-    {%- if prev %}
-        <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}"/>
-    {%- endif %}
-  {%- endblock %}
-		{%- block extrahead %}
-	{%- for scriptfile in script_files %}
-      <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
-    {%- endfor %}
-{% endblock %}
-
-
-  {# Keep modernizr in head - http://modernizr.com/docs/#installing #}
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    {# SIDE NAV, TOGGLES ON MOBILE #}
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-
-        {% if logo %}
-          <img src="{{ pathto('_static/' + logo, 1) }}" class="logo" />
-        {% endif %}
-
-        <a href="{{ pathto(master_doc) }}" class="fa"> {{ project }}</a>
-        {% include "searchbox.html" %}
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        {% set toctree = toctree(maxdepth=2, collapse=False, includehidden=True) %}
-        {% if toctree %}
-            {{ toctree }}
-        {% else %}
-            <!-- Local TOC -->
-            <div class="local-toc">{{ toc }}</div>
-        {% endif %}
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      {# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-        <a href="{{ pathto(master_doc) }}">{{ project }}</a>
-      </nav>
-
-
-      {# PAGE CONTENT #}
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="main">
-            {% block body %}{% endblock %}
-          </div>
-          {% include "footer.html" %}
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  {% include "versions.html" %}
-
-  {% if not embedded %}
-
-    <script type="text/javascript">
-        var DOCUMENTATION_OPTIONS = {
-            URL_ROOT:'{{ url_root }}',
-            VERSION:'{{ release|e }}',
-            COLLAPSE_INDEX:false,
-            FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
-            HAS_SOURCE:  {{ has_source|lower }}
-        };
-    </script>
-  {% endif %}
-
-  {# STICKY NAVIGATION #}
-  {% if theme_sticky_navigation %}
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.StickyNav.enable();
-      });
-  </script>
-  {% endif %}
-
-  {%- block footer %} {% endblock %}
-
-</body>
-</html>
diff --git a/doc/_templates/page.html b/doc/_templates/page.html
deleted file mode 100644
index 9fd0405d31..0000000000
--- a/doc/_templates/page.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{% extends "!page.html" %}
-{# add our custom css and js #}
-{% set css_files = css_files + ["_static/bootstrap.css", "_static/codehilite.css", "_static/custom.css", "_static/rtd_bootstrap.css"] %}
diff --git a/doc/conf.py b/doc/conf.py
index 6ead1ad4d5..a97a9b91c2 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -13,7 +13,7 @@
 # Declare information specific to this project.
 project = u'HoloViews'
 authors = u'IOAM: Jean-Luc R. Stevens, Philipp Rudiger, and James A. Bednar'
-copyright = u'2015 ' + authors
+copyright = u'2017 ' + authors
 ioam_module = 'holoviews'
 description = 'Stop plotting your data - annotate your data and let it visualize itself.'
 
@@ -33,9 +33,61 @@
 """.format(url=ASSETS_URL, version=version)
 
 # Override IOAM theme
-import sphinx_rtd_theme
-html_theme = "sphinx_rtd_theme"
-html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+html_theme = 'holoviews_theme'
+html_theme_path = ['.']
+MAIN_SITE = '//holoviews.org'
+
+html_context = {
+    'SITEMAP_BASE_URL': 'http://holoviews.org/', # Trailing slash is needed
+    'SITE_URL': '/',
+    'DESCRIPTION': 'HoloViews library, documentation site.',
+    'AUTHOR': 'HoloViews contributors',
+    'VERSION': version,
+    # Nav
+    'NAV': (
+        ('About', MAIN_SITE + '/about.html'),
+        ('Gallery', '/Gallery/index.html'),
+        ('Docs', '//holoviews.org/'),
+        ('Github', '//github.com/ioam/holoviews'),
+    ),
+    # Links
+    'LINKS': (
+        ('Getting started', 'Getting_Started/index.html'),
+        ('User Guides', 'User_Guide/index.html'),
+        ('Tutorials', 'Tutorials/index.html'),
+        ('Gallery', 'Gallery/index.html'),
+        ('Reference', 'Reference_Manual/index.html'),
+        ('FAQ', 'FAQ.html'),
+        ('About', 'about.html')
+    ),
+    # About Links
+    'ABOUT': (
+        ('About', MAIN_SITE + '/about.html')
+    ),
+    # Social links
+    'SOCIAL': (
+        ('Mailing list', '//gitter.im/ioam/holoviews'),
+        ('Github', '//github.com/ioam/holoviews')
+    ),
+    # Links for the docs sub navigation
+    'NAV_DOCS': (
+        ('Getting started', 'Getting_Started/index'),
+        ('User Guides', 'User_Guide/index'),
+        ('Tutorials', 'Tutorials/index'),
+        ('Gallery', 'Gallery/index'),
+        ('Reference', 'Reference_Manual/index'),
+        ('FAQ', 'FAQ'),
+        ('About', 'about')
+    ),
+    'css_server': os.environ.get('HOLOVIEWS_DOCS_CSS_SERVER', 'assets.holoviews.org'),
+    'js_includes': ['custom.js', 'require.js']
+}
+
+# (Optional) Logo. Should be small enough to fit the navbar (ideally 24x24).
+# Path should be relative to the ``_static`` files directory.
+html_logo = "my_logo.png"
+
+
 html_logo = '_static/holoviews_logo.png'
 html_favicon = '_static/favicon.ico'
 
@@ -90,17 +142,12 @@
                        'http://ipython.org/ipython-doc/2/': None,
                        'http://ioam.github.io/param/': None}
 
-js_includes = ['require.js', 'bootstrap.js', 'custom.js', 'js/theme.js']
-
 from builder.paramdoc import param_formatter
 from nbpublisher import nbbuild
 
 
 def setup(app):
     app.connect('autodoc-process-docstring', param_formatter)
-    for js in js_includes:
-        app.add_javascript(js)
-
     try:
         import runipy # noqa (Warning import)
         nbbuild.setup(app)
diff --git a/doc/holoviews_theme/includes/ga.html b/doc/holoviews_theme/includes/ga.html
new file mode 100644
index 0000000000..38e322162f
--- /dev/null
+++ b/doc/holoviews_theme/includes/ga.html
@@ -0,0 +1,10 @@
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-61554933-1', 'auto');
+  ga('send', 'pageview');
+
+</script>
diff --git a/doc/holoviews_theme/includes/searchbox.html b/doc/holoviews_theme/includes/searchbox.html
new file mode 100644
index 0000000000..0596b0c731
--- /dev/null
+++ b/doc/holoviews_theme/includes/searchbox.html
@@ -0,0 +1,8 @@
+<div class="search-bar">
+  <form role="search" action="{{ pathto('search') }}" method="get">
+    <input type="search" name="q" placeholder="Search" />
+    <button type="submit">
+      <img src="https://raw.githubusercontent.com/thoughtbot/refills/master/source/images/search-icon-black.png" alt="Search Icon">
+    </button>
+  </form>
+</div>
diff --git a/doc/holoviews_theme/layout.html b/doc/holoviews_theme/layout.html
new file mode 100644
index 0000000000..a32bb83540
--- /dev/null
+++ b/doc/holoviews_theme/layout.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+  <!-- Basic Page Needs
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+  <meta charset="utf-8">
+  <title>{{ title }} &mdash; {{ shorttitle }}</title>
+  <meta name="description" content="{{ DESCRIPTION }}">
+  <meta name="author" content="{{ AUTHOR }}">
+
+  <!-- Mobile Specific Metas
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+
+  <!-- FONT
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+  <script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.16/webfont.js"></script>
+  <script>
+    WebFont.load({
+      google: {
+        families: ['Source Sans Pro']
+      }
+    });
+  </script>
+
+  <!-- CSS
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+  <link rel="stylesheet" href="//{{ css_server }}/theme/css/main.css">
+  <link rel="stylesheet" href="{{ pathto('_static/custom.css', 1) }}">
+  
+
+  <!-- Scripts
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
+  <script src="{{ pathto('_static/' + theme_js, 1) }}"></script>
+  {% for link in js_includes %}
+     <script src="{{ pathto('_static/' + link, 1) }}"></script>
+  {% endfor %}
+
+  <!-- Favicon
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+  <link rel="icon" type="image/png" href="{{ pathto('_static/' + theme_favicon, 1) }}">
+
+  <!-- Canonical
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+  <link rel="canonical" href="http://holoviews.org/{{ pagename }}{{ file_suffix }}" />
+
+</head>
+<body class="">
+
+  <header class="navigation">
+    <div class="wrapper">
+      <a href="{{ SITE_URL }}" class="logo">
+        <img src="{{ pathto('_static/images/logo.png', 1) }}" alt="Bokeh Logo">
+      </a>
+      <a href="{{ SITE_URL }}" class="navigation-menu logo-text">HoloViews</a>
+      <a href="javascript:void(0)" class="navigation-menu-button" id="js-mobile-menu">Menu</a>
+      <nav>
+        <ul id="js-navigation-menu" class="navigation-menu show">
+          {% for name, link in NAV %}
+              <li class="nav-link"><a href="{{ link }}">{{ name }}</a></li>
+          {% endfor %}
+        </ul>
+      </nav>
+    </div>
+  </header>
+  <div class="second-nav">
+    <nav>
+      <ul class="navigation-menu show">
+        {%- for name, link in NAV_DOCS  %}
+            <li class="nav-link doc-head"><a href="{{ pathto(link) }}">{{ name }}</a></li>
+        {%- endfor %}
+      </ul>
+    </nav>
+    <div class="navigation-tools">
+      {% include 'includes/searchbox.html' %}
+    </div>
+  </div>
+
+<!-- MAIN BODY OF DOCS –––––––––––––––––– -->
+  <div class="docs section">
+    <div class="toc">
+      {{ toctree(maxdepth=4, collapse=True, includehidden=True) }}
+    </div>
+    <div class="content">
+        {% block body %}{% endblock %}
+    </div>
+  </div>
+
+<!-- END MAIN BODY OF DOCS ––––––––––––– -->
+
+<footer class="footer">
+  <div class="footer-links">
+    <ul>
+      <li><span class="footer-title">Links</span></li>
+      {% for name, link in LINKS %}
+          <li><a href="{{ link }}">{{ name }}</a></li>
+      {% endfor %}
+    </ul>
+    <ul>
+      <li><span class="footer-title">Join Us</span></li>
+      {% for name, link in SOCIAL %}
+          <li><a href="{{ link }}">{{ name }}</a></li>
+      {% endfor %}
+    </ul>
+    <ul class="copyright">
+      <li>{{ copyright }}</li>
+    </ul>
+  </div>
+</footer>
+
+<!-- Google Analytics -->
+{% include 'includes/ga.html' %}
+
+<!-- End Document
+  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
+</body>
+
+</html>
diff --git a/doc/holoviews_theme/search.html b/doc/holoviews_theme/search.html
new file mode 100644
index 0000000000..e03b437b2a
--- /dev/null
+++ b/doc/holoviews_theme/search.html
@@ -0,0 +1,41 @@
+{%- extends "layout.html" %}
+{% set title = _('Search') %}
+{% block body %}
+  <h1 id="search-documentation">{{ _('Search') }}</h1>
+  <div id="fallback" class="admonition warning">
+    <script type="text/javascript">$('#fallback').hide();</script>
+    <p>{% trans %}Please activate JavaScript to enable the search functionality{% endtrans %} </p>
+  </div>
+
+  <p>
+    {% trans %}From here you can search these documents. Enter your search
+    words into the box below and click "search". Note that the search
+    function will automatically search for all of the words. Pages
+    containing fewer words won't appear in the result list.{% endtrans %}
+  </p>
+
+  <form class="form-search">
+    <input type="text" class="input-medium search-query" name="q" value="" />
+    <input type="submit" class="btn btn-default" value="{{ _('search') }}" />
+    <span id="search-progress" style="padding-left: 10px"></span>
+  </form>
+
+  <div id="search-results">
+
+    <script>
+      (function() {
+        var cx = '007519673294607119974:n9uana_s26m';
+        var gcse = document.createElement('script');
+        gcse.type = 'text/javascript';
+        gcse.async = true;
+        gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
+            '//cse.google.com/cse.js?cx=' + cx;
+        var s = document.getElementsByTagName('script')[0];
+        s.parentNode.insertBefore(gcse, s);
+      })();
+    </script>
+    <gcse:searchresults-only></gcse:searchresults-only>
+
+  </div>
+
+{% endblock %}
diff --git a/doc/holoviews_theme/static/images/favicon.ico b/doc/holoviews_theme/static/images/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..3b1d96e10d7105fa1128f9727c0083b78dd8bff0
GIT binary patch
literal 1150
zcmcJLYe-XJ7=T}G<v^#hbXE(`6t^aF*tA{ReWE7XO@(TZ1x1CZWKwid!xUNd!$9mu
z(Vsx<qW!UuylZG)aw;vgAN_C@LVw&m=j?`+r*{rT!J>#bJm33$@Ap3M`*8q5@QaQH
zTt!gC0T2Ly6u}f`f_V%8c*hS9vU2{9OIo8Bl=r<n^0u2NtM~lXBy+nT4$m%eG)+Eh
z@=eAXbKJ#AyhQ&|4`YuP%rE?4?)2yDTYQwHlA#jI=zP&N1|&t)Z+qwmJz(hbf}!6l
zF?IRu`c@w+sbJWoQp%ounvzJ*Qb1Z3f7wGf>;dhlJ3{~3(`@Yav4-b<N_?H6#Kjbw
zQn=WhcEA-b&v$L=t0x%%whlC7?s9yG2mN03uZpX@m&L_&56<<Z<+{pQ*aIrFb3+fs
z3=Qfj22^&&xX<S9(+zrV8N2;ex`*?PQcM51_}u&*(n8lMvYfptlhYXR*Y^ncidmYg
zd{3WL+uRje^bG?`xv8eRQZlj9k)mw+L1x>B6j=+Es&v;0bh)ekiaSGxV$>+6X{&mI
zIj?!+iIZhK22#{OkfM7Il6b(9Nzd3+*(jsbd~QWoyEn%ds>sB-f!Q;3266*QQB5%+
zN;?B`;wkckkP|HqInl<-i4Hb3zWbX(Jo-Vc{?e?`e$A6-Is+~TNkF*B+J7+$+W;Yq
z!j}$%uyaATyT9Ea9IDOUF;bJWbNuQ4#Oa!J*{868v&x!`n}cy3$g9{xg0AX<*uko!
zF}8++*vUtEf{80f1UC7x$f0c+yXMv_8}=oU!+`LMqDJb^M89n)<WJ^Vw!e!hiTVhq
z_|qF|H#=O67z2b`#v4nxz?;}w${U9{@NHK5PdSzaSgr>6ZVKWj02ZSF9AQBQwgA+I
T09cWDoMgnfjCadeA8>yHz{M;5

literal 0
HcmV?d00001

diff --git a/doc/holoviews_theme/static/images/logo.png b/doc/holoviews_theme/static/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..b800e60aa47f6a2fe934746e20f022f996163ecd
GIT binary patch
literal 17919
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

literal 0
HcmV?d00001

diff --git a/doc/holoviews_theme/static/images/logo.svg b/doc/holoviews_theme/static/images/logo.svg
new file mode 100644
index 0000000000..1e47c068ae
--- /dev/null
+++ b/doc/holoviews_theme/static/images/logo.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 500 500" style="enable-background:new 0 0 500 500;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:url(#SVGID_1_);}
+	.st1{opacity:0.2;fill:url(#SVGID_2_);}
+	.st2{fill:url(#SVGID_3_);}
+	.st3{opacity:0.2;fill:url(#SVGID_4_);}
+	.st4{fill:url(#SVGID_5_);}
+	.st5{fill:url(#SVGID_6_);}
+	.st6{fill:url(#SVGID_7_);}
+	.st7{fill:url(#SVGID_8_);}
+</style>
+<g>
+	<g>
+		
+			<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4245.2314" y1="55.0994" x2="-4245.2314" y2="270.0156" gradientTransform="matrix(-1 0 0 1 -3885.9946 0)">
+			<stop  offset="0" style="stop-color:#E80589"/>
+			<stop  offset="0.2561" style="stop-color:#D11359"/>
+			<stop  offset="0.4598" style="stop-color:#C21C39"/>
+			<stop  offset="0.5727" style="stop-color:#BC202D"/>
+			<stop  offset="0.9586" style="stop-color:#5B1F2D"/>
+		</linearGradient>
+		<polygon class="st0" points="468.5,141.1 250,55.1 250,80.9 442.3,156.5 		"/>
+		
+			<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-4354.4678" y1="105.8109" x2="-4135.9946" y2="105.8109" gradientTransform="matrix(-1 0 0 1 -3885.9946 0)">
+			<stop  offset="0" style="stop-color:#E80589"/>
+			<stop  offset="0.2561" style="stop-color:#D11359"/>
+			<stop  offset="0.4598" style="stop-color:#C21C39"/>
+			<stop  offset="0.5727" style="stop-color:#BC202D"/>
+			<stop  offset="0.9586" style="stop-color:#5B1F2D"/>
+		</linearGradient>
+		<polygon class="st1" points="468.5,141.1 250,55.1 250,80.9 442.3,156.5 		"/>
+		
+			<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-4221.3354" y1="55.0994" x2="-4221.3354" y2="270.0156" gradientTransform="matrix(-1 0 0 1 -3885.9946 0)">
+			<stop  offset="0" style="stop-color:#E80589"/>
+			<stop  offset="0.2561" style="stop-color:#D11359"/>
+			<stop  offset="0.4598" style="stop-color:#C21C39"/>
+			<stop  offset="0.5727" style="stop-color:#BC202D"/>
+			<stop  offset="0.9586" style="stop-color:#5B1F2D"/>
+		</linearGradient>
+		<polygon class="st2" points="250,270 420.7,169.3 250,102.1 		"/>
+		
+			<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-4354.4678" y1="186.0641" x2="-4135.9946" y2="186.0641" gradientTransform="matrix(-1 0 0 1 -3885.9946 0)">
+			<stop  offset="0" style="stop-color:#E80589"/>
+			<stop  offset="0.2561" style="stop-color:#D11359"/>
+			<stop  offset="0.4598" style="stop-color:#C21C39"/>
+			<stop  offset="0.5727" style="stop-color:#BC202D"/>
+			<stop  offset="0.9586" style="stop-color:#5B1F2D"/>
+		</linearGradient>
+		<polygon class="st3" points="250,270 420.7,169.3 250,102.1 		"/>
+	</g>
+	<g>
+		<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="249.9735" y1="331.9526" x2="31.5" y2="331.9526">
+			<stop  offset="0" style="stop-color:#F9AF41"/>
+			<stop  offset="0.3445" style="stop-color:#F5C23C"/>
+			<stop  offset="0.3603" style="stop-color:#F5C33C"/>
+			<stop  offset="0.6377" style="stop-color:#F2D534"/>
+		</linearGradient>
+		<polygon class="st4" points="250,314.9 250,314.9 87.5,219 250,444.9 		"/>
+		<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="249.9735" y1="216.4939" x2="31.5" y2="216.4939">
+			<stop  offset="0" style="stop-color:#F9AF41"/>
+			<stop  offset="0.3494" style="stop-color:#F6C23B"/>
+			<stop  offset="0.6377" style="stop-color:#F2D534"/>
+		</linearGradient>
+		<polygon class="st5" points="250,270 31.5,141.1 58.9,179.1 250,291.9 		"/>
+		<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="468.5" y1="216.494" x2="249.9735" y2="216.494">
+			<stop  offset="0.4804" style="stop-color:#EE4036"/>
+			<stop  offset="0.7038" style="stop-color:#F16129"/>
+			<stop  offset="0.8577" style="stop-color:#F27322"/>
+		</linearGradient>
+		<polygon class="st6" points="250,291.9 441.1,179.1 468.5,141.1 250,270 250,291.9 		"/>
+		<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="468.5" y1="331.952" x2="249.9735" y2="331.952">
+			<stop  offset="0.4804" style="stop-color:#EE4036"/>
+			<stop  offset="0.7038" style="stop-color:#F16129"/>
+			<stop  offset="0.8577" style="stop-color:#F27322"/>
+		</linearGradient>
+		<polygon class="st7" points="250,444.9 412.4,219 250,314.9 		"/>
+	</g>
+</g>
+</svg>
diff --git a/doc/holoviews_theme/static/js/main.js b/doc/holoviews_theme/static/js/main.js
new file mode 100644
index 0000000000..2be14a89bf
--- /dev/null
+++ b/doc/holoviews_theme/static/js/main.js
@@ -0,0 +1,73 @@
+$(document).ready(function() {
+
+  var menuToggle = $('#js-mobile-menu').unbind();
+  $('#js-navigation-menu').removeClass("show");
+
+  menuToggle.on('click', function(e) {
+    e.preventDefault();
+    $('#js-navigation-menu').slideToggle(function(){
+      if($('#js-navigation-menu').is(':hidden')) {
+        $('#js-navigation-menu').removeAttr('style');
+      }
+    });
+  });
+
+  var loc = window.location.pathname;
+
+  if ((loc == '/') || (loc.split('index').length > 1)) {
+    // If index.html hide toc
+    $('.toc .toctree-l1').addClass('hide');
+    $('.toc').addClass('obfuscate');
+
+  } else if (loc.split('gallery').length > 1) {
+    // If gallery, dispense with toc, and manually add current under second nav
+    $('.toc .toctree-l1').addClass('hide');
+    $('.toc').addClass('obfuscate');
+    $('.second-nav .nav-link a[href="#"]').addClass('current');
+
+  } else if (false) {
+    // Else, selectively hide toc
+    var loc_part = loc.split('docs/')[1].split('.html')[0];
+
+    if (loc_part.split('/').length > 1) {
+      loc_part = loc_part.split('/')[0]
+    }
+
+    var l1_links = $('.toctree-l1');
+    l1_links.each(function(i, l1_link) {
+      if ( $(this).hasClass('current') ) {
+        $(this).addClass('show');
+      } else {
+        var href = l1_link.childNodes[0].href;
+        var href_part = href.split('docs/')[1].split('/')[0];
+        if ( href_part.split('.html').length > 1 ) {
+          href_part = href_part.split('.html')[0]
+        }
+        if (href_part == loc_part) {
+          $(this).addClass('show');
+        } else {
+          $(this).addClass('hide');
+        }
+      }
+    });
+
+    // Add current class to the section of docs we're in
+    var nav_links = $('.nav-link.doc-head a');
+    nav_links.each(function(i, nav_link) {
+      var href = nav_link.href;
+      var href_part = href.split('docs/')[1].split('.html')[0];
+      if (href_part.split('/').length > 1) {
+        href_part = href_part.split('/')[0]
+      }
+      if (loc_part == href_part) {
+        $(this).addClass('current');
+      }
+    });
+  }
+
+  // Expander (used for collapsible code blocks)
+  $('.expander-trigger').click(function(){
+    $(this).toggleClass("expander-hidden");
+  });
+
+});
diff --git a/doc/holoviews_theme/theme.conf b/doc/holoviews_theme/theme.conf
new file mode 100644
index 0000000000..a99133feab
--- /dev/null
+++ b/doc/holoviews_theme/theme.conf
@@ -0,0 +1,7 @@
+[theme]
+inherit = basic
+
+[options]
+js = js/main.js
+css = css/main.css
+favicon = images/favicon.ico