summaryrefslogtreecommitdiffstats
path: root/sphinx/themes/classic/static/sidebar.js_t
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/themes/classic/static/sidebar.js_t')
-rw-r--r--sphinx/themes/classic/static/sidebar.js_t72
1 files changed, 72 insertions, 0 deletions
diff --git a/sphinx/themes/classic/static/sidebar.js_t b/sphinx/themes/classic/static/sidebar.js_t
new file mode 100644
index 0000000..32ae506
--- /dev/null
+++ b/sphinx/themes/classic/static/sidebar.js_t
@@ -0,0 +1,72 @@
+/*
+ * sidebar.js
+ * ~~~~~~~~~~
+ *
+ * This script makes the Sphinx sidebar collapsible.
+ *
+ * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
+ * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
+ * used to collapse and expand the sidebar.
+ *
+ * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
+ * and the width of the sidebar and the margin-left of the document
+ * are decreased. When the sidebar is expanded the opposite happens.
+ * This script saves a per-browser/per-session cookie used to
+ * remember the position of the sidebar among the pages.
+ * Once the browser is closed the cookie is deleted and the position
+ * reset to the default (expanded).
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+const initialiseSidebar = () => {
+ {% if theme_rightsidebar|tobool %}
+ {% set side = 'Right' %}
+ {% else %}
+ {% set side = 'Left' %}
+ {% endif %}
+
+ // global elements used by the functions.
+ const bodyWrapper = document.getElementsByClassName("bodywrapper")[0]
+ const sidebar = document.getElementsByClassName("sphinxsidebar")[0]
+ const sidebarWrapper = document.getElementsByClassName('sphinxsidebarwrapper')[0]
+ const sidebarButton = document.getElementById("sidebarbutton")
+ const sidebarArrow = sidebarButton.querySelector('span')
+
+ // for some reason, the document has no sidebar; do not run into errors
+ if (typeof sidebar === "undefined") return;
+
+ const flipArrow = element => element.innerText = (element.innerText === "»") ? "«" : "»"
+
+ const collapse_sidebar = () => {
+ bodyWrapper.style.margin{{side}} = ".8em";
+ sidebar.style.width = ".8em"
+ sidebarWrapper.style.display = "none"
+ flipArrow(sidebarArrow)
+ sidebarButton.title = _('Expand sidebar')
+ window.localStorage.setItem("sidebar", "collapsed")
+ }
+
+ const expand_sidebar = () => {
+ bodyWrapper.style.margin{{side}} = ""
+ sidebar.style.removeProperty("width")
+ sidebarWrapper.style.display = ""
+ flipArrow(sidebarArrow)
+ sidebarButton.title = _('Collapse sidebar')
+ window.localStorage.setItem("sidebar", "expanded")
+ }
+
+ sidebarButton.addEventListener("click", () => {
+ (sidebarWrapper.style.display === "none") ? expand_sidebar() : collapse_sidebar()
+ })
+
+ if (!window.localStorage.getItem("sidebar")) return
+ const value = window.localStorage.getItem("sidebar")
+ if (value === "collapsed") collapse_sidebar();
+ else if (value === "expanded") expand_sidebar();
+}
+
+if (document.readyState !== "loading") initialiseSidebar()
+else document.addEventListener("DOMContentLoaded", initialiseSidebar)