summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2010-05-24 23:14:35 +0200
committerGeorg Brandl <georg@python.org>2010-05-24 23:14:35 +0200
commit497376f86c7a82e91c4e1ceaa00a5ca2ef9ce3ae (patch)
tree9445a405bf26cdb847ffd5cb64d33c20d9ad2cb0
parent497a609be5d146b753f378cefd5202f3edf81097 (diff)
downloadsphinx-497376f86c7a82e91c4e1ceaa00a5ca2ef9ce3ae.tar.gz
In the default theme, the sidebar can experimentally now be made collapsible using the new ``collapsiblesidebar`` theme option.
-rw-r--r--AUTHORS1
-rw-r--r--CHANGES4
-rw-r--r--doc/conf.py3
-rw-r--r--doc/theming.rst5
-rw-r--r--sphinx/themes/default/layout.html14
-rw-r--r--sphinx/themes/default/static/default.css_t2
-rw-r--r--sphinx/themes/default/static/sidebar.js147
-rw-r--r--sphinx/themes/default/theme.conf2
8 files changed, 175 insertions, 3 deletions
diff --git a/AUTHORS b/AUTHORS
index 92deb791..10120c7b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -19,6 +19,7 @@ Other contributors, listed alphabetically, are:
* Martin Mahner -- nature theme
* Will Maier -- directory HTML builder
* Roland Meister -- epub builder
+* Ezio Melotti -- collapsible sidebar JavaScript
* Daniel Neuhäuser -- JavaScript domain
* Christopher Perkins -- autosummary integration
* Benjamin Peterson -- unittests
diff --git a/CHANGES b/CHANGES
index 506ef4b8..a8a0bf7b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -87,6 +87,10 @@ Features added
``domain`` and ``domain-rolename``.
- References now get the class ``internal`` if they are internal to
the whole project, as opposed to internal to the current page.
+ - External references can be styled differently with the new
+ ``externalrefs`` theme option for the default theme.
+ - In the default theme, the sidebar can experimentally now be made
+ collapsible using the new ``collapsiblesidebar`` theme option.
- #129: Toctrees are now wrapped in a ``div`` tag with class
``toctree-wrapper`` in HTML output.
- The ``toctree()`` callable in templates now has a ``maxdepth``
diff --git a/doc/conf.py b/doc/conf.py
index b268a13f..e009fa1b 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -18,7 +18,8 @@ version = sphinx.__released__
release = version
show_authors = True
-html_theme = 'sphinxdoc'
+html_theme = 'default'
+html_theme_options = {'collapsiblesidebar': True, 'stickysidebar': False}
modindex_common_prefix = ['sphinx.']
html_static_path = ['_static']
html_index = 'index.html'
diff --git a/doc/theming.rst b/doc/theming.rst
index ca6e8b2d..fc8ef236 100644
--- a/doc/theming.rst
+++ b/doc/theming.rst
@@ -105,6 +105,11 @@ These themes are:
doesn't scroll out of view for long body content. This may not work well
with all browsers. Defaults to false.
+ - **collapsiblesidebar** (true or false): Add an *experimental* JavaScript
+ snippet that makes the sidebar collapsible via a button on its side.
+ *Doesn't work together with "rightsidebar" or "stickysidebar".* Defaults to
+ false.
+
- **externalrefs** (true or false): Display external links differently from
internal links. Defaults to false.
diff --git a/sphinx/themes/default/layout.html b/sphinx/themes/default/layout.html
new file mode 100644
index 00000000..43ee2cdf
--- /dev/null
+++ b/sphinx/themes/default/layout.html
@@ -0,0 +1,14 @@
+{#
+ default/layout.html
+ ~~~~~~~~~~~~~~~~~~~
+
+ Sphinx layout template for the default theme.
+
+ :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+#}
+{% extends "basic/layout.html" %}
+
+{% if theme_collapsiblesidebar|tobool %}
+{% set script_files = script_files + ['_static/sidebar.js'] %}
+{% endif %}
diff --git a/sphinx/themes/default/static/default.css_t b/sphinx/themes/default/static/default.css_t
index 8afa1a95..f200a0fe 100644
--- a/sphinx/themes/default/static/default.css_t
+++ b/sphinx/themes/default/static/default.css_t
@@ -164,7 +164,7 @@ a:hover {
text-decoration: underline;
}
-{% if theme_externalrefs %}
+{% if theme_externalrefs|tobool %}
a.external {
text-decoration: none;
border-bottom: 1px dashed {{ theme_linkcolor }};
diff --git a/sphinx/themes/default/static/sidebar.js b/sphinx/themes/default/static/sidebar.js
new file mode 100644
index 00000000..28eefc33
--- /dev/null
+++ b/sphinx/themes/default/static/sidebar.js
@@ -0,0 +1,147 @@
+/*
+ * 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-2010 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+$(function() {
+ // global elements used by the functions.
+ // the 'sidebarbutton' element is defined as global after its
+ // creation, in the add_sidebar_button function
+ var bodywrapper = $('.bodywrapper');
+ var sidebar = $('.sphinxsidebar');
+ var sidebarwrapper = $('.sphinxsidebarwrapper');
+
+ // original margin-left of the bodywrapper and width of the sidebar
+ // with the sidebar expanded
+ var bw_margin_expanded = bodywrapper.css('margin-left');
+ var ssb_width_expanded = sidebar.width();
+
+ // margin-left of the bodywrapper and width of the sidebar
+ // with the sidebar collapsed
+ var bw_margin_collapsed = '.8em';
+ var ssb_width_collapsed = '.8em';
+
+ // colors used by the current theme
+ var dark_color = $('.related').css('background-color');
+ var light_color = $('.document').css('background-color');
+
+ function sidebar_is_collapsed() {
+ return sidebarwrapper.is(':not(:visible)');
+ }
+
+ function toggle_sidebar() {
+ if (sidebar_is_collapsed())
+ expand_sidebar();
+ else
+ collapse_sidebar();
+ }
+
+ function collapse_sidebar() {
+ sidebarwrapper.hide();
+ sidebar.css('width', ssb_width_collapsed);
+ bodywrapper.css('margin-left', bw_margin_collapsed);
+ sidebarbutton.css({
+ 'margin-left': '0',
+ 'height': bodywrapper.height()
+ });
+ sidebarbutton.find('span').text('»');
+ sidebarbutton.attr('title', 'Expand sidebar');
+ document.cookie = 'sidebar=collapsed';
+ }
+
+ function expand_sidebar() {
+ bodywrapper.css('margin-left', bw_margin_expanded);
+ sidebar.css('width', ssb_width_expanded);
+ sidebarwrapper.show();
+ sidebarbutton.css({
+ 'margin-left': ssb_width_expanded-12,
+ 'height': bodywrapper.height()
+ });
+ sidebarbutton.find('span').text('«');
+ sidebarbutton.attr('title', 'Collapse sidebar');
+ document.cookie = 'sidebar=expanded';
+ }
+
+ function add_sidebar_button() {
+ sidebarwrapper.css({
+ 'float': 'left',
+ 'margin-right': '0',
+ 'width': ssb_width_expanded - 28
+ });
+ // create the button
+ sidebar.append(
+ '<div id="sidebarbutton"><span>&laquo;</span></div>'
+ );
+ var sidebarbutton = $('#sidebarbutton');
+ // find the height of the viewport to center the '<<' in the page
+ var viewport_height;
+ if (window.innerHeight)
+ viewport_height = window.innerHeight;
+ else
+ viewport_height = $(window).height();
+ sidebarbutton.find('span').css({
+ 'display': 'block',
+ 'margin-top': (viewport_height - sidebar.position().top - 20) / 2
+ });
+
+ sidebarbutton.click(toggle_sidebar);
+ sidebarbutton.attr('title', 'Collapse sidebar');
+ sidebarbutton.css({
+ 'color': '#FFFFFF',
+ 'border-left': '1px solid ' + dark_color,
+ 'font-size': '1.2em',
+ 'cursor': 'pointer',
+ 'height': bodywrapper.height(),
+ 'padding-top': '1px',
+ 'margin-left': ssb_width_expanded - 12
+ });
+
+ sidebarbutton.hover(
+ function () {
+ $(this).css('background-color', dark_color);
+ },
+ function () {
+ $(this).css('background-color', light_color);
+ }
+ );
+ }
+
+ function set_position_from_cookie() {
+ if (!document.cookie)
+ return;
+ var items = document.cookie.split(';');
+ for(var k=0; k<items.length; k++) {
+ var key_val = items[k].split('=');
+ var key = key_val[0];
+ if (key == 'sidebar') {
+ var value = key_val[1];
+ if ((value == 'collapsed') && (!sidebar_is_collapsed()))
+ collapse_sidebar();
+ else if ((value == 'expanded') && (sidebar_is_collapsed()))
+ expand_sidebar();
+ }
+ }
+ }
+
+ add_sidebar_button();
+ var sidebarbutton = $('#sidebarbutton');
+ set_position_from_cookie();
+}); \ No newline at end of file
diff --git a/sphinx/themes/default/theme.conf b/sphinx/themes/default/theme.conf
index 67eb0d66..ad5586b5 100644
--- a/sphinx/themes/default/theme.conf
+++ b/sphinx/themes/default/theme.conf
@@ -6,7 +6,7 @@ pygments_style = sphinx
[options]
rightsidebar = false
stickysidebar = false
-
+collapsiblesidebar = false
externalrefs = false
footerbgcolor = #11303d