]> BookStack Code Mirror - bookstack/commitdiff
Added in table + tasklist markdown rendering
authorDan Brown <redacted>
Sat, 9 Jan 2021 19:04:23 +0000 (19:04 +0000)
committerDan Brown <redacted>
Sat, 9 Jan 2021 19:04:23 +0000 (19:04 +0000)
For parity with markdown-it renderer.
Added tests to cover.
For #2452

app/Entities/Tools/PageContent.php
tests/Entity/PageContentTest.php

index f60971b8bbe02b4539419fe1103426ef1017fda7..91de94211427d51da6fcd68fb6fb38c3540d7f97 100644 (file)
@@ -5,6 +5,9 @@ use DOMDocument;
 use DOMNodeList;
 use DOMXPath;
 use League\CommonMark\CommonMarkConverter;
+use League\CommonMark\Environment;
+use League\CommonMark\Extension\Table\TableExtension;
+use League\CommonMark\Extension\TaskList\TaskListExtension;
 
 class PageContent
 {
@@ -45,7 +48,10 @@ class PageContent
      */
     protected function markdownToHtml(string $markdown): string
     {
-        $converter = new CommonMarkConverter();
+        $environment = Environment::createCommonMarkEnvironment();
+        $environment->addExtension(new TableExtension());
+        $environment->addExtension(new TaskListExtension());
+        $converter = new CommonMarkConverter([], $environment);
         return $converter->convertToHtml($markdown);
     }
 
index 51a8568bfa9a7e8a32e45b844da214b7f4592aa1..8576458230a5e4c69dffc63656324a8e53021367 100644 (file)
@@ -420,4 +420,45 @@ class PageContentTest extends TestCase
         $page->refresh();
         $this->assertEquals('"Hello & welcome"', $page->text);
     }
+
+    public function test_page_markdown_table_rendering()
+    {
+        $this->asEditor();
+        $page = Page::query()->first();
+
+        $content = '| Syntax      | Description |
+| ----------- | ----------- |
+| Header      | Title       |
+| Paragraph   | Text        |';
+        $this->put($page->getUrl(), [
+            'name' => $page->name,  'markdown' => $content,
+            'html' => '', 'summary' => ''
+        ]);
+
+        $page->refresh();
+        $this->assertStringContainsString('</tbody>', $page->html);
+
+        $pageView = $this->get($page->getUrl());
+        $pageView->assertElementExists('.page-content table tbody td');
+    }
+
+    public function test_page_markdown_task_list_rendering()
+    {
+        $this->asEditor();
+        $page = Page::query()->first();
+
+        $content = '- [ ] Item a
+- [x] Item b';
+        $this->put($page->getUrl(), [
+            'name' => $page->name,  'markdown' => $content,
+            'html' => '', 'summary' => ''
+        ]);
+
+        $page->refresh();
+        $this->assertStringContainsString('input', $page->html);
+        $this->assertStringContainsString('type="checkbox"', $page->html);
+
+        $pageView = $this->get($page->getUrl());
+        $pageView->assertElementExists('.page-content input[type=checkbox]');
+    }
 }