From 0bcbc66118f2c309d6ef3d0cd99f010a19266e37 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Sun, 2 Jun 2024 13:42:22 +0200 Subject: [PATCH] Basic composition page working. --- .../composition/CompositionListing.groovy | 1 - .../site/composition/CompositionPage.groovy | 21 ++++++++ .../composition/CompositionPageFactory.groovy | 42 ++++++++++++++++ .../composition/CompositionPageType.groovy | 48 +++++++++++++++++++ .../composition/CompositionPageTemplate.wvc | 10 ++++ .../site/composition/Composition.groovy | 1 + .../composition/CompositionContainer.groovy | 1 + texts/compositions/SpiritTravels.md | 1 + 8 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 pages/groovy/com/jessebrault/site/composition/CompositionPage.groovy create mode 100644 pages/groovy/com/jessebrault/site/composition/CompositionPageFactory.groovy create mode 100644 pages/groovy/com/jessebrault/site/composition/CompositionPageType.groovy create mode 100644 pages/resources/com/jessebrault/site/composition/CompositionPageTemplate.wvc diff --git a/components/groovy/com/jessebrault/site/composition/CompositionListing.groovy b/components/groovy/com/jessebrault/site/composition/CompositionListing.groovy index 1062236..f7ddbeb 100644 --- a/components/groovy/com/jessebrault/site/composition/CompositionListing.groovy +++ b/components/groovy/com/jessebrault/site/composition/CompositionListing.groovy @@ -1,6 +1,5 @@ package com.jessebrault.site.composition - import groowt.view.component.web.BaseWebViewComponent import java.time.format.DateTimeFormatter diff --git a/pages/groovy/com/jessebrault/site/composition/CompositionPage.groovy b/pages/groovy/com/jessebrault/site/composition/CompositionPage.groovy new file mode 100644 index 0000000..8d2d8b7 --- /dev/null +++ b/pages/groovy/com/jessebrault/site/composition/CompositionPage.groovy @@ -0,0 +1,21 @@ +package com.jessebrault.site.composition + +import com.jessebrault.site.util.TitleMaker +import com.jessebrault.ssg.view.WvcPageView +import jakarta.inject.Inject + +class CompositionPage extends WvcPageView { + + Composition composition + private final TitleMaker titleMaker + + @Inject + CompositionPage(TitleMaker titleMaker) { + this.titleMaker = titleMaker + } + + String getTitle() { + this.titleMaker.makeTitle(pageTitle) + } + +} diff --git a/pages/groovy/com/jessebrault/site/composition/CompositionPageFactory.groovy b/pages/groovy/com/jessebrault/site/composition/CompositionPageFactory.groovy new file mode 100644 index 0000000..d7a937a --- /dev/null +++ b/pages/groovy/com/jessebrault/site/composition/CompositionPageFactory.groovy @@ -0,0 +1,42 @@ +package com.jessebrault.site.composition + +import com.jessebrault.site.CompositionsPage +import com.jessebrault.ssg.page.Page +import com.jessebrault.ssg.page.PageFactory +import com.jessebrault.ssg.view.WvcCompiler +import groowt.util.di.RegistryObjectFactory +import jakarta.inject.Inject + +class CompositionPageFactory implements PageFactory { + + private final RegistryObjectFactory objectFactory + private final CompositionContainer compositions + private final WvcCompiler wvcCompiler + + @Inject + CompositionPageFactory( + RegistryObjectFactory objectFactory, + CompositionContainer compositions, + WvcCompiler wvcCompiler + ) { + this.objectFactory = objectFactory + this.compositions = compositions + this.wvcCompiler = wvcCompiler + } + + @Override + Collection create() { + this.compositions.all.collect { composition -> + new CompositionPageType( + name: composition.title, + path: "/compositions/$composition.slug", + fileExtension: '.html', + viewType: CompositionPage, + objectFactory: objectFactory, + wvcCompiler: wvcCompiler, + composition: composition + ) + } + } + +} diff --git a/pages/groovy/com/jessebrault/site/composition/CompositionPageType.groovy b/pages/groovy/com/jessebrault/site/composition/CompositionPageType.groovy new file mode 100644 index 0000000..cb403d8 --- /dev/null +++ b/pages/groovy/com/jessebrault/site/composition/CompositionPageType.groovy @@ -0,0 +1,48 @@ +package com.jessebrault.site.composition + +import com.jessebrault.ssg.page.DefaultWvcPage +import com.jessebrault.ssg.util.Diagnostic +import com.jessebrault.ssg.view.PageView +import groowt.util.fp.either.Either + +class CompositionPageType extends DefaultWvcPage { + + final Composition composition + + CompositionPageType(Map args) { + super(args) + composition = args.composition + } + + @Override + Either createView() { + def result = super.createView() + if (result.isRight()) { + def compositionPage = result.getRight() as CompositionPage + compositionPage.composition = this.composition + } + return result + } + + @Override + int hashCode() { + 31 * super.hashCode() + composition.hashCode() + } + + @Override + boolean equals(Object obj) { + if (!super.equals(obj)) { + return false + } else if (obj instanceof CompositionPageType) { + return composition == obj.composition + } else { + return false + } + } + + @Override + String toString() { + "CompositionPageType($composition)" + } + +} diff --git a/pages/resources/com/jessebrault/site/composition/CompositionPageTemplate.wvc b/pages/resources/com/jessebrault/site/composition/CompositionPageTemplate.wvc new file mode 100644 index 0000000..52d47f0 --- /dev/null +++ b/pages/resources/com/jessebrault/site/composition/CompositionPageTemplate.wvc @@ -0,0 +1,10 @@ +--- +package com.jessebrault.site.composition + +import com.jessebrault.site.StandardPage +--- + +
+

$composition.title

+
+
diff --git a/src/main/groovy/com/jessebrault/site/composition/Composition.groovy b/src/main/groovy/com/jessebrault/site/composition/Composition.groovy index bb00c40..ba62813 100644 --- a/src/main/groovy/com/jessebrault/site/composition/Composition.groovy +++ b/src/main/groovy/com/jessebrault/site/composition/Composition.groovy @@ -12,6 +12,7 @@ import java.time.LocalDate class Composition { Text text String title + String slug @Nullable String subTitle @Nullable String version String instrumentation diff --git a/src/main/groovy/com/jessebrault/site/composition/CompositionContainer.groovy b/src/main/groovy/com/jessebrault/site/composition/CompositionContainer.groovy index 45f3eba..703ecba 100644 --- a/src/main/groovy/com/jessebrault/site/composition/CompositionContainer.groovy +++ b/src/main/groovy/com/jessebrault/site/composition/CompositionContainer.groovy @@ -16,6 +16,7 @@ class CompositionContainer { new Composition( text: text, title: text.frontMatter.title, + slug: text.frontMatter.slug, subTitle: text.frontMatter.subTitle, version: text.frontMatter.version, instrumentation: text.frontMatter.instrumentation, diff --git a/texts/compositions/SpiritTravels.md b/texts/compositions/SpiritTravels.md index d8bfbf4..cb376e5 100644 --- a/texts/compositions/SpiritTravels.md +++ b/texts/compositions/SpiritTravels.md @@ -1,5 +1,6 @@ --- title: Spirit Travels +slug: spirit-travels version: Chamber orchestra version instrumentation: For fl, ob, cl, hn, 2 perc, pno, and strings 2.2.2.2.1. shortInfo: In memoriam Jane H. Kim.