Skip to content

Commit

Permalink
Merge pull request #9717 from tk0miya/9710_even_odd_rows
Browse files Browse the repository at this point in the history
Fix #9710: html: Wrong styles for even/odd rows in nested tables
  • Loading branch information
tk0miya committed Oct 10, 2021
2 parents c613106 + dd2ff3e commit 1b8d40b
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 17 deletions.
6 changes: 6 additions & 0 deletions CHANGES
Expand Up @@ -28,6 +28,11 @@ Incompatible changes
Deprecated
----------

* ``sphinx.writers.html.HTMLTranslator._fieldlist_row_index``
* ``sphinx.writers.html.HTMLTranslator._table_row_index``
* ``sphinx.writers.html5.HTML5Translator._fieldlist_row_index``
* ``sphinx.writers.html5.HTML5Translator._table_row_index``

Features added
--------------

Expand Down Expand Up @@ -58,6 +63,7 @@ Bugs fixed
* #9630: autosummary: Failed to build summary table if :confval:`primary_domain`
is not 'py'
* #9670: html: Fix download file with special characters
* #9710: html: Wrong styles for even/odd rows in nested tables
* #9649: HTML search: when objects have the same name but in different domains,
return all of them as result instead of just one.
* #9678: linkcheck: file extension was shown twice in warnings
Expand Down
20 changes: 20 additions & 0 deletions doc/extdev/deprecated.rst
Expand Up @@ -22,6 +22,26 @@ The following is a list of deprecated interfaces.
- (will be) Removed
- Alternatives

* - ``sphinx.writers.html.HTMLTranslator._fieldlist_row_index``
- 4.3
- 6.0
- ``sphinx.writers.html.HTMLTranslator._fieldlist_row_indices``

* - ``sphinx.writers.html.HTMLTranslator._table_row_index``
- 4.3
- 6.0
- ``sphinx.writers.html.HTMLTranslator._table_row_indices``

* - ``sphinx.writers.html5.HTML5Translator._fieldlist_row_index``
- 4.3
- 6.0
- ``sphinx.writers.html5.HTML5Translator._fieldlist_row_indices``

* - ``sphinx.writers.html5.HTML5Translator._table_row_index``
- 4.3
- 6.0
- ``sphinx.writers.html5.HTML5Translator._table_row_indices``

* - The optional argument ``app`` for ``sphinx.environment.BuildEnvironment``
- 4.1
- 6.0
Expand Down
38 changes: 29 additions & 9 deletions sphinx/writers/html.py
Expand Up @@ -23,7 +23,7 @@

from sphinx import addnodes
from sphinx.builders import Builder
from sphinx.deprecation import RemovedInSphinx50Warning
from sphinx.deprecation import RemovedInSphinx50Warning, RemovedInSphinx60Warning
from sphinx.locale import _, __, admonitionlabels
from sphinx.util import logging
from sphinx.util.docutils import SphinxTranslator
Expand Down Expand Up @@ -96,8 +96,8 @@ def __init__(self, document: nodes.document, builder: Builder) -> None:
self.secnumber_suffix = self.config.html_secnumber_suffix
self.param_separator = ''
self.optional_param_level = 0
self._table_row_index = 0
self._fieldlist_row_index = 0
self._table_row_indices = [0]
self._fieldlist_row_indices = [0]
self.required_params_left = 0

def visit_start_of_file(self, node: Element) -> None:
Expand Down Expand Up @@ -807,16 +807,20 @@ def depart_manpage(self, node: Element) -> None:
# overwritten to add even/odd classes

def visit_table(self, node: Element) -> None:
self._table_row_index = 0
self._table_row_indices.append(0)

# set align=default if align not specified to give a default style
node.setdefault('align', 'default')

return super().visit_table(node)

def depart_table(self, node: Element) -> None:
self._table_row_indices.pop()
super().depart_table(node)

def visit_row(self, node: Element) -> None:
self._table_row_index += 1
if self._table_row_index % 2 == 0:
self._table_row_indices[-1] += 1
if self._table_row_indices[-1] % 2 == 0:
node['classes'].append('row-even')
else:
node['classes'].append('row-odd')
Expand All @@ -829,12 +833,16 @@ def visit_entry(self, node: Element) -> None:
self.body[-1] = ' '

