summaryrefslogtreecommitdiffstats
path: root/src/pallets_sphinx_themes/themes/pocoo
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 16:12:08 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 16:12:08 +0000
commit0d286042a60f80eff5ced1f1800395537429b9d2 (patch)
treeba4a4b89d414179cf1dfac3354f317797e3fd832 /src/pallets_sphinx_themes/themes/pocoo
parentInitial commit. (diff)
downloadpython-pallets-sphinx-themes-upstream.tar.xz
python-pallets-sphinx-themes-upstream.zip
Adding upstream version 2.0.3.upstream/2.0.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pallets_sphinx_themes/themes/pocoo')
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/404.html13
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/__init__.py85
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/ethicalads.html1
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/layout.html33
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/localtoc.html4
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/project.html6
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/relations.html13
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/static/pocoo.css510
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/static/version_warning_offset.js40
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/theme.conf8
-rw-r--r--src/pallets_sphinx_themes/themes/pocoo/versions.html8
11 files changed, 721 insertions, 0 deletions
diff --git a/src/pallets_sphinx_themes/themes/pocoo/404.html b/src/pallets_sphinx_themes/themes/pocoo/404.html
new file mode 100644
index 0000000..1ccc53a
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/404.html
@@ -0,0 +1,13 @@
+{% extends 'layout.html' %}
+
+{% set title = _('Page Not Found') %}
+
+{% block body %}
+ <h1 id="notfound">Page Not Found</h1>
+ <p>
+ The page you requested does not exist. You may have followed a bad
+ link, or the page may have been moved or removed.
+ <p>
+ Go to the <a href="{{ pathto(master_doc) }}">overview</a> or
+ <a href="{{ pathto('search') }}">search</a>.
+{% endblock %}
diff --git a/src/pallets_sphinx_themes/themes/pocoo/__init__.py b/src/pallets_sphinx_themes/themes/pocoo/__init__.py
new file mode 100644
index 0000000..2540264
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/__init__.py
@@ -0,0 +1,85 @@
+from pygments.style import Style
+from pygments.token import Comment
+from pygments.token import Error
+from pygments.token import Generic
+from pygments.token import Keyword
+from pygments.token import Literal
+from pygments.token import Name
+from pygments.token import Number
+from pygments.token import Operator
+from pygments.token import Other
+from pygments.token import Punctuation
+from pygments.token import String
+from pygments.token import Whitespace
+
+
+class PocooStyle(Style):
+ background_color = "#f8f8f8"
+ default_style = ""
+ styles = {
+ # No corresponding class for the following:
+ # Text: "", # class: ''
+ Whitespace: "underline #f8f8f8", # class: 'w'
+ Error: "#a40000 border:#ef2929", # class: 'err'
+ Other: "#000000", # class 'x'
+ Comment: "italic #8f5902", # class: 'c'
+ Comment.Preproc: "noitalic", # class: 'cp'
+ Keyword: "bold #004461", # class: 'k'
+ Keyword.Constant: "bold #004461", # class: 'kc'
+ Keyword.Declaration: "bold #004461", # class: 'kd'
+ Keyword.Namespace: "bold #004461", # class: 'kn'
+ Keyword.Pseudo: "bold #004461", # class: 'kp'
+ Keyword.Reserved: "bold #004461", # class: 'kr'
+ Keyword.Type: "bold #004461", # class: 'kt'
+ Operator: "#582800", # class: 'o'
+ Operator.Word: "bold #004461", # class: 'ow' - like keywords
+ Punctuation: "bold #000000", # class: 'p'
+ # because special names such as Name.Class, Name.Function, etc.
+ # are not recognized as such later in the parsing, we choose them
+ # to look the same as ordinary variables.
+ Name: "#000000", # class: 'n'
+ Name.Attribute: "#c4a000", # class: 'na' - to be revised
+ Name.Builtin: "#004461", # class: 'nb'
+ Name.Builtin.Pseudo: "#3465a4", # class: 'bp'
+ Name.Class: "#000000", # class: 'nc' - to be revised
+ Name.Constant: "#000000", # class: 'no' - to be revised
+ Name.Decorator: "#888", # class: 'nd' - to be revised
+ Name.Entity: "#ce5c00", # class: 'ni'
+ Name.Exception: "bold #cc0000", # class: 'ne'
+ Name.Function: "#000000", # class: 'nf'
+ Name.Property: "#000000", # class: 'py'
+ Name.Label: "#f57900", # class: 'nl'
+ Name.Namespace: "#000000", # class: 'nn' - to be revised
+ Name.Other: "#000000", # class: 'nx'
+ Name.Tag: "bold #004461", # class: 'nt' - like a keyword
+ Name.Variable: "#000000", # class: 'nv' - to be revised
+ Name.Variable.Class: "#000000", # class: 'vc' - to be revised
+ Name.Variable.Global: "#000000", # class: 'vg' - to be revised
+ Name.Variable.Instance: "#000000", # class: 'vi' - to be revised
+ Number: "#990000", # class: 'm'
+ Literal: "#000000", # class: 'l'
+ Literal.Date: "#000000", # class: 'ld'
+ String: "#4e9a06", # class: 's'
+ String.Backtick: "#4e9a06", # class: 'sb'
+ String.Char: "#4e9a06", # class: 'sc'
+ String.Doc: "italic #8f5902", # class: 'sd' - like a comment
+ String.Double: "#4e9a06", # class: 's2'
+ String.Escape: "#4e9a06", # class: 'se'
+ String.Heredoc: "#4e9a06", # class: 'sh'
+ String.Interpol: "#4e9a06", # class: 'si'
+ String.Other: "#4e9a06", # class: 'sx'
+ String.Regex: "#4e9a06", # class: 'sr'
+ String.Single: "#4e9a06", # class: 's1'
+ String.Symbol: "#4e9a06", # class: 'ss'
+ Generic: "#000000", # class: 'g'
+ Generic.Deleted: "#a40000", # class: 'gd'
+ Generic.Emph: "italic #000000", # class: 'ge'
+ Generic.Error: "#ef2929", # class: 'gr'
+ Generic.Heading: "bold #000080", # class: 'gh'
+ Generic.Inserted: "#00A000", # class: 'gi'
+ Generic.Output: "#888", # class: 'go'
+ Generic.Prompt: "#745334", # class: 'gp'
+ Generic.Strong: "bold #000000", # class: 'gs'
+ Generic.Subheading: "bold #800080", # class: 'gu'
+ Generic.Traceback: "bold #a40000", # class: 'gt'
+ }
diff --git a/src/pallets_sphinx_themes/themes/pocoo/ethicalads.html b/src/pallets_sphinx_themes/themes/pocoo/ethicalads.html
new file mode 100644
index 0000000..e8e8f92
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/ethicalads.html
@@ -0,0 +1 @@
+<div id="ethical-ad-placement"></div>
diff --git a/src/pallets_sphinx_themes/themes/pocoo/layout.html b/src/pallets_sphinx_themes/themes/pocoo/layout.html
new file mode 100644
index 0000000..3745303
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/layout.html
@@ -0,0 +1,33 @@
+{% extends "basic/layout.html" %}
+
+{% set metatags %}
+ {{- metatags }}
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+{%- endset %}
+
+{% block sidebarlogo %}
+ {% if pagename != "index" or theme_index_sidebar_logo %}
+ {{ super() }}
+ {% endif %}
+{% endblock %}
+
+{% set version_warning = current_version.banner() if current_version %}
+
+{% block document %}
+ {%- if version_warning %}
+ <p class="version-warning"><strong>Warning:</strong> {{ version_warning }}</p>
+ {%- endif %}
+ {{- super() }}
+{%- endblock %}
+
+{% block relbar2 %}{% endblock %}
+
+{% block sidebar2 %}
+ <span id="sidebar-top"></span>
+ {{- super() }}
+{%- endblock %}
+
+{% block footer %}
+ {{ super() }}
+ {{ js_tag("_static/version_warning_offset.js") }}
+{% endblock %}
diff --git a/src/pallets_sphinx_themes/themes/pocoo/localtoc.html b/src/pallets_sphinx_themes/themes/pocoo/localtoc.html
new file mode 100644
index 0000000..6c9768e
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/localtoc.html
@@ -0,0 +1,4 @@
+{% if display_toc %}
+ <h3>Contents</h3>
+ {{ toc }}
+{%- endif %}
diff --git a/src/pallets_sphinx_themes/themes/pocoo/project.html b/src/pallets_sphinx_themes/themes/pocoo/project.html
new file mode 100644
index 0000000..5980d58
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/project.html
@@ -0,0 +1,6 @@
+{% if project_links %}
+ <h3>Project Links</h3>
+ <ul>{% for item in project_links %}
+ <li><a href="{{ item.url }}">{{ item.title }}</a>
+ {% endfor %}</ul>
+{%- endif %}
diff --git a/src/pallets_sphinx_themes/themes/pocoo/relations.html b/src/pallets_sphinx_themes/themes/pocoo/relations.html
new file mode 100644
index 0000000..ab84ec1
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/relations.html
@@ -0,0 +1,13 @@
+<h3>Navigation</h3>
+<ul>
+ <li><a href="{{ pathto(master_doc) }}">Overview</a>
+ {% if parents or prev or next %}<ul>{% for parent in parents %}
+ <li><a href="{{ parent.link|e }}">{{ parent.title }}</a>
+ {% if not loop.last or (prev or next) %}<ul>{% endif %}{% endfor %}
+ {% if prev %}<li>Previous: <a href="{{ prev.link|e }}" title="{{ _('previous chapter') }}">{{ prev.title }}</a>{% endif %}
+ {% if next %}<li>Next: <a href="{{ next.link|e }}" title="{{ _('next chapter') }}">{{ next.title }}</a>{% endif %}
+ {%- for parent in parents %}</ul>
+ </li>{% endfor %}
+ </ul>{% endif %}
+ </li>
+</ul>
diff --git a/src/pallets_sphinx_themes/themes/pocoo/static/pocoo.css b/src/pallets_sphinx_themes/themes/pocoo/static/pocoo.css
new file mode 100644
index 0000000..74a6cd1
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/static/pocoo.css
@@ -0,0 +1,510 @@
+@import url("basic.css");
+
+/* -- page layout --------------------------------------------------- */
+
+body {
+ font-family: 'Garamond', 'Georgia', serif;
+ font-size: 17px;
+ background-color: #fff;
+ color: #3e4349;
+ margin: 0;
+ padding: 0;
+}
+
+div.related {
+ max-width: 1140px;
+ margin: 10px auto;
+
+ /* displayed on mobile */
+ display: none;
+}
+
+div.document {
+ max-width: 1140px;
+ margin: 10px auto;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 220px;
+}
+
+div.body {
+ min-width: initial;
+ max-width: initial;
+ padding: 0 30px;
+}
+
+div.sphinxsidebarwrapper {
+ padding: 10px;
+}
+
+div.sphinxsidebar {
+ width: 220px;
+ font-size: 14px;
+ line-height: 1.5;
+ color: #444;
+}
+
+div.sphinxsidebar a,
+div.sphinxsidebar a code {
+ color: #444;
+ border-color: #444;
+}
+
+div.sphinxsidebar p.logo {
+ margin: 0;
+ text-align: center;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+ font-size: 24px;
+ color: #444;
+}
+
+div.sphinxsidebar p.logo a,
+div.sphinxsidebar h3 a,
+div.sphinxsidebar p.logo a:hover,
+div.sphinxsidebar h3 a:hover {
+ border: none;
+}
+
+div.sphinxsidebar p,
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+ margin: 10px 0;
+}
+
+div.sphinxsidebar ul {
+ margin: 10px 0;
+ padding: 0;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #999;
+ font-size: 1em;
+}
+
+div.footer {
+ max-width: 1140px;
+ margin: 20px auto;
+ font-size: 14px;
+ text-align: right;
+ color: #888;
+}
+
+div.footer a {
+ color: #888;
+ border-color: #888;
+}
+
+/* -- quick search -------------------------------------------------- */
+
+div.sphinxsidebar #searchbox form {
+ display: flex;
+}
+
+div.sphinxsidebar #searchbox form > div {
+ display: flex;
+ flex: 1 1 auto;
+}
+
+div.sphinxsidebar #searchbox input[type=text] {
+ flex: 1 1 auto;
+ width: 1% !important;
+}
+
+div.sphinxsidebar #searchbox input[type=submit] {
+ border-left-width: 0;
+}
+
+/* -- versions ------------------------------------------------------ */
+
+div.sphinxsidebar ul.versions a.current {
+ font-style: italic;
+ border-bottom: 1px solid #000;
+ color: #000;
+}
+
+div.sphinxsidebar ul.versions span.note {
+ color: #999;
+}
+
+/* -- version warning ----------------------------------------------- */
+
+p.version-warning {
+ top: 10px;
+ position: sticky;
+
+ margin: 10px 0;
+ padding: 5px 10px;
+ border-radius: 4px;
+
+ letter-spacing: 1px;
+ color: #fff;
+ text-shadow: 0 0 2px #000;
+ text-align: center;
+
+ background: #d40 repeating-linear-gradient(
+ 135deg,
+ transparent,
+ transparent 56px,
+ rgba(255, 255, 255, 0.2) 56px,
+ rgba(255, 255, 255, 0.2) 112px
+ );
+}
+
+p.version-warning a {
+ color: #fff;
+ border-color: #fff;
+}
+
+/* -- body styles --------------------------------------------------- */
+
+a {
+ text-decoration: none;
+ border-bottom: 1px dotted #000;
+}
+
+a:hover {
+ border-bottom-style: solid;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: normal;
+ margin: 30px 0 10px;
+ padding: 0;
+ color: black;
+}
+
+div.body h1 {
+ font-size: 240%;
+}
+
+div.body h2 {
+ font-size: 180%;
+}
+
+div.body h3 {
+ font-size: 150%;
+}
+
+div.body h4 {
+ font-size: 130%;
+}
+
+div.body h5 {
+ font-size: 100%;
+}
+
+div.body h6 {
+ font-size: 100%;
+}
+
+div.body h1:first-of-type {
+ margin-top: 0;
+}
+
+a.headerlink {
+ color: #ddd;
+ margin: 0 0.2em;
+ padding: 0 0.2em;
+ border: none;
+}
+
+a.headerlink:hover {
+ color: #444;
+}
+
+div.body p,
+div.body dd,
+div.body li {
+ line-height: 1.4;
+}
+
+img.screenshot {
+ box-shadow: 2px 2px 4px #eee;
+}
+
+hr {
+ border: 1px solid #999;
+}
+
+blockquote {
+ margin: 0 0 0 30px;
+ padding: 0;
+}
+
+ul, ol {
+ margin: 10px 0 10px 30px;
+ padding: 0;
+}
+
+a.footnote-reference {
+ font-size: 0.7em;
+ vertical-align: top;
+}
+
+/* -- admonitions --------------------------------------------------- */
+
+div.admonition,
+div.topic {
+ background-color: #fafafa;
+ margin: 10px -10px;
+ padding: 10px;
+ border-top: 1px solid #ccc;
+ border-right: none;
+ border-bottom: 1px solid #ccc;
+ border-left: none;
+}
+
+div.admonition p.admonition-title,
+div.topic p.topic-title {
+ font-weight: normal;
+ font-size: 24px;
+ margin: 0 0 10px 0;
+ padding: 0;
+ line-height: 1;
+ display: inline;
+}
+
+p.admonition-title::after {
+ content: ":";
+}
+
+div.admonition p.last,
+div.topic p:last-child {
+ margin-bottom: 0;
+}
+
+div.danger, div.error {
+ background-color: #fff0f0;
+ border-color: #ffb0b0;
+}
+
+div.seealso {
+ background-color: #fffff0;
+ border-color: #f0f0a8;
+}
+
+/* -- changelog ----------------------------------------------------- */
+
+details.changelog summary {
+ cursor: pointer;
+ font-style: italic;
+ margin-bottom: 10px;
+}
+
+/* -- search highlight ---------------------------------------------- */
+
+dt:target,
+.footnote:target,
+span.highlighted {
+ background-color: #ffdf80;
+}
+
+rect.highlighted {
+ fill: #ffdf80;
+}
+
+/* -- code displays ------------------------------------------------- */
+
+pre, code {
+ font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+ font-size: 0.9em;
+}
+
+pre {
+ margin: 0;
+ padding: 0;
+ line-height: 1.3;
+}
+
+div.literal-block-wrapper {
+ padding: 10px 0 0;
+}
+
+div.code-block-caption {
+ padding: 0;
+}
+
+div.highlight, div.literal-block-wrapper div.highlight {
+ margin: 10px -10px;
+ padding: 10px;
+}
+
+code {
+ color: #222;
+ background: #e8eff0;
+}
+
+/* -- tables -------------------------------------------------------- */
+
+table.docutils {
+ border: 1px solid #888;
+ box-shadow: 2px 2px 4px #eee;
+}
+
+table.docutils td,
+table.docutils th {
+ border: 1px solid #888;
+ padding: 0.25em 0.7em;
+}
+
+table.field-list,
+table.footnote {
+ border: none;
+ box-shadow: none;
+}
+
+table.footnote {
+ margin: 15px 0;
+ width: 100%;
+ border: 1px solid #eee;
+ background-color: #fafafa;
+ font-size: 0.9em;
+}
+
+table.footnote + table.footnote {
+ margin-top: -15px;
+ border-top: none;
+}
+
+table.field-list th {
+ padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+ padding: 0;
+}
+
+table.footnote td.label {
+ width: 0;
+ padding: 0.3em 0 0.3em 0.5em;
+}
+
+table.footnote td {
+ padding: 0.3em 0.5em;
+}
+
+/* -- responsive screen --------------------------------------------- */
+
+@media screen and (max-width: 1139px) {
+ p.version-warning {
+ margin: 10px;
+ }
+
+ div.footer {
+ margin: 20px 10px;
+ }
+}
+
+/* -- small screen -------------------------------------------------- */
+
+@media screen and (max-width: 767px) {
+ body {
+ padding: 0 20px;
+ }
+
+ div.related {
+ display: block;
+ }
+
+ p.version-warning {
+ margin: 10px 0;
+ }
+
+ div.documentwrapper {
+ float: none;
+ }
+
+ div.bodywrapper {
+ margin: 0;
+ }
+
+ div.body {
+ min-height: 0;
+ padding: 0;
+ }
+
+ div.sphinxsidebar {
+ float: none;
+ width: 100%;
+ margin: 0 -20px -10px;
+ padding: 0 20px;
+ background-color: #333;
+ color: #ccc;
+ }
+
+ div.sphinxsidebar a,
+ div.sphinxsidebar a code,
+ div.sphinxsidebar h3,
+ div.sphinxsidebar h4,
+ div.footer a {
+ color: #ccc;
+ border-color: #ccc;
+ }
+
+ div.sphinxsidebar p.logo {
+ display: none;
+ }
+
+ div.sphinxsidebar ul.versions a.current {
+ border-bottom-color: #fff;
+ color: #fff;
+ }
+
+ div.footer {
+ text-align: left;
+ margin: 0 -20px;
+ padding: 20px;
+ background-color: #333;
+ color: #ccc;
+ }
+}
+
+/* https://github.com/twbs/bootstrap/blob
+ /0e8831505ac845f3102fa2c5996a7141c9ab01ee
+ /scss/mixins/_screen-reader.scss */
+.hide-header > h1:first-child {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0;
+}
+
+/* -- sphinx-tabs -------------------------------------------------- */
+
+.sphinx-tabs {
+ margin-bottom: 0;
+}
+
+.sphinx-tabs .ui.menu {
+ font-family: 'Garamond', 'Georgia', serif !important;
+}
+
+.sphinx-tabs .ui.attached.menu {
+ border-bottom: none
+}
+
+.sphinx-tabs .ui.tabular.menu .item {
+ border-bottom: 2px solid transparent;
+ border-left: none;
+ border-right: none;
+ border-top: none;
+ padding: .3em 0.6em;
+}
+
+.sphinx-tabs .ui.attached.segment, .ui.segment {
+ border: 0;
+ padding: 0;
+}
diff --git a/src/pallets_sphinx_themes/themes/pocoo/static/version_warning_offset.js b/src/pallets_sphinx_themes/themes/pocoo/static/version_warning_offset.js
new file mode 100644
index 0000000..c7f9f49
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/static/version_warning_offset.js
@@ -0,0 +1,40 @@
+/*
+When showing the sticky version warning, the warning will cover the
+scroll target when navigating to #id hash locations. Take over scrolling
+to adjust the position to account for the height of the warning.
+*/
+$(() => {
+ const versionWarning = $('.version-warning')
+
+ // Skip if there is no version warning, regular browser behavior is
+ // fine in that case.
+ if (versionWarning.length) {
+ const height = versionWarning.outerHeight(true)
+ const target = $(':target')
+
+ // Adjust position when the initial link has a hash.
+ if (target.length) {
+ // Use absolute scrollTo instead of relative scrollBy to avoid
+ // scrolling when the viewport is already at the bottom of the
+ // document and has space.
+ const y = target.offset().top - height
+ // Delayed because the initial browser scroll doesn't seem to
+ // happen until after the document ready event, so scrolling
+ // immediately will be overridden.
+ setTimeout(() => scrollTo(0, y), 100)
+ }
+
+ // Listen to clicks on hash anchors.
+ $('a[href^="#"]').on('click', e => {
+ // Stop default scroll. Also stops the automatic URL hash update.
+ e.preventDefault()
+ // Get the id to scroll to and set the URL hash manually.
+ const id = $(e.currentTarget).attr('href').substring(1)
+ location.hash = id
+ // Use getElementById since the hash may have dots in it.
+ const target = $(document.getElementById(id))
+ // Scroll to top of target with space for the version warning.
+ scrollTo(0, target.offset().top - height)
+ })
+ }
+})
diff --git a/src/pallets_sphinx_themes/themes/pocoo/theme.conf b/src/pallets_sphinx_themes/themes/pocoo/theme.conf
new file mode 100644
index 0000000..972c9c9
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/theme.conf
@@ -0,0 +1,8 @@
+[theme]
+inherit = basic
+stylesheet = pocoo.css
+pygments_style = pocoo
+sidebars = localtoc.html, relations.html, searchbox.html, ethicalads.html
+
+[options]
+index_sidebar_logo = True
diff --git a/src/pallets_sphinx_themes/themes/pocoo/versions.html b/src/pallets_sphinx_themes/themes/pocoo/versions.html
new file mode 100644
index 0000000..b3a63de
--- /dev/null
+++ b/src/pallets_sphinx_themes/themes/pocoo/versions.html
@@ -0,0 +1,8 @@
+{% if versions %}
+ <h3>Versions</h3>
+ <ul class="versions">{% for version in versions %}
+ <li><a href="{{ version.href() }}" {% if version.current %}class="current"{% endif %}>
+ {{ version.name }}
+ </a></li>
+ {% endfor %}</ul>
+{% endif %}