Very basic nav and composition listings.

This commit is contained in:
JesseBrault0709 2024-05-31 17:00:59 +02:00
parent 5fe7fc923e
commit 4d5b84bdbe
10 changed files with 95 additions and 2 deletions

View File

@ -0,0 +1,14 @@
package com.jessebrault.site
import com.jessebrault.site.composition.Composition
import groowt.view.component.web.BaseWebViewComponent
class CompositionListing extends BaseWebViewComponent {
final Composition composition
CompositionListing(Composition composition) {
this.composition = composition
}
}

View File

@ -0,0 +1,30 @@
package com.jessebrault.site
import com.jessebrault.ssg.di.Global
import com.jessebrault.ssg.di.InjectPages
import com.jessebrault.ssg.page.Page
import groowt.view.component.web.BaseWebViewComponent
import jakarta.inject.Inject
import jakarta.inject.Named
class Header extends BaseWebViewComponent {
final String siteName
final String siteTagLine
final List<Page> menuItems
@Inject
Header(
@Named('siteName') String siteName,
@Global('siteTagLine') String siteTagLine,
@Global('menuItems') List<String> menuItems,
@InjectPages('/*') Set<Page> allPages
) {
this.siteName = siteName
this.siteTagLine = siteTagLine
this.menuItems = menuItems.collect { menuItem ->
allPages.find { it.name == menuItem }
}
}
}

View File

@ -0,0 +1,4 @@
---
package com.jessebrault.site
---
<p>$composition.title</p>

View File

@ -0,0 +1,9 @@
<header>
<h1>$siteName</h1>
<h2>$siteTagLine</h2>
<nav>
<ul>
<Each items={menuItems} transform={<li><a href={it.path}>$it.name</a></li>} />
</ul>
</nav>
</header>

View File

@ -4,6 +4,7 @@ package com.jessebrault.site
<html lang="en">
<Head title={title} />
<body>
<Header />
<% bodyChildren -> pageChildren.each { bodyChildren << it } %>
</body>
</html>

View File

@ -1,7 +1,10 @@
package com.jessebrault.site
import com.jessebrault.site.composition.Composition
import com.jessebrault.site.util.TitleMaker
import com.jessebrault.ssg.di.InjectTexts
import com.jessebrault.ssg.page.PageSpec
import com.jessebrault.ssg.text.Text
import com.jessebrault.ssg.view.WvcPageView
import jakarta.inject.Inject
@ -9,10 +12,14 @@ import jakarta.inject.Inject
class CompositionsPage extends WvcPageView {
private final TitleMaker titleMaker
final Set<Composition> compositions
@Inject
CompositionsPage(TitleMaker titleMaker) {
CompositionsPage(TitleMaker titleMaker, @InjectTexts('/compositions/*.md') Set<Text> compositions) {
this.titleMaker = titleMaker
this.compositions = compositions.collect {
new Composition(it, it.frontMatter.title)
}
}
String getTitle() {

View File

@ -2,5 +2,8 @@
package com.jessebrault.site
---
<StandardPage title={title}>
<h1>Compositions</h1>
<article>
<h1>Compositions</h1>
<Each items={compositions} transform={<CompositionListing (it) />} />
</article>
</StandardPage>

View File

@ -0,0 +1,16 @@
package com.jessebrault.site.composition
import com.jessebrault.ssg.text.Text
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.ToString
import groovy.transform.TupleConstructor
@TupleConstructor(defaults = false)
@NullCheck(includeGenerated = true)
@EqualsAndHashCode
@ToString
class Composition {
final Text text
final String title
}

View File

@ -10,6 +10,11 @@ BuildScriptBase base
build {
siteName 'Jesse R. Brault'
baseUrl 'https://jessebrault.com'
basePackage 'com.jessebrault.site'
globals {
siteTagLine = 'Conductor and Composer'
menuItems = ['Biography', 'Compositions']
}
objectFactoryBuilder.configure {
configureRegistry {
bind(TitleMaker, toSelf())

View File

@ -0,0 +1,4 @@
---
title: Spirit Travels
---
Information about _Spirit Travels_.