From 0998d1a11dbd0e98724f19957a0fce1a6cfdb94e Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Tue, 28 May 2024 08:15:20 +0200 Subject: [PATCH] Biography page working with Text injection and rendering. --- .../ssg/buildscript/BuildScriptBase.groovy | 7 ++++--- .../BuildScriptToBuildSpecConverter.groovy | 7 ++++--- .../delegates/BuildDelegate.groovy | 20 +++++++++---------- .../jessebrault/ssg/text/MarkdownText.groovy | 2 ++ .../ssg/text/MarkdownTextConverter.groovy | 2 +- .../com/jessebrault/site/Biography.groovy | 7 ++++++- .../jessebrault/site/BiographyTemplate.wvc | 3 +++ test-ssg-project/texts/Biography.md | 3 +++ 8 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 test-ssg-project/texts/Biography.md diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy index cee4405..9cff114 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy @@ -44,9 +44,6 @@ abstract class BuildScriptBase extends Script { this.buildClosure = buildClosure } - /* --- internal --- */ - - @ApiStatus.Internal File getProjectRoot() { requireNonNull(this.projectRoot) } @@ -56,6 +53,10 @@ abstract class BuildScriptBase extends Script { this.projectRoot = requireNonNull(projectRoot) } + String getBuildName() { + return buildName + } + @ApiStatus.Internal void setBuildName(String buildName) { this.buildName = buildName diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptToBuildSpecConverter.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptToBuildSpecConverter.groovy index ef0b4b9..663d4b2 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptToBuildSpecConverter.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptToBuildSpecConverter.groovy @@ -5,6 +5,7 @@ import groovy.transform.NullCheck import groovy.transform.TupleConstructor import java.util.function.Function +import java.util.function.Supplier @NullCheck @TupleConstructor(includeFields = true) @@ -28,7 +29,7 @@ class BuildScriptToBuildSpecConverter { ) } - protected BuildSpec doConvert(String name, BuildScriptBase buildScript) { + protected BuildSpec doConvert(String buildScriptFqn, BuildScriptBase buildScript) { final Deque buildHierarchy = new LinkedList<>() buildHierarchy.push(buildScript) String extending = buildScript.extending @@ -38,14 +39,14 @@ class BuildScriptToBuildSpecConverter { extending = from.extending } - def delegate = this.buildDelegateFactory.apply(name) + def delegate = this.buildDelegateFactory.apply(buildScriptFqn) while (!buildHierarchy.isEmpty()) { def currentScript = buildHierarchy.pop() currentScript.buildClosure.delegate = delegate currentScript.buildClosure() } - this.getFromDelegate(name, delegate) + this.getFromDelegate(buildScriptFqn, delegate) } BuildSpec convert(String buildScriptFqn) { diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy index 08f256d..14fe883 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy @@ -18,17 +18,15 @@ import java.util.function.Supplier final class BuildDelegate { - static Supplier withDefaults(String buildName, File projectDir) { - return { - new BuildDelegate(projectDir).tap { - basePackages.convention = [] as Set - outputDir.convention = PathUtil.resolve(projectDir, Path.of('dist', buildName)) - globals.convention = [:] - models.convention = [] as Set - textsDirs.convention = [new File(projectDir, 'texts')] as Set - textConverters.convention = [new MarkdownTextConverter()] as Set - objectFactoryBuilder.convention = DefaultRegistryObjectFactory.Builder.withDefaults() - } + static BuildDelegate withDefaults(String buildName, File projectDir) { + new BuildDelegate(projectDir).tap { + basePackages.convention = [] as Set + outputDir.convention = PathUtil.resolve(projectDir, Path.of('dist', buildName.split(/\\./))) + globals.convention = [:] + models.convention = [] as Set + textsDirs.convention = [new File(projectDir, 'texts')] as Set + textConverters.convention = [new MarkdownTextConverter()] as Set + objectFactoryBuilder.convention = DefaultRegistryObjectFactory.Builder.withDefaults() } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownText.groovy b/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownText.groovy index c8e3ca5..93e7c4b 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownText.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownText.groovy @@ -90,6 +90,8 @@ class MarkdownText implements Text { } else { this.parsed = markdownParser.parse(body) } + } else { + this.parsed = markdownParser.parse(completeSourceText) } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextConverter.groovy b/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextConverter.groovy index 64c7344..8eccc60 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextConverter.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextConverter.groovy @@ -16,7 +16,7 @@ class MarkdownTextConverter implements TextConverter { Text convert(File textsDir, File textFile) { new MarkdownText( ExtensionUtil.stripExtension(textFile.name), - PathUtil.relative(textsDir, textFile).toString(), + '/' + PathUtil.relative(textsDir, textFile).toString(), textFile ) } diff --git a/test-ssg-project/pages/groovy/com/jessebrault/site/Biography.groovy b/test-ssg-project/pages/groovy/com/jessebrault/site/Biography.groovy index cd2630c..dc606d6 100644 --- a/test-ssg-project/pages/groovy/com/jessebrault/site/Biography.groovy +++ b/test-ssg-project/pages/groovy/com/jessebrault/site/Biography.groovy @@ -1,6 +1,8 @@ package com.jessebrault.site +import com.jessebrault.ssg.di.InjectText import com.jessebrault.ssg.page.PageSpec +import com.jessebrault.ssg.text.Text import com.jessebrault.ssg.view.WvcPageView import jakarta.inject.Inject @@ -9,9 +11,12 @@ class Biography extends WvcPageView { static final String greeting = 'Hello, World!' + final Text biographyText + @Inject - Biography() { + Biography(@InjectText('/Biography.md') Text biographyText) { super(Biography.getResource('BiographyTemplate.wvc')) + this.biographyText = biographyText } } diff --git a/test-ssg-project/pages/resources/com/jessebrault/site/BiographyTemplate.wvc b/test-ssg-project/pages/resources/com/jessebrault/site/BiographyTemplate.wvc index 8841dad..b904c90 100644 --- a/test-ssg-project/pages/resources/com/jessebrault/site/BiographyTemplate.wvc +++ b/test-ssg-project/pages/resources/com/jessebrault/site/BiographyTemplate.wvc @@ -9,5 +9,8 @@ package com.jessebrault.site

$pageTitle

$url

$greeting

+
+ <%= biographyText.render() %> +
diff --git a/test-ssg-project/texts/Biography.md b/test-ssg-project/texts/Biography.md new file mode 100644 index 0000000..966108c --- /dev/null +++ b/test-ssg-project/texts/Biography.md @@ -0,0 +1,3 @@ +# Biography + +Hello! My name is Jesse Brault.