Skip to content

Commit 4ec4b55

Browse files
committed
bug #138 Add support for CSS classes in code blocks (javiereguiluz, weaverryan)
This PR was merged into the main branch. Discussion ---------- Add support for CSS classes in code blocks In a Symfony book we have this RST code: ```rst The workflow starts with the creation of a Git branch: .. code-block:: terminal :class: hide $ git branch -D sessions-in-db || true .. code-block:: terminal $ git checkout -b sessions-in-db This command creates a ``sessions-in-db`` branch from the ``master`` branch. It "forks" the code and the infrastructure configuration. ``` The `:class: hide` attribute is important because that command should not be displayed to the book reader. Thus, we add the `hide` CSS class and hide that item on the webpage. However, this doesn't work because the RST parser seems to not propagate CSS classes in code blocks. This PR tries to fix that, but it's not working. It contains a failing test in `terminal.rst`/ `terminal.html` files. Thanks! Commits ------- ee044c1 Forwarding CSS classes to CodeNode 6367bc3 Add support for CSS classes in code blocks
2 parents 97ffc89 + ee044c1 commit 4ec4b55

File tree

21 files changed

+44
-22
lines changed

21 files changed

+44
-22
lines changed

src/Directive/CodeBlockDirective.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public function process(Parser $parser, ?Node $node, string $variable, string $d
3333
}
3434

3535
$node->setLanguage($data);
36+
// grab the "class" option and forward it onto the Node
37+
// CodeNodeRenderer can then use it when rendering
38+
$node->setClasses(isset($options['class']) ? explode(' ', $options['class']) : []);
3639

3740
if ('' !== $variable) {
3841
$environment = $parser->getEnvironment();

src/Renderers/CodeNodeRenderer.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public function render(): string
8484
return $this->templateRenderer->render(
8585
'code.html.twig',
8686
[
87+
'css_classes' => $this->codeNode->getClassesString(),
8788
'languages' => $languages,
8889
'line_numbers' => $lineNumbers,
8990
'code' => $highlightedCode,

src/Templates/default/html/code.html.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="{{ loc }}" class="notranslate codeblock codeblock-length-{{ length }} {{ languages|map(language => "codeblock-#{language}")|join(' ') }}">
1+
<div translate="no" data-loc="{{ loc }}" class="notranslate codeblock codeblock-length-{{ length }} {{ languages|map(language => "codeblock-#{language}")|join(' ') }} {{ css_classes }}">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">{{ line_numbers }}</pre>
44
<pre class="codeblock-code"><code>{{ code|raw }}</code></pre>

tests/fixtures/expected/blocks/code-blocks/bash.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-bash">
1+
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-bash ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1</pre>
44
<pre class="codeblock-code"><code>git <span class="hljs-built_in">clone</span> git@github.com:symfony/symfony.git</code></pre>

tests/fixtures/expected/blocks/code-blocks/diff.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="5" class="notranslate codeblock codeblock-length-sm codeblock-diff">
1+
<div translate="no" data-loc="5" class="notranslate codeblock codeblock-length-sm codeblock-diff ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1
44
2
@@ -17,7 +17,7 @@
1717
</div>
1818
</div>
1919

20-
<div translate="no" data-loc="6" class="notranslate codeblock codeblock-length-sm codeblock-diff">
20+
<div translate="no" data-loc="6" class="notranslate codeblock codeblock-length-sm codeblock-diff ">
2121
<div class="codeblock-scroll">
2222
<pre class="codeblock-lines">1
2323
2

tests/fixtures/expected/blocks/code-blocks/html-php.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="12" class="notranslate codeblock codeblock-length-md codeblock-html+php codeblock-html">
1+
<div translate="no" data-loc="12" class="notranslate codeblock codeblock-length-md codeblock-html+php codeblock-html ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1
44
2

tests/fixtures/expected/blocks/code-blocks/html-twig.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-html+twig codeblock-twig">
1+
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-html+twig codeblock-twig ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1
44
2</pre>

tests/fixtures/expected/blocks/code-blocks/html.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-html">
1+
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-html ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1</pre>
44
<pre class="codeblock-code"><code><span class="hljs-comment">&lt;!-- some code --&gt;</span>

tests/fixtures/expected/blocks/code-blocks/ini.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-ini">
1+
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-ini ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1</pre>
44
<pre class="codeblock-code"><code><span class="hljs-attr">fetch</span> = +refs/notes/*:refs/notes/*</code></pre>

tests/fixtures/expected/blocks/code-blocks/php-annotations.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="14" class="notranslate codeblock codeblock-length-md codeblock-php-annotations codeblock-php">
1+
<div translate="no" data-loc="14" class="notranslate codeblock codeblock-length-md codeblock-php-annotations codeblock-php ">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1
44
2

0 commit comments

Comments
 (0)