TYPO3-Documentation / sphinx_typo3_theme

Sphinx theme for docs.typo3.org
https://typo3-documentation.github.io/sphinx_typo3_theme
MIT License
28 stars 18 forks source link

Indenting of code-blocks with captions is different from code blocks without captions #185

Closed sypets closed 1 year ago

sypets commented 1 year ago

This might lead to weird effects, unless captions are used for all or none code blocks.

Example:

Access the :php:`ContentObjectRenderer` (often referred to as "cObj"):

.. code-block:: php
    :caption: discouraged TSFE method

    // this is discouraged, obtain TSFE from request attribute 'frontend.controller'
    // see next example
    $cObj = $GLOBALS['TSFE']->cObj;

.. code-block:: php

    $frontendController = $request->getAttribute('frontend.controller');
    $cObj = $frontendController->cObj;

In the case of a non Extbase plugin via setter injection:

.. code-block:: php

    public function setContentObjectRenderer(ContentObjectRenderer $cObj): void
    {
        $this->cObj = $cObj;
    }

Looks like this:

image

marble commented 1 year ago

The problem occurs because Sphinx via Docutils adds CSS classes like "docutils container" to div tags. That creates a conflict with our Bootstrap theme, that also uses the "container" class.

See https://stackoverflow.com/questions/34534327/how-do-i-prevent-sphinx-from-adding-the-container-class-when-using-the-contain

A remedy could be https://github.com/dnnsoftware/Docs/blob/master/common/ext/div.py

marble commented 1 year ago

Fixed with Docker Rendering Container DRC v3.0.0. See demo on page https://typo3-documentation.github.io/sphinx_typo3_theme_rendering_test/Codeblocks/Index.html

Cause of problem Sphinx uses Docutils to create HTML. Docutils adds css class container to some divs, which conflicts with Bootstrap's css class container. When rendering for the server DRC does HTML postprocessing. Each and every HTML file is parsed and modified in some ways. The DRC now looks for classes docutils.container and renames these to docutils.du-container. This eliminates the conflict with Bootstrap.

Note: For speed reasons HTML postprocessing does not happen when rendering locally with dockrun_t3rd makehtml. To turn HTML postprocessing use: dockrun_t3rd makehtml -c force_html_postprocessing 1.

Advanced: See toolchain help: dockrun_t3rd makehtml -c toolchain_help 1