Skip to content

Commit 67b0d51

Browse files
authored
Зарефачить работу маркдауна в режиме plain text и добавить таблицы (#3672)
1 parent 5e49330 commit 67b0d51

File tree

15 files changed

+253
-123
lines changed

15 files changed

+253
-123
lines changed

src/JoinRpg.Markdown.Test/LinkRendererTest.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using Markdig.Renderers;
2+
13
namespace JoinRpg.Markdown.Test;
24

35
public class LinkRendererTest
@@ -8,11 +10,11 @@ private class LinkRendererMock : ILinkRenderer
810

911
public string[] LinkTypesToMatch { get; } = [Test];
1012

11-
public string Render(string match, int index, string extra)
13+
public void Render(HtmlRenderer renderer, string match, int index, string extra)
1214
{
1315
match.ShouldBe("%" + Test);
1416
index.ShouldBeGreaterThan(0);
15-
return $"<b>{index}</b>{extra}";
17+
renderer.Write($"<b>{index}</b>{extra}");
1618
}
1719
}
1820

@@ -22,11 +24,11 @@ private class LinkRendererMock2 : ILinkRenderer
2224

2325
public string[] LinkTypesToMatch { get; } = [Test];
2426

25-
public string Render(string match, int index, string extra)
27+
public void Render(HtmlRenderer renderer, string match, int index, string extra)
2628
{
2729
match.ShouldBe("%" + Test);
2830
index.ShouldBeGreaterThan(0);
29-
return $"<b>{index}</b>{extra}";
31+
renderer.Write($"<b>{index}</b>{extra}");
3032
}
3133
}
3234

src/JoinRpg.Markdown/DoNothingLinkRenderer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using Markdig.Renderers;
2+
13
namespace JoinRpg.Markdown;
24

35
/// <summary>
@@ -9,7 +11,7 @@ internal class DoNothingLinkRenderer : ILinkRenderer
911
public string[] LinkTypesToMatch { get; } = [];
1012

1113
/// <inheritdoc />
12-
public string Render(string match, int index, string extra) => throw new NotSupportedException();
14+
public void Render(HtmlRenderer renderer, string match, int index, string extra) => throw new NotSupportedException();
1315

1416
/// <summary>
1517
/// Instance copy to avoid allocations

src/JoinRpg.Markdown/EntityLinkerExtension.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/JoinRpg.Markdown/HtmlSanitizers.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ private static HtmlSanitizer InitHtml5Sanitizer()
4949
_ = sanitizer.Tag("pre");
5050
_ = sanitizer.Tag("code");
5151
_ = sanitizer.Tag("table");
52+
_ = sanitizer.Tag("thead");
53+
_ = sanitizer.Tag("tbody");
5254
_ = sanitizer.Tag("tr");
5355
_ = sanitizer.Tag("td");
5456
_ = sanitizer.Tag("th");

src/JoinRpg.Markdown/ILinkRenderer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
namespace JoinRpg.Markdown;
2+
using Markdig.Renderers;
23

34
/// <summary>
45
/// interfaces that allows consumers to plugin its renderers
@@ -13,5 +14,5 @@ public interface ILinkRenderer
1314
/// <summary>
1415
/// Function that do actual rendering
1516
/// </summary>
16-
string Render(string match, int index, string extra);
17+
void Render(HtmlRenderer renderer, string match, int index, string extra);
1718
}

src/JoinRpg.Markdown/LinkerRenderAdapter.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/JoinRpg.Markdown/MarkDownRendererFacade.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ private static MarkdownPipeline CreatePipeline()
1717
.UseSoftlineBreakAsHardlineBreak()
1818
.UseMediaLinks()
1919
.UseAutoLinks()
20+
.UsePipeTables()
2021
.UseEntityLinker(["персонаж", "контакты", "группа", "список", "сеткаролей", "экспериментальнаятаблица"])
2122
.Build();
2223
}

src/JoinRpg.Markdown/MarkdownEntityLinkerExtensions.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using Markdig;
2+
using Markdig.Renderers;
3+
using Markdig.Renderers.Html;
24

35
namespace JoinRpg.Markdown;
46

@@ -9,4 +11,18 @@ public static MarkdownPipelineBuilder UseEntityLinker(this MarkdownPipelineBuild
911
pipeline.Extensions.AddIfNotAlready(new EntityLinkerExtension(prefixes));
1012
return pipeline;
1113
}
14+
15+
internal class EntityLinkerExtension(string[] prefixes) : IMarkdownExtension
16+
{
17+
private readonly string[] prefixes = prefixes;
18+
19+
public void Setup(MarkdownPipelineBuilder pipeline) => pipeline.InlineParsers.AddIfNotAlready(new LinkerParser(prefixes));
20+
21+
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) => renderer.ObjectRenderers.AddIfNotAlready(new LinkerRenderAdapter());
22+
23+
internal class LinkerRenderAdapter : HtmlObjectRenderer<EntityLinkInline>
24+
{
25+
protected override void Write(HtmlRenderer renderer, EntityLinkInline obj) => obj.Renderer.Render(renderer, obj.Match, obj.Index, obj.Extra);
26+
}
27+
}
1228
}

src/JoinRpg.Portal/Controllers/PlotController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using JoinRpg.Services.Interfaces;
1313
using JoinRpg.Services.Interfaces.Projects;
1414
using JoinRpg.Web.Helpers;
15+
using JoinRpg.Web.Models.Helpers;
1516
using JoinRpg.Web.Models.Plot;
1617
using JoinRpg.Web.Plots;
1718
using JoinRpg.WebComponents.ElementMoving;
@@ -330,7 +331,7 @@ public async Task<ActionResult> ShowElementVersion(int projectId, int plotFolder
330331
var projectInfo = await projectMetadataRepository.GetProjectMetadata(new(projectId));
331332
return View(new PlotElementListItemViewModel(folder.Elements.Single(e => e.PlotElementId == plotElementId),
332333
CurrentUserId,
333-
projectInfo, itemIdsToParticipateInSort: null, currentVersion: version, printMode: printMode));
334+
itemIdsToParticipateInSort: null, renderer: new JoinrpgMarkdownLinkRenderer(folder.Project, projectInfo), currentVersion: version, printMode: printMode));
334335
}
335336

336337
[HttpPost(), MasterAuthorize(Permission.CanManagePlots)]

src/JoinRpg.WebPortal.Models.Test/ContactsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using JoinRpg.DataModel;
2-
using JoinRpg.Web.Helpers;
2+
using JoinRpg.Web.Models.Helpers;
33

44
namespace JoinRpg.WebPortal.Models.Test;
55
public class ContactsTests

0 commit comments

Comments
 (0)