Make the table of contents collapsed by default (#2364)

This commit is contained in:
Adam Turner 2022-03-14 01:49:03 +00:00 committed by GitHub
parent 4c76e963f2
commit 13aa4b16fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 66 additions and 50 deletions

View File

@ -12,8 +12,8 @@ Post-History:
Replaces: 248 Replaces: 248
`Introduction`_ Introduction
=============== ============
This API has been defined to encourage similarity between the Python This API has been defined to encourage similarity between the Python
modules that are used to access databases. By doing this, we hope to modules that are used to access databases. By doing this, we hope to
@ -35,11 +35,11 @@ encouraged to use this version of the specification as basis for new
interfaces. interfaces.
`Module Interface`_ Module Interface
=================== =================
`Constructors`_ Constructors
--------------- ------------
Access to the database is made available through connection Access to the database is made available through connection
objects. The module must provide the following constructor for these: objects. The module must provide the following constructor for these:
@ -53,8 +53,8 @@ objects. The module must provide the following constructor for these:
which are database dependent. [1]_ which are database dependent. [1]_
`Globals`_ Globals
---------- -------
These module globals must be defined: These module globals must be defined:
@ -107,8 +107,8 @@ These module globals must be defined:
============ ============================================================== ============ ==============================================================
`Exceptions`_ Exceptions
------------- ----------
The module should make all error information available through these The module should make all error information available through these
exceptions or subclasses thereof: exceptions or subclasses thereof:
@ -220,14 +220,14 @@ This is the exception inheritance layout::
.. _Connection: .. _Connection:
`Connection Objects`_ Connection Objects
===================== ==================
Connection objects should respond to the following methods. Connection objects should respond to the following methods.
`Connection methods`_ Connection methods
--------------------- ------------------
.. .close(): .. .close():
.. _Connection.close: .. _Connection.close:
@ -283,8 +283,8 @@ Connection objects should respond to the following methods.
.. _Cursor: .. _Cursor:
`Cursor Objects`_ Cursor Objects
================= ==============
These objects represent a database cursor, which is used to manage the These objects represent a database cursor, which is used to manage the
context of a fetch operation. Cursors created from the same connection context of a fetch operation. Cursors created from the same connection
@ -297,8 +297,8 @@ transaction support is implemented (see also the connection's
Cursor Objects should respond to the following methods and attributes. Cursor Objects should respond to the following methods and attributes.
`Cursor attributes`_ Cursor attributes
-------------------- -----------------
.. _.description: .. _.description:
@ -344,8 +344,8 @@ Cursor Objects should respond to the following methods and attributes.
latter case to have the object return ``None`` instead of -1. latter case to have the object return ``None`` instead of -1.
`Cursor methods`_ Cursor methods
----------------- --------------
.. _.callproc: .. _.callproc:
.. _.callproc(): .. _.callproc():
@ -561,8 +561,8 @@ Cursor Objects should respond to the following methods and attributes.
.. _Type Objects: .. _Type Objects:
`Type Objects and Constructors`_ Type Objects and Constructors
================================ =============================
Many databases need to have the input in a particular format for Many databases need to have the input in a particular format for
binding to an operation's input parameters. For example, if an input binding to an operation's input parameters. For example, if an input
@ -682,8 +682,8 @@ on input and output.
.. _Implementation Hints: .. _Implementation Hints:
`Implementation Hints for Module Authors`_ Implementation Hints for Module Authors
========================================== =======================================
* Date/time objects can be implemented as `Python datetime module * Date/time objects can be implemented as `Python datetime module
<http://docs.python.org/library/datetime.html>`__ objects (available <http://docs.python.org/library/datetime.html>`__ objects (available
@ -769,8 +769,8 @@ on input and output.
API to create the exception objects. API to create the exception objects.
`Optional DB API Extensions`_ Optional DB API Extensions
============================= ==========================
During the lifetime of DB API 2.0, module authors have often extended During the lifetime of DB API 2.0, module authors have often extended
their implementations beyond what is required by this DB API their implementations beyond what is required by this DB API
@ -934,8 +934,8 @@ Cursor\ `.lastrowid`_
*Warning Message:* "DB-API extension cursor.lastrowid used" *Warning Message:* "DB-API extension cursor.lastrowid used"
`Optional Error Handling Extensions`_ Optional Error Handling Extensions
===================================== ==================================
The core DB API specification only introduces a set of exceptions The core DB API specification only introduces a set of exceptions
which can be raised to report errors to the user. In some cases, which can be raised to report errors to the user. In some cases,
@ -981,8 +981,8 @@ Cursors should inherit the ``.errorhandler`` setting from their
connection objects at cursor creation time. connection objects at cursor creation time.
`Optional Two-Phase Commit Extensions`_ Optional Two-Phase Commit Extensions
======================================= ====================================
Many databases have support for two-phase commit (TPC) which allows Many databases have support for two-phase commit (TPC) which allows
managing transactions across multiple database connections and other managing transactions across multiple database connections and other
@ -994,8 +994,8 @@ API should be implemented. NotSupportedError_ should be raised, if the
database backend support for two-phase commit can only be checked at database backend support for two-phase commit can only be checked at
run-time. run-time.
`TPC Transaction IDs`_ TPC Transaction IDs
---------------------- -------------------
As many databases follow the XA specification, transaction IDs are As many databases follow the XA specification, transaction IDs are
formed from three components: formed from three components:
@ -1034,8 +1034,8 @@ Transaction IDs are created with the `.xid()`_ Connection method:
represent transaction IDs with tuples rather than a custom object. represent transaction IDs with tuples rather than a custom object.
`TPC Connection Methods`_ TPC Connection Methods
------------------------- ----------------------
.. _.tpc_*: .. _.tpc_*:
.. _.tpc_*(): .. _.tpc_*():
@ -1117,8 +1117,8 @@ Transaction IDs are created with the `.xid()`_ Connection method:
`Frequently Asked Questions`_ Frequently Asked Questions
============================= ==========================
The database SIG often sees reoccurring questions about the DB API The database SIG often sees reoccurring questions about the DB API
specification. This section covers some of the issues people sometimes specification. This section covers some of the issues people sometimes
@ -1153,8 +1153,8 @@ between databases and makes writing portable code impossible.
`Major Changes from Version 1.0 to Version 2.0`_ Major Changes from Version 1.0 to Version 2.0
================================================ =============================================
The Python Database API 2.0 introduces a few major changes compared to The Python Database API 2.0 introduces a few major changes compared to
the 1.0 version. Because some of these changes will cause existing DB the 1.0 version. Because some of these changes will cause existing DB
@ -1197,8 +1197,8 @@ Post-publishing additions to the DB API 2.0 specification:
functionality were specified. functionality were specified.
`Open Issues`_ Open Issues
============== ===========
Although the version 2.0 specification clarifies a lot of questions Although the version 2.0 specification clarifies a lot of questions
that were left open in the 1.0 version, there are still some remaining that were left open in the 1.0 version, there are still some remaining
@ -1213,8 +1213,8 @@ issues which should be addressed in future versions:
`Footnotes`_ Footnotes
============ =========
.. [1] As a guideline the connection constructor parameters should be .. [1] As a guideline the connection constructor parameters should be
implemented as keyword parameters for more intuitive use and implemented as keyword parameters for more intuitive use and
@ -1298,8 +1298,8 @@ issues which should be addressed in future versions:
of the ``.rowcount`` attribute. of the ``.rowcount`` attribute.
`Acknowledgements`_ Acknowledgements
=================== ================
Many thanks go to Andrew Kuchling who converted the Python Database Many thanks go to Andrew Kuchling who converted the Python Database
API Specification 2.0 from the original HTML format into the PEP API Specification 2.0 from the original HTML format into the PEP
@ -1312,7 +1312,7 @@ Many thanks to Daniele Varrazzo for converting the specification from
text PEP format to ReST PEP format, which allows linking to various text PEP format to ReST PEP format, which allows linking to various
parts. parts.
`Copyright`_ Copyright
============ =========
This document has been placed in the Public Domain. This document has been placed in the Public Domain.

View File

@ -465,8 +465,8 @@ Work for this is being tracked at
https://github.com/python/core-workflow/issues/7. https://github.com/python/core-workflow/issues/7.
Create https://git.python.org Create ``https://git.python.org``
''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''
Just as hg.python.org [#h.p.o]_ currently points to the Mercurial Just as hg.python.org [#h.p.o]_ currently points to the Mercurial
repository for Python, git.python.org should do the equivalent for repository for Python, git.python.org should do the equivalent for

View File

@ -38,6 +38,7 @@ class FileBuilder(StandaloneHTMLBuilder):
toc_tree = self.env.tocs[docname].deepcopy() toc_tree = self.env.tocs[docname].deepcopy()
if len(toc_tree[0]) > 1: if len(toc_tree[0]) > 1:
toc_tree = toc_tree[0][1] # don't include document title toc_tree = toc_tree[0][1] # don't include document title
del toc_tree[0] # remove contents node
for node in toc_tree.findall(nodes.reference): for node in toc_tree.findall(nodes.reference):
node["refuri"] = node["anchorname"] or '#' # fix targets node["refuri"] = node["anchorname"] or '#' # fix targets
toc = self.render_partial(toc_tree)["fragment"] toc = self.render_partial(toc_tree)["fragment"]

View File

@ -89,6 +89,17 @@ class PEPTranslator(html5.HTML5Translator):
# Close the def tags # Close the def tags
self.body.append("</dt>\n<dd>") self.body.append("</dt>\n<dd>")
def visit_bullet_list(self, node):
if isinstance(node.parent, nodes.section) and "contents" in node.parent["names"]:
self.body.append("<details><summary>Contents</summary>")
self.context.append("</details>")
super().visit_bullet_list(node)
def depart_bullet_list(self, node):
super().depart_bullet_list(node)
if isinstance(node.parent, nodes.section) and "contents" in node.parent["names"]:
self.body.append(self.context.pop())
def unknown_visit(self, node: nodes.Node) -> None: def unknown_visit(self, node: nodes.Node) -> None:
"""No processing for unknown node types.""" """No processing for unknown node types."""
pass pass

View File

@ -17,8 +17,7 @@ class PEPContents(transforms.Transform):
if not Path(self.document["source"]).match("pep-*"): if not Path(self.document["source"]).match("pep-*"):
return # not a PEP file, exit early return # not a PEP file, exit early
# Create the contents placeholder section # Create the contents placeholder section
title = nodes.title("", "", nodes.Text("Contents")) contents_section = nodes.section("")
contents_section = nodes.section("", title)
if not self.document.has_name("contents"): if not self.document.has_name("contents"):
contents_section["names"].append("contents") contents_section["names"].append("contents")
self.document.note_implicit_target(contents_section) self.document.note_implicit_target(contents_section)

View File

@ -118,6 +118,11 @@ pre {
padding: .5rem .75rem; padding: .5rem .75rem;
} }
/* Contents rules */
details > summary {
font-weight: bold;
}
/* Definition list rules */ /* Definition list rules */
dl dt { dl dt {
font-weight: bold; font-weight: bold;