def visit_field_list(self, node: Element) -> None:
self._fieldlist_row_index = 0
self._fieldlist_row_indices.append(0)
return super().visit_field_list(node)

def depart_field_list(self, node: Element) -> None:
self._fieldlist_row_indices.pop()
return super().depart_field_list(node)

def visit_field(self, node: Element) -> None:
self._fieldlist_row_index += 1
if self._fieldlist_row_index % 2 == 0:
self._fieldlist_row_indices[-1] += 1
if self._fieldlist_row_indices[-1] % 2 == 0:
node['classes'].append('field-even')
else:
node['classes'].append('field-odd')
Expand Down Expand Up @@ -876,3 +884,15 @@ def permalink_text(self) -> str:
warnings.warn('HTMLTranslator.permalink_text is deprecated.',
RemovedInSphinx50Warning, stacklevel=2)
return self.config.html_permalinks_icon

@property
def _fieldlist_row_index(self):
warnings.warn('_fieldlist_row_index is deprecated',
RemovedInSphinx60Warning, stacklevel=2)
return self._fieldlist_row_indices[-1]

@property
def _table_row_index(self):
warnings.warn('_table_row_index is deprecated',
RemovedInSphinx60Warning, stacklevel=2)
return self._table_row_indices[-1]
36 changes: 28 additions & 8 deletions sphinx/writers/html5.py
Expand Up @@ -67,8 +67,8 @@ def __init__(self, document: nodes.document, builder: Builder) -> None:
self.secnumber_suffix = self.config.html_secnumber_suffix
self.param_separator = ''
self.optional_param_level = 0
self._table_row_index = 0
self._fieldlist_row_index = 0
self._table_row_indices = [0]
self._fieldlist_row_indices = [0]
self.required_params_left = 0

def visit_start_of_file(self, node: Element) -> None:
Expand Down Expand Up @@ -743,7 +743,7 @@ def depart_manpage(self, node: Element) -> None:
# overwritten to add even/odd classes

def visit_table(self, node: Element) -> None:
self._table_row_index = 0
self._table_row_indices.append(0)

atts = {}
classes = [cls.strip(' \t\n') for cls in self.settings.table_style.split(',')]
Expand All @@ -757,22 +757,30 @@ def visit_table(self, node: Element) -> None:
tag = self.starttag(node, 'table', CLASS=' '.join(classes), **atts)
self.body.append(tag)

def depart_table(self, node: Element) -> None:
self._table_row_indices.pop()
super().depart_table(node)

def visit_row(self, node: Element) -> None:
self._table_row_index += 1
if self._table_row_index % 2 == 0:
self._table_row_indices[-1] += 1
if self._table_row_indices[-1] % 2 == 0:
node['classes'].append('row-even')
else:
node['classes'].append('row-odd')
self.body.append(self.starttag(node, 'tr', ''))
node.column = 0 # type: ignore

def visit_field_list(self, node: Element) -> None:
self._fieldlist_row_index = 0
self._fieldlist_row_indices.append(0)
return super().visit_field_list(node)

def depart_field_list(self, node: Element) -> None:
self._fieldlist_row_indices.pop()
return super().depart_field_list(node)

def visit_field(self, node: Element) -> None:
self._fieldlist_row_index += 1
if self._fieldlist_row_index % 2 == 0:
self._fieldlist_row_indices[-1] += 1
if self._fieldlist_row_indices[-1] % 2 == 0:
node['classes'].append('field-even')
else:
node['classes'].append('field-odd')
Expand Down Expand Up @@ -822,3 +830,15 @@ def generate_targets_for_table(self, node: Element) -> None:
for id in node['ids'][1:]:
self.body.append('<span id="%s"></span>' % id)
node['ids'].remove(id)

@property
def _fieldlist_row_index(self):
warnings.warn('_fieldlist_row_index is deprecated',
RemovedInSphinx60Warning, stacklevel=2)
return self._fieldlist_row_indices[-1]

@property
def _table_row_index(self):
warnings.warn('_table_row_index is deprecated',
RemovedInSphinx60Warning, stacklevel=2)
return self._table_row_indices[-1]

0 comments on commit 1b8d40b

Please sign in to comment.