Composition page structure.
This commit is contained in:
parent
a14c241dcf
commit
57176a3aee
@ -2,18 +2,27 @@ package com.jessebrault.site.composition
|
|||||||
|
|
||||||
import com.jessebrault.site.util.TitleMaker
|
import com.jessebrault.site.util.TitleMaker
|
||||||
import com.jessebrault.ssg.view.WvcPageView
|
import com.jessebrault.ssg.view.WvcPageView
|
||||||
|
import groovy.transform.Canonical
|
||||||
import jakarta.inject.Inject
|
import jakarta.inject.Inject
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
|
|
||||||
class CompositionPage extends WvcPageView {
|
class CompositionPage extends WvcPageView {
|
||||||
|
|
||||||
|
@Canonical
|
||||||
|
static class AlternateVersion {
|
||||||
|
final String versionName
|
||||||
|
final String path
|
||||||
|
}
|
||||||
|
|
||||||
Composition composition
|
Composition composition
|
||||||
private final TitleMaker titleMaker
|
private final TitleMaker titleMaker
|
||||||
|
private final CompositionContainer compositionContainer
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CompositionPage(TitleMaker titleMaker) {
|
CompositionPage(TitleMaker titleMaker, CompositionContainer compositionContainer) {
|
||||||
this.titleMaker = titleMaker
|
this.titleMaker = titleMaker
|
||||||
|
this.compositionContainer = compositionContainer
|
||||||
}
|
}
|
||||||
|
|
||||||
String getTitle() {
|
String getTitle() {
|
||||||
@ -24,4 +33,10 @@ class CompositionPage extends WvcPageView {
|
|||||||
composition.date.format(DateTimeFormatter.ofPattern('yyyy'))
|
composition.date.format(DateTimeFormatter.ofPattern('yyyy'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<AlternateVersion> getAlternateVersions() {
|
||||||
|
compositionContainer.getAlternateVersions(composition).collect {
|
||||||
|
new AlternateVersion(it.version, "/compositions/${it.slug}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,13 @@ import com.jessebrault.site.StandardPage
|
|||||||
<WhenNotNull item={composition.version} render={<p class="version">$it</p>} />
|
<WhenNotNull item={composition.version} render={<p class="version">$it</p>} />
|
||||||
<p class="year">$compositionYear</p>
|
<p class="year">$compositionYear</p>
|
||||||
<p class="instrumentation">$composition.instrumentation</p>
|
<p class="instrumentation">$composition.instrumentation</p>
|
||||||
|
<WhenNotEmpty items={alternateVersions}>
|
||||||
|
<p>Alternate versions:
|
||||||
|
<ul>
|
||||||
|
<Each items={alternateVersions} transform={<li><a href={it.path}>${it.versionName}</a></li>} />
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
</WhenNotEmpty>
|
||||||
</section>
|
</section>
|
||||||
<section class="composition-text">
|
<section class="composition-text">
|
||||||
${composition.text.render()}
|
${composition.text.render()}
|
||||||
|
@ -35,4 +35,8 @@ class CompositionContainer {
|
|||||||
this.compositions.findAll { it.categories.contains(category) }
|
this.compositions.findAll { it.categories.contains(category) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<Composition> getAlternateVersions(Composition composition) {
|
||||||
|
this.compositions.findAll { it.title == composition.title && it.version != composition.version }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user