Skip to content

Commit e4d7008

Browse files
committed
Updated handling of `<br> tags in blockquotes
1 parent 69430d2 commit e4d7008

File tree

8 files changed

+97
-50
lines changed

8 files changed

+97
-50
lines changed

app/View/Components/Docs/Content.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace App\View\Components\Docs;
44

55
use App\View\Modifications\BladeComponentModifier;
6-
use App\View\Modifications\BlockquoteColorModifier;
6+
use App\View\Modifications\BlockquoteModifier;
77
use App\View\Modifications\HeaderLinksModifier;
88
use App\View\Modifications\HTMLCleanseModifier;
99
use App\View\Modifications\ImageAltModifier;
@@ -54,7 +54,7 @@ public function toHtml(): string
5454
->send($this->content)
5555
->through([
5656
HTMLCleanseModifier::class, // Стандартизирует HTML
57-
BlockquoteColorModifier::class, // Применяет цвет к блокам цитат (Например предупреждение)
57+
BlockquoteModifier::class, // Применяет цвет к блокам цитат (Например предупреждение)
5858
RemoveFirstHeaderModifier::class, // Удаляет h1 заголовок
5959
HeaderLinksModifier::class, // Добавляет ссылки для заголовков
6060
ResponsiveTableModifier::class, // Добавляет к таблице класс table-responsive

app/View/Components/Posts/Content.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace App\View\Components\Posts;
44

55
use App\View\Modifications\BladeComponentModifier;
6-
use App\View\Modifications\BlockquoteColorModifier;
6+
use App\View\Modifications\BlockquoteModifier;
77
use App\View\Modifications\HTMLCleanseModifier;
88
use App\View\Modifications\ImageAltModifier;
99
use App\View\Modifications\ResponsiveTableModifier;
@@ -59,7 +59,7 @@ public function toHtml(): string
5959
->send($content)
6060
->through([
6161
HTMLCleanseModifier::class, // Стандартизирует HTML
62-
BlockquoteColorModifier::class, // Применяет цвет к блокам цитат (Например предупреждение)
62+
BlockquoteModifier::class, // Применяет цвет к блокам цитат (Например предупреждение)
6363
ResponsiveTableModifier::class, // Добавляет к таблице класс table-responsive
6464
BladeComponentModifier::class, // Применяет компоненты blade
6565
ImageAltModifier::class, // Добавляет alt к картинкам

app/View/Modifications/BlockquoteColorModifier.php renamed to app/View/Modifications/BlockquoteModifier.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Illuminate\Support\Str;
66
use Symfony\Component\DomCrawler\Crawler;
77

8-
class BlockquoteColorModifier extends HTMLModifier
8+
class BlockquoteModifier extends HTMLModifier
99
{
1010
protected array $types = [
1111
// docs-blockquote-note
@@ -16,6 +16,7 @@ class BlockquoteColorModifier extends HTMLModifier
1616

1717
// docs-blockquote-tip
1818
'{tip}' => 'docs-blockquote-tip', // for 8.x
19+
'{video}' => 'docs-blockquote-tip', // for 8.x
1920
'<strong>Note</strong>' => 'docs-blockquote-tip', // for 10.x
2021
'<strong>Примечание</strong>' => 'docs-blockquote-tip', // for 10.x
2122
'[!NOTE]' => 'docs-blockquote-tip', // for 10.x
@@ -50,6 +51,18 @@ public function handle(string $content, \Closure $next)
5051
$content = Str::of($content)->replace($tag, $html);
5152
});
5253

54+
$this->crawler($content)
55+
->filter('blockquote p')
56+
->each(function (Crawler $elm) use (&$content) {
57+
$tag = $elm->outerHtml();
58+
59+
$html = Str::of($tag)->between('<p>', '</p>')->replace('<br>', PHP_EOL)->trim()->toString();
60+
$html = nl2br($html);
61+
62+
$content = Str::of($content)->replace($tag, '<p>'.$html.'</p>');
63+
});
64+
65+
5366
return $next($content);
5467
}
5568
}

public/build/assets/app-BN6-1s-2.css renamed to public/build/assets/app-BaiyHV97.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"src": "public/img/ui/warning.svg"
1313
},
1414
"resources/css/app.scss": {
15-
"file": "assets/app-BN6-1s-2.css",
15+
"file": "assets/app-BaiyHV97.css",
1616
"src": "resources/css/app.scss",
1717
"isEntry": true
1818
},

resources/css/docs.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ main div {
139139
text-decoration: underline;
140140
}
141141

142-
:empty {
142+
> :empty:not(br) {
143143
display: none;
144144
}
145145
}

tests/Unit/Modifications/BlockquoteColorModifierTest.php

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
3+
namespace Tests\Unit\Modifications;
4+
5+
use App\View\Modifications\BlockquoteModifier;
6+
use PHPUnit\Framework\TestCase;
7+
8+
class BlockquoteModifierTest extends TestCase
9+
{
10+
public function testItAddsCssClassesToBlockquoteTags(): void
11+
{
12+
$modifier = new BlockquoteModifier();
13+
14+
$html = '
15+
<blockquote>{note} This is a note.</blockquote>
16+
<blockquote><strong>Warning</strong> This is a warning.</blockquote>
17+
<blockquote>{tip} This is a tip.</blockquote>
18+
<blockquote><strong>Note</strong> This is a note.</blockquote>
19+
<blockquote>[!WARNING] This is a warning.</blockquote>
20+
<blockquote>[!NOTE] This is a tip.</blockquote>
21+
<blockquote><p><br>Более подробную документацию по использованию Vite с Laravel можно найти в нашей <a href="/docs/10.x/vite"> специализированной документации по сборке и компиляции ваших ресурсов.</a>.</p></blockquote>
22+
';
23+
24+
$modifiedHtml = $modifier->handle($html, function ($content) {
25+
return $content;
26+
});
27+
28+
$expectedResult = '
29+
<blockquote class="docs-blockquote-note"><div> This is a note.</div></blockquote>
30+
<blockquote class="docs-blockquote-note"><div> This is a warning.</div></blockquote>
31+
<blockquote class="docs-blockquote-tip"><div> This is a tip.</div></blockquote>
32+
<blockquote class="docs-blockquote-tip"><div> This is a note.</div></blockquote>
33+
<blockquote class="docs-blockquote-note"><div> This is a warning.</div></blockquote>
34+
<blockquote class="docs-blockquote-tip"><div> This is a tip.</div></blockquote>
35+
';
36+
37+
// Удаляем лишние пробелы и символы новой строки для лучшего сравнения
38+
$expectedResult = preg_replace('/\s+/', '', $expectedResult);
39+
$modifiedHtml = preg_replace('/\s+/', '', $modifiedHtml);
40+
41+
$this->assertEquals($expectedResult, $modifiedHtml);
42+
}
43+
44+
public function testItPreservesBrTagsInBlockquotes(): void
45+
{
46+
$modifier = new BlockquoteModifier();
47+
48+
$html = '
49+
<blockquote>
50+
<p>
51+
<br>
52+
Более подробную документацию по использованию Vite с Laravel можно найти в нашей <a href="/docs/10.x/vite">
53+
специализированной документации по сборке и компиляции ваших ресурсов.</a>.
54+
</p>
55+
</blockquote>
56+
';
57+
58+
$modifiedHtml = $modifier->handle($html, function ($content) {
59+
return $content;
60+
});
61+
62+
$expectedResult = '
63+
<blockquote>
64+
<p>
65+
Более подробную документацию по использованию Vite с Laravel можно найти в нашей <a href="/docs/10.x/vite">
66+
<br/>специализированной документации по сборке и компиляции ваших ресурсов.</a>.
67+
</p>
68+
</blockquote>
69+
';
70+
71+
$expectedResult = preg_replace('/\s+/', '', $expectedResult);
72+
$modifiedHtml = preg_replace('/\s+/', '', $modifiedHtml);
73+
74+
$this->assertEquals($expectedResult, $modifiedHtml);
75+
}
76+
}

0 commit comments

Comments
 (0)