Very basic nav and composition listings.
This commit is contained in:
parent
5fe7fc923e
commit
4d5b84bdbe
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
components/groovy/com/jessebrault/site/Header.groovy
Normal file
30
components/groovy/com/jessebrault/site/Header.groovy
Normal 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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
package com.jessebrault.site
|
||||||
|
---
|
||||||
|
<p>$composition.title</p>
|
@ -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>
|
@ -4,6 +4,7 @@ package com.jessebrault.site
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<Head title={title} />
|
<Head title={title} />
|
||||||
<body>
|
<body>
|
||||||
|
<Header />
|
||||||
<% bodyChildren -> pageChildren.each { bodyChildren << it } %>
|
<% bodyChildren -> pageChildren.each { bodyChildren << it } %>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
package com.jessebrault.site
|
package com.jessebrault.site
|
||||||
|
|
||||||
|
import com.jessebrault.site.composition.Composition
|
||||||
import com.jessebrault.site.util.TitleMaker
|
import com.jessebrault.site.util.TitleMaker
|
||||||
|
import com.jessebrault.ssg.di.InjectTexts
|
||||||
import com.jessebrault.ssg.page.PageSpec
|
import com.jessebrault.ssg.page.PageSpec
|
||||||
|
import com.jessebrault.ssg.text.Text
|
||||||
import com.jessebrault.ssg.view.WvcPageView
|
import com.jessebrault.ssg.view.WvcPageView
|
||||||
import jakarta.inject.Inject
|
import jakarta.inject.Inject
|
||||||
|
|
||||||
@ -9,10 +12,14 @@ import jakarta.inject.Inject
|
|||||||
class CompositionsPage extends WvcPageView {
|
class CompositionsPage extends WvcPageView {
|
||||||
|
|
||||||
private final TitleMaker titleMaker
|
private final TitleMaker titleMaker
|
||||||
|
final Set<Composition> compositions
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CompositionsPage(TitleMaker titleMaker) {
|
CompositionsPage(TitleMaker titleMaker, @InjectTexts('/compositions/*.md') Set<Text> compositions) {
|
||||||
this.titleMaker = titleMaker
|
this.titleMaker = titleMaker
|
||||||
|
this.compositions = compositions.collect {
|
||||||
|
new Composition(it, it.frontMatter.title)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String getTitle() {
|
String getTitle() {
|
||||||
|
@ -2,5 +2,8 @@
|
|||||||
package com.jessebrault.site
|
package com.jessebrault.site
|
||||||
---
|
---
|
||||||
<StandardPage title={title}>
|
<StandardPage title={title}>
|
||||||
|
<article>
|
||||||
<h1>Compositions</h1>
|
<h1>Compositions</h1>
|
||||||
|
<Each items={compositions} transform={<CompositionListing (it) />} />
|
||||||
|
</article>
|
||||||
</StandardPage>
|
</StandardPage>
|
||||||
|
@ -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
|
||||||
|
}
|
@ -10,6 +10,11 @@ BuildScriptBase base
|
|||||||
build {
|
build {
|
||||||
siteName 'Jesse R. Brault'
|
siteName 'Jesse R. Brault'
|
||||||
baseUrl 'https://jessebrault.com'
|
baseUrl 'https://jessebrault.com'
|
||||||
|
basePackage 'com.jessebrault.site'
|
||||||
|
globals {
|
||||||
|
siteTagLine = 'Conductor and Composer'
|
||||||
|
menuItems = ['Biography', 'Compositions']
|
||||||
|
}
|
||||||
objectFactoryBuilder.configure {
|
objectFactoryBuilder.configure {
|
||||||
configureRegistry {
|
configureRegistry {
|
||||||
bind(TitleMaker, toSelf())
|
bind(TitleMaker, toSelf())
|
||||||
|
4
texts/compositions/SpiritTravels.md
Normal file
4
texts/compositions/SpiritTravels.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: Spirit Travels
|
||||||
|
---
|
||||||
|
Information about _Spirit Travels_.
|
Loading…
Reference in New Issue
Block a user