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 %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %} - {%- else %} - {% trans copyright=copyright|e %}© 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 = " — "|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> - - </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 }} — {{ 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