mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-18 18:38:44 +00:00
Fixed drawing handling on HTML to Markdown conversion
This commit is contained in:
parent
d3b39fbe50
commit
c8a7acb6c7
5 changed files with 55 additions and 3 deletions
app/Entities/Tools/Markdown
tests/Entity
20
app/Entities/Tools/Markdown/CustomDivConverter.php
Normal file
20
app/Entities/Tools/Markdown/CustomDivConverter.php
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BookStack\Entities\Tools\Markdown;
|
||||||
|
|
||||||
|
use League\HTMLToMarkdown\Converter\DivConverter;
|
||||||
|
use League\HTMLToMarkdown\ElementInterface;
|
||||||
|
|
||||||
|
class CustomDivConverter extends DivConverter
|
||||||
|
{
|
||||||
|
public function convert(ElementInterface $element): string
|
||||||
|
{
|
||||||
|
// Clean up draw.io diagrams
|
||||||
|
$drawIoDiagram = $element->getAttribute('drawio-diagram');
|
||||||
|
if ($drawIoDiagram) {
|
||||||
|
return "<div drawio-diagram=\"{$drawIoDiagram}\">{$element->getValue()}</div>\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::convert($element);
|
||||||
|
}
|
||||||
|
}
|
24
app/Entities/Tools/Markdown/CustomImageConverter.php
Normal file
24
app/Entities/Tools/Markdown/CustomImageConverter.php
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace BookStack\Entities\Tools\Markdown;
|
||||||
|
|
||||||
|
use League\HTMLToMarkdown\Converter\ImageConverter;
|
||||||
|
use League\HTMLToMarkdown\ElementInterface;
|
||||||
|
|
||||||
|
class CustomImageConverter extends ImageConverter
|
||||||
|
{
|
||||||
|
public function convert(ElementInterface $element): string
|
||||||
|
{
|
||||||
|
$parent = $element->getParent();
|
||||||
|
|
||||||
|
// Remain as HTML if within diagram block.
|
||||||
|
$withinDrawing = $parent && !empty($parent->getAttribute('drawio-diagram'));
|
||||||
|
if ($withinDrawing) {
|
||||||
|
$src = e($element->getAttribute('src'));
|
||||||
|
$alt = e($element->getAttribute('alt'));
|
||||||
|
return "<img src=\"{$src}\" alt=\"{$alt}\"/>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::convert($element);
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ class CustomParagraphConverter extends ParagraphConverter
|
||||||
{
|
{
|
||||||
public function convert(ElementInterface $element): string
|
public function convert(ElementInterface $element): string
|
||||||
{
|
{
|
||||||
$class = $element->getAttribute('class');
|
$class = e($element->getAttribute('class'));
|
||||||
if (strpos($class, 'callout') !== false) {
|
if (strpos($class, 'callout') !== false) {
|
||||||
return "<{$element->getTagName()} class=\"{$class}\">{$element->getValue()}</{$element->getTagName()}>\n\n";
|
return "<{$element->getTagName()} class=\"{$class}\">{$element->getValue()}</{$element->getTagName()}>\n\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,12 +75,12 @@ class HtmlToMarkdown
|
||||||
$environment->addConverter(new BlockquoteConverter());
|
$environment->addConverter(new BlockquoteConverter());
|
||||||
$environment->addConverter(new CodeConverter());
|
$environment->addConverter(new CodeConverter());
|
||||||
$environment->addConverter(new CommentConverter());
|
$environment->addConverter(new CommentConverter());
|
||||||
$environment->addConverter(new DivConverter());
|
$environment->addConverter(new CustomDivConverter());
|
||||||
$environment->addConverter(new EmphasisConverter());
|
$environment->addConverter(new EmphasisConverter());
|
||||||
$environment->addConverter(new HardBreakConverter());
|
$environment->addConverter(new HardBreakConverter());
|
||||||
$environment->addConverter(new HeaderConverter());
|
$environment->addConverter(new HeaderConverter());
|
||||||
$environment->addConverter(new HorizontalRuleConverter());
|
$environment->addConverter(new HorizontalRuleConverter());
|
||||||
$environment->addConverter(new ImageConverter());
|
$environment->addConverter(new CustomImageConverter());
|
||||||
$environment->addConverter(new LinkConverter());
|
$environment->addConverter(new LinkConverter());
|
||||||
$environment->addConverter(new ListBlockConverter());
|
$environment->addConverter(new ListBlockConverter());
|
||||||
$environment->addConverter(new ListItemConverter());
|
$environment->addConverter(new ListItemConverter());
|
||||||
|
|
|
@ -39,6 +39,14 @@ class MarkdownToHtmlTest extends TestCase
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_drawing_blocks_remain_html()
|
||||||
|
{
|
||||||
|
$this->assertConversion(
|
||||||
|
'<div drawio-diagram="190" id="bkmrk--0" contenteditable="false"><img src="http://example.com/uploads/images/drawio/2022-04/drawing-1.png" alt="" /></div>Some text',
|
||||||
|
'<div drawio-diagram="190"><img src="http://example.com/uploads/images/drawio/2022-04/drawing-1.png" alt=""/></div>' . "\n\nSome text"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
protected function assertConversion(string $html, string $expectedMarkdown, bool $partialMdMatch = false)
|
protected function assertConversion(string $html, string $expectedMarkdown, bool $partialMdMatch = false)
|
||||||
{
|
{
|
||||||
$markdown = (new HtmlToMarkdown($html))->convert();
|
$markdown = (new HtmlToMarkdown($html))->convert();
|
||||||
|
|
Loading…
Add table
Reference in a new issue