Skip to content

Commit ae4dda2

Browse files
committed
Move SSR related code to ssr module
1 parent f9ec412 commit ae4dda2

16 files changed

+227
-213
lines changed

build.mill

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@ object core extends ScalaModule {
9595
ivy"org.commonmark:commonmark-ext-task-list-items:0.24.0",
9696
ivy"com.hubspot.jinjava:jinjava:2.8.0",
9797
ivy"org.virtuslab::scala-yaml:0.3.0",
98-
ivy"org.seleniumhq.selenium:selenium-chrome-driver:4.33.0",
99-
ivy"org.seleniumhq.selenium:selenium-support:4.33.0",
10098
ivy"org.jsoup:jsoup:1.21.1",
10199
ivy"org.slf4j:slf4j-jdk14:2.0.17"
102100
)
@@ -105,6 +103,7 @@ object core extends ScalaModule {
105103
}*/
106104
}
107105

106+
// TODO undertow is enough?
108107
object swebserver extends ScalaModule {
109108
def scalaVersion = "3.7.0"
110109
def ivyDeps = Agg(
@@ -122,7 +121,10 @@ object ssr extends ScalaModule {
122121
def ivyDeps = Agg(
123122
ivy"ba.sake::sharaf-undertow:0.13.0",
124123
// https://github.com/wildfly/wildfly-common/issues/74
125-
ivy"org.wildfly.common:wildfly-common:1.7.0.Final"
124+
ivy"org.wildfly.common:wildfly-common:1.7.0.Final",
125+
ivy"org.seleniumhq.selenium:selenium-chrome-driver:4.33.0",
126+
ivy"org.seleniumhq.selenium:selenium-support:4.33.0",
127+
ivy"org.slf4j:slf4j-api:2.0.17"
126128
)
127129
}
128130

cli/src/ba/sake/flatmark/cli/FlatmarkCli.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import io.undertow.Undertow
55
import io.undertow.server.handlers.resource.{PathResourceManager, ResourceHandler}
66
import io.undertow.Handlers
77
import ba.sake.flatmark.FlatmarkGenerator
8-
import ba.sake.flatmark.selenium.WebDriverHolder
8+
import ba.sake.flatmark.ssr.WebDriverHolder
99
import ba.sake.sharaf.*
1010
import ba.sake.sharaf.undertow.*
1111
import ba.sake.sharaf.utils.NetworkUtils
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package ba.sake.flatmark
2+
3+
import ba.sake.flatmark.ssr.FlatmarkSsr
4+
5+
class CachingFlatmarkSsr(
6+
flatmarkSsr: FlatmarkSsr,
7+
fileCache: FileCache
8+
) {
9+
10+
def highlight(codeStr: String, codeLang: Option[String] = None): String =
11+
fileCache.cached("highlightjs", codeStr, codeLang.getOrElse("plaintext")) {
12+
flatmarkSsr.highlight(codeStr, codeLang)
13+
}
14+
15+
def renderMath(mathStr: String): String =
16+
fileCache.cached("katex", mathStr) {
17+
flatmarkSsr.renderMath(mathStr)
18+
}
19+
20+
def renderGraphviz(dotStr: String, engine: String = "dot"): String =
21+
fileCache.cached("graphviz", dotStr, engine) {
22+
flatmarkSsr.renderGraphviz(dotStr, engine)
23+
}
24+
25+
def renderMermaid(source: String): String =
26+
fileCache.cached("mermaid", source) {
27+
flatmarkSsr.renderMermaid(source)
28+
}
29+
}

core/src/ba/sake/flatmark/FlatmarkGenerator.scala

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,9 @@ import scala.util.control.NonFatal
77
import org.jsoup.Jsoup
88
import org.slf4j.LoggerFactory
99
import org.virtuslab.yaml.*
10-
import ba.sake.flatmark.selenium.WebDriverHolder
10+
import ba.sake.flatmark.ssr.WebDriverHolder
11+
import ba.sake.flatmark.ssr.FlatmarkSsr
1112
import ba.sake.flatmark.markdown.FlatmarkMarkdownRenderer
12-
import ba.sake.flatmark.codehighlight.FlatmarkCodeHighlighter
13-
import ba.sake.flatmark.diagrams.FlatmarkGraphvizRenderer
14-
import ba.sake.flatmark.diagrams.FlatmarkMermaidRenderer
15-
import ba.sake.flatmark.math.FlatmarkMathRenderer
1613
import ba.sake.flatmark.search.SearchEntry
1714
import ba.sake.flatmark.templates.FlatmarkTemplateHandler
1815
import ba.sake.tupson.{JsonRW, toJson}
@@ -102,11 +99,8 @@ class FlatmarkGenerator(ssrServerUrl: String, webDriverHolder: WebDriverHolder,
10299
ThemeResolver.resolve(siteConfig.theme.source, localThemesFolder, themesCacheFolder, updateTheme)
103100
)
104101
val fileCache = FileCache(cacheFolder, useCache)
105-
val codeHighlighter = FlatmarkCodeHighlighter(ssrServerUrl, webDriverHolder, fileCache)
106-
val graphvizRenderer = FlatmarkGraphvizRenderer(ssrServerUrl, webDriverHolder, fileCache)
107-
val mermaidRenderer = FlatmarkMermaidRenderer(ssrServerUrl, webDriverHolder, fileCache)
108-
val mathRenderer = FlatmarkMathRenderer(ssrServerUrl, webDriverHolder, fileCache)
109-
val markdownRenderer = FlatmarkMarkdownRenderer(codeHighlighter, graphvizRenderer, mermaidRenderer, mathRenderer)
102+
val cachingSsr = CachingFlatmarkSsr(FlatmarkSsr(ssrServerUrl, webDriverHolder), fileCache)
103+
val markdownRenderer = FlatmarkMarkdownRenderer(cachingSsr)
110104
val customClassloader = new java.net.URLClassLoader(
111105
(Array(siteRootFolder / "_i18n") ++ themeFolder.map(_ / "_i18n").toArray).map(_.toIO.toURI.toURL),
112106
Thread.currentThread.getContextClassLoader

core/src/ba/sake/flatmark/codehighlight/FlatmarkCodeHighlighter.scala

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

core/src/ba/sake/flatmark/diagrams/FlatmarkGraphvizRenderer.scala

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

core/src/ba/sake/flatmark/diagrams/FlatmarkMermaidRenderer.scala

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package ba.sake.flatmark.markdown
22

33
import java.util as ju
4-
import ba.sake.flatmark.codehighlight.FlatmarkCodeHighlighter
5-
import ba.sake.flatmark.diagrams.FlatmarkGraphvizRenderer
6-
import ba.sake.flatmark.diagrams.FlatmarkMermaidRenderer
7-
import ba.sake.flatmark.math.FlatmarkMathRenderer
84
import org.commonmark.ext.autolink.AutolinkExtension
95
import org.commonmark.ext.footnotes.FootnotesExtension
106
import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension
@@ -18,13 +14,9 @@ import org.commonmark.parser.Parser
1814
import org.commonmark.renderer.NodeRenderer
1915
import org.commonmark.renderer.html.HtmlRenderer.HtmlRendererExtension
2016
import org.commonmark.renderer.html.{HtmlNodeRendererContext, HtmlNodeRendererFactory, HtmlRenderer}
17+
import ba.sake.flatmark.CachingFlatmarkSsr
2118

22-
class FlatmarkMarkdownRenderer(
23-
codeHighlighter: FlatmarkCodeHighlighter,
24-
graphvizRenderer: FlatmarkGraphvizRenderer,
25-
mermaidRenderer: FlatmarkMermaidRenderer,
26-
mathRenderer: FlatmarkMathRenderer
27-
) {
19+
class FlatmarkMarkdownRenderer(ssr: CachingFlatmarkSsr) {
2820

2921
private val extensions = ju.Arrays.asList(
3022
TablesExtension.create(),
@@ -35,8 +27,8 @@ class FlatmarkMarkdownRenderer(
3527
InsExtension.create(),
3628
ImageAttributesExtension.create(),
3729
TaskListItemsExtension.create(),
38-
FlatmarkStaticCodeRendererExtension(codeHighlighter, graphvizRenderer, mermaidRenderer, mathRenderer),
39-
InlineMathExtension.create(mathRenderer)
30+
FlatmarkStaticCodeRendererExtension(ssr),
31+
InlineMathExtension.create(ssr)
4032
)
4133
private val parser = Parser.builder.extensions(extensions).build
4234
private val renderer = HtmlRenderer.builder.extensions(extensions).build
@@ -46,28 +38,17 @@ class FlatmarkMarkdownRenderer(
4638
renderer.render(document)
4739
}
4840

49-
class FlatmarkStaticCodeRendererExtension(
50-
codeHighlighter: FlatmarkCodeHighlighter,
51-
graphvizRenderer: FlatmarkGraphvizRenderer,
52-
mermaidRenderer: FlatmarkMermaidRenderer,
53-
mathRenderer: FlatmarkMathRenderer
54-
) extends HtmlRendererExtension {
41+
class FlatmarkStaticCodeRendererExtension(ssr: CachingFlatmarkSsr) extends HtmlRendererExtension {
5542

5643
override def extend(htmlRendererBuilder: HtmlRenderer.Builder): Unit =
5744
htmlRendererBuilder.nodeRendererFactory(new HtmlNodeRendererFactory() {
5845
def create(context: HtmlNodeRendererContext) =
59-
new FlatmarkStaticCodeNodeRenderer(context, codeHighlighter, graphvizRenderer, mermaidRenderer, mathRenderer)
46+
new FlatmarkStaticCodeNodeRenderer(context, ssr)
6047
})
6148

6249
}
6350

64-
class FlatmarkStaticCodeNodeRenderer(
65-
context: HtmlNodeRendererContext,
66-
codeHighlighter: FlatmarkCodeHighlighter,
67-
graphvizRenderer: FlatmarkGraphvizRenderer,
68-
mermaidRenderer: FlatmarkMermaidRenderer,
69-
mathRenderer: FlatmarkMathRenderer
70-
) extends NodeRenderer {
51+
class FlatmarkStaticCodeNodeRenderer(context: HtmlNodeRendererContext, ssr: CachingFlatmarkSsr) extends NodeRenderer {
7152

7253
override def getNodeTypes: ju.Set[Class[? <: Node]] = ju.Set.of(classOf[FencedCodeBlock])
7354

@@ -77,10 +58,10 @@ class FlatmarkStaticCodeNodeRenderer(
7758
val codeBlockLiteral = codeBlock.getLiteral
7859
val codeLang = codeBlock.getInfo
7960
val res =
80-
if codeLang == "math" then mathRenderer.render(codeBlockLiteral)
81-
else if codeLang == "diagram:graphviz" then graphvizRenderer.render(codeBlockLiteral)
82-
else if codeLang == "diagram:mermaid" then mermaidRenderer.render(codeBlockLiteral)
83-
else codeHighlighter.highlight(codeBlockLiteral, Some(codeLang))
61+
if codeLang == "math" then ssr.renderMath(codeBlockLiteral)
62+
else if codeLang == "diagram:graphviz" then ssr.renderGraphviz(codeBlockLiteral)
63+
else if codeLang == "diagram:mermaid" then ssr.renderMermaid(codeBlockLiteral)
64+
else ssr.highlight(codeBlockLiteral, Some(codeLang))
8465
html.raw(res)
8566
}
8667
}

core/src/ba/sake/flatmark/markdown/inlineMath.scala

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package ba.sake.flatmark.markdown
22

3-
import ba.sake.flatmark.math.FlatmarkMathRenderer
4-
3+
import java.util
54
import scala.jdk.CollectionConverters.*
65
import org.commonmark.node.{CustomNode, Delimited}
76
import org.commonmark.ext.ins.Ins
@@ -19,19 +18,21 @@ import org.commonmark.renderer.text.TextContentRenderer
1918
import org.commonmark.node.Node
2019
import org.commonmark.renderer.html.HtmlNodeRendererContext
2120
import org.commonmark.renderer.html.HtmlWriter
21+
import ba.sake.flatmark.CachingFlatmarkSsr
2222

23-
import java.util
2423

2524
object InlineMathExtension {
26-
def create(mathRenderer: FlatmarkMathRenderer): InlineMathExtension = new InlineMathExtension(mathRenderer)
25+
def create(ssr: CachingFlatmarkSsr): InlineMathExtension =
26+
new InlineMathExtension(ssr)
2727
}
2828

29-
class InlineMathExtension(mathRenderer: FlatmarkMathRenderer) extends Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
29+
class InlineMathExtension(ssr: CachingFlatmarkSsr) extends Parser.ParserExtension, HtmlRenderer.HtmlRendererExtension {
3030
override def extend(parserBuilder: Parser.Builder): Unit =
3131
parserBuilder.customDelimiterProcessor(new InlineMathDelimiterProcessor())
3232

3333
override def extend(rendererBuilder: HtmlRenderer.Builder): Unit =
34-
rendererBuilder.nodeRendererFactory((context: HtmlNodeRendererContext) => new InlineMathHtmlNodeRenderer(context, mathRenderer))
34+
rendererBuilder.nodeRendererFactory((context: HtmlNodeRendererContext) =>
35+
new InlineMathHtmlNodeRenderer(context, ssr))
3536
}
3637

3738
class InlineMathNode extends CustomNode with Delimited {
@@ -68,14 +69,14 @@ class InlineMathDelimiterProcessor extends DelimiterProcessor {
6869
}
6970

7071

71-
class InlineMathHtmlNodeRenderer(context: HtmlNodeRendererContext, mathRenderer: FlatmarkMathRenderer) extends NodeRenderer {
72+
class InlineMathHtmlNodeRenderer(context: HtmlNodeRendererContext, ssr: CachingFlatmarkSsr) extends NodeRenderer {
7273
private val html = context.getWriter
7374

7475
override def getNodeTypes: util.Set[Class[? <: Node]] = util.Set.of(classOf[InlineMathNode])
7576

7677
override def render(node: Node): Unit = {
7778
val literalText = getLiteralText(node)
78-
val ssrRendered = mathRenderer.render(literalText)
79+
val ssrRendered = ssr.renderMath(literalText)
7980
html.raw(ssrRendered)
8081
}
8182

core/src/ba/sake/flatmark/math/FlatmarkMathRenderer.scala

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

0 commit comments

Comments
 (0)