Components and di properly working.

This commit is contained in:
JesseBrault0709 2024-05-30 11:51:08 +02:00
parent 95caca0f0c
commit 5fe7fc923e
12 changed files with 93 additions and 26 deletions

View File

@ -12,7 +12,5 @@ repositories {
dependencies { dependencies {
implementation 'org.apache.groovy:groovy:4.0.21' implementation 'org.apache.groovy:groovy:4.0.21'
ssgImplementation sourceSets.main.runtimeClasspath // TODO: put this in plugin
pagesImplementation sourceSets.main.runtimeClasspath
} }

View File

@ -0,0 +1,13 @@
package com.jessebrault.site
import groowt.view.component.web.BaseWebViewComponent
class Head extends BaseWebViewComponent {
final String title
Head(Map attr) {
title = attr.title
}
}

View File

@ -0,0 +1,17 @@
package com.jessebrault.site
import groowt.view.component.web.BaseWebViewComponent
class StandardPage extends BaseWebViewComponent {
final String title
StandardPage(Map attr) {
this.title = attr.title
}
List getPageChildren() {
this.children
}
}

View File

@ -0,0 +1,7 @@
---
package com.jessebrault.site
---
<head>
<meta charset="UTF-8" />
<title>$title</title>
</head>

View File

@ -0,0 +1,9 @@
---
package com.jessebrault.site
---
<html lang="en">
<Head title={title} />
<body>
<% bodyChildren -> pageChildren.each { bodyChildren << it } %>
</body>
</html>

View File

@ -15,7 +15,6 @@ class BiographyPage extends WvcPageView {
@Inject @Inject
BiographyPage(TitleMaker titleMaker, @InjectText('/Biography.md') Text biography) { BiographyPage(TitleMaker titleMaker, @InjectText('/Biography.md') Text biography) {
super(BiographyPage.getResource('BiographyPage.wvc'))
this.titleMaker = titleMaker this.titleMaker = titleMaker
this.biography = biography this.biography = biography
} }
@ -24,7 +23,7 @@ class BiographyPage extends WvcPageView {
biography.render() biography.render()
} }
String renderTitle() { String getTitle() {
titleMaker.makeTitle(pageTitle) titleMaker.makeTitle(pageTitle)
} }

View File

@ -0,0 +1,22 @@
package com.jessebrault.site
import com.jessebrault.site.util.TitleMaker
import com.jessebrault.ssg.page.PageSpec
import com.jessebrault.ssg.view.WvcPageView
import jakarta.inject.Inject
@PageSpec(name = 'Compositions', path = '/compositions')
class CompositionsPage extends WvcPageView {
private final TitleMaker titleMaker
@Inject
CompositionsPage(TitleMaker titleMaker) {
this.titleMaker = titleMaker
}
String getTitle() {
titleMaker.makeTitle(pageTitle)
}
}

View File

@ -1,14 +0,0 @@
---
package com.jessebrault.site
---
<html lang="en">
<head>
<meta charset="UTF-8" />
<title><%= renderTitle() %></title>
</head>
<body>
<article>
<%= renderBiography() %>
</article>
</body>
</html>

View File

@ -0,0 +1,8 @@
---
package com.jessebrault.site
---
<StandardPage title={title}>
<article>
<%= renderBiography() %>
</article>
</StandardPage>

View File

@ -0,0 +1,6 @@
---
package com.jessebrault.site
---
<StandardPage title={title}>
<h1>Compositions</h1>
</StandardPage>

View File

@ -1,17 +1,19 @@
package com.jessebrault.site.util package com.jessebrault.site.util
import groowt.util.fp.provider.Provider import jakarta.inject.Inject
import jakarta.inject.Named
class TitleMaker { class TitleMaker {
private final Provider<String> siteTitleProvider private final String siteTitle
TitleMaker(Provider<String> siteTitleProvider) { @Inject
this.siteTitleProvider = siteTitleProvider TitleMaker(@Named('siteName') String siteTitle) {
this.siteTitle = siteTitle
} }
String makeTitle(String pageTitle) { String makeTitle(String pageTitle) {
this.siteTitleProvider.get() + " — " + pageTitle this.siteTitle + " — " + pageTitle
} }
} }

View File

@ -1,8 +1,8 @@
import com.jessebrault.site.util.TitleMaker
import com.jessebrault.ssg.buildscript.BuildScriptBase import com.jessebrault.ssg.buildscript.BuildScriptBase
import groovy.transform.BaseScript import groovy.transform.BaseScript
import com.jessebrault.site.util.TitleMaker
import static groowt.util.di.BindingUtil.toSingleton import static groowt.util.di.BindingUtil.toSelf
@BaseScript @BaseScript
BuildScriptBase base BuildScriptBase base
@ -12,7 +12,7 @@ build {
baseUrl 'https://jessebrault.com' baseUrl 'https://jessebrault.com'
objectFactoryBuilder.configure { objectFactoryBuilder.configure {
configureRegistry { configureRegistry {
bind(TitleMaker, toSingleton(new TitleMaker(siteName))) bind(TitleMaker, toSelf())
} }
} }
} }