FrontMatter accessible from templates.

This commit is contained in:
JesseBrault0709 2023-01-04 21:17:12 -06:00
parent 5b2f83898d
commit b293bb856b
5 changed files with 21 additions and 6 deletions

View File

@ -62,7 +62,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
} }
// Render the template using the result of rendering the text earlier // Render the template using the result of rendering the text earlier
def result = template.type.renderer.render(template, renderedText, parts) def result = template.type.renderer.render(template, frontMatter, renderedText, parts)
logger.debug('result: {}', result) logger.debug('result: {}', result)
// Output the result to the outfile, an .html file // Output the result to the outfile, an .html file

View File

@ -2,6 +2,7 @@ package com.jessebrault.ssg.template
import com.jessebrault.ssg.part.Part import com.jessebrault.ssg.part.Part
import com.jessebrault.ssg.part.PartsMap import com.jessebrault.ssg.part.PartsMap
import com.jessebrault.ssg.text.FrontMatter
import groovy.text.GStringTemplateEngine import groovy.text.GStringTemplateEngine
import groovy.text.TemplateEngine import groovy.text.TemplateEngine
@ -10,8 +11,9 @@ class GspTemplateRenderer implements TemplateRenderer {
private static final TemplateEngine engine = new GStringTemplateEngine() private static final TemplateEngine engine = new GStringTemplateEngine()
@Override @Override
String render(Template template, String text, Collection<Part> parts) { String render(Template template, FrontMatter frontMatter, String text, Collection<Part> parts) {
engine.createTemplate(template.text).make([ engine.createTemplate(template.text).make([
frontMatter: frontMatter,
text: text, text: text,
parts: new PartsMap(parts) parts: new PartsMap(parts)
]) ])

View File

@ -1,7 +1,8 @@
package com.jessebrault.ssg.template package com.jessebrault.ssg.template
import com.jessebrault.ssg.part.Part import com.jessebrault.ssg.part.Part
import com.jessebrault.ssg.text.FrontMatter
interface TemplateRenderer { interface TemplateRenderer {
String render(Template template, String text, Collection<Part> parts) String render(Template template, FrontMatter frontMatter, String text, Collection<Part> parts)
} }

View File

@ -11,12 +11,12 @@ class FrontMatter {
private final Map<String, List<String>> data private final Map<String, List<String>> data
String getSingle(String key) { String get(String key) {
data[key][0] data[key][0]
} }
String getAt(String key) { String getAt(String key) {
this.getSingle(key) this.get(key)
} }
List<String> getList(String key) { List<String> getList(String key) {

View File

@ -3,6 +3,7 @@ package com.jessebrault.ssg.template
import com.jessebrault.ssg.part.GspPartRenderer import com.jessebrault.ssg.part.GspPartRenderer
import com.jessebrault.ssg.part.Part import com.jessebrault.ssg.part.Part
import com.jessebrault.ssg.part.PartType import com.jessebrault.ssg.part.PartType
import com.jessebrault.ssg.text.FrontMatter
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import static org.junit.jupiter.api.Assertions.assertEquals import static org.junit.jupiter.api.Assertions.assertEquals
@ -23,8 +24,19 @@ class GspTemplateRendererTests {
new PartType(['.gsp'], new GspPartRenderer()), new PartType(['.gsp'], new GspPartRenderer()),
'Hello, $person!' 'Hello, $person!'
) )
def r = this.renderer.render(template, '', [part]) def r = this.renderer.render(template, new FrontMatter([:]), '', [part])
assertEquals('Hello, World!', r) assertEquals('Hello, World!', r)
} }
@Test
void frontMatter() {
def template = new Template(
"<%= frontMatter['title'] %>",
null,
null
)
def r = this.renderer.render(template, new FrontMatter([title: ['Hello!']]), '', [])
assertEquals('Hello!', r)
}
} }