Globals proliferated throughout.
This commit is contained in:
parent
f205d0b543
commit
fd09b720bb
@ -8,12 +8,12 @@ import com.jessebrault.ssg.specialpage.GspSpecialPageRenderer
|
||||
import com.jessebrault.ssg.specialpage.SpecialPageFileSpecialPagesProvider
|
||||
import com.jessebrault.ssg.specialpage.SpecialPageType
|
||||
import com.jessebrault.ssg.template.GspTemplateRenderer
|
||||
import com.jessebrault.ssg.template.TemplateType
|
||||
import com.jessebrault.ssg.template.TemplateFileTemplatesProvider
|
||||
import com.jessebrault.ssg.template.TemplateType
|
||||
import com.jessebrault.ssg.text.MarkdownFrontMatterGetter
|
||||
import com.jessebrault.ssg.text.MarkdownTextRenderer
|
||||
import com.jessebrault.ssg.text.TextType
|
||||
import com.jessebrault.ssg.text.TextFileTextsProvider
|
||||
import com.jessebrault.ssg.text.TextType
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
@ -50,7 +50,7 @@ class StaticSiteGeneratorCli {
|
||||
}
|
||||
|
||||
def ssg = new SimpleStaticSiteGenerator(config)
|
||||
ssg.generate(new File('build'))
|
||||
ssg.generate(new File('build'), globals)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,5 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import com.jessebrault.ssg.part.PartsProvider
|
||||
import com.jessebrault.ssg.specialpage.SpecialPagesProvider
|
||||
import com.jessebrault.ssg.template.TemplatesProvider
|
||||
import com.jessebrault.ssg.text.TextsProvider
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.slf4j.Marker
|
||||
@ -22,8 +18,8 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
void generate(File buildDir) {
|
||||
logger.trace(enter, 'buildDir: {}', buildDir)
|
||||
void generate(File buildDir, Map globals) {
|
||||
logger.trace(enter, 'buildDir: {}, globals: {}', buildDir, globals)
|
||||
|
||||
// Get all texts, templates, parts, and specialPages
|
||||
def texts = this.config.textProviders.collectMany { it.getTextFiles() }
|
||||
@ -50,7 +46,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
logger.info('processing text: {}', it.path)
|
||||
|
||||
// Render the text (i.e., transform text to html)
|
||||
def renderedText = it.type.renderer.render(it.text)
|
||||
def renderedText = it.type.renderer.render(it.text, globals)
|
||||
logger.debug('renderedText: {}', renderedText)
|
||||
|
||||
// Extract frontMatter from text
|
||||
@ -75,7 +71,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
}
|
||||
|
||||
// Render the template using the result of rendering the text earlier
|
||||
def result = template.type.renderer.render(template, frontMatter, renderedText, parts)
|
||||
def result = template.type.renderer.render(template, frontMatter, renderedText, parts, globals)
|
||||
logger.debug('result: {}', result)
|
||||
|
||||
// Output the result to the outfile, an .html file
|
||||
@ -86,7 +82,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
specialPages.each {
|
||||
logger.info('processing specialPage: {}', it)
|
||||
|
||||
def result = it.type.renderer.render(it.text, texts, parts)
|
||||
def result = it.type.renderer.render(it.text, texts, parts, globals)
|
||||
logger.info('result: {}', result)
|
||||
|
||||
// Output result to file
|
||||
|
@ -1,5 +1,5 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
interface StaticSiteGenerator {
|
||||
void generate(File buildDir)
|
||||
void generate(File buildDir, Map globals)
|
||||
}
|
||||
|
@ -6,9 +6,10 @@ import groovy.transform.TupleConstructor
|
||||
class EmbeddablePart {
|
||||
|
||||
private final Part part
|
||||
private final Map globals
|
||||
|
||||
String render(Map binding) {
|
||||
part.type.renderer.render(part.text, binding)
|
||||
part.type.renderer.render(this.part.text, binding, this.globals)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,10 +8,10 @@ class EmbeddablePartsMap {
|
||||
@Delegate
|
||||
private final Map<String, EmbeddablePart> partsMap = [:]
|
||||
|
||||
EmbeddablePartsMap(Collection<Part> parts) {
|
||||
EmbeddablePartsMap(Collection<Part> parts, Map globals) {
|
||||
Objects.requireNonNull(parts)
|
||||
parts.each {
|
||||
this.put(it.name, new EmbeddablePart(it))
|
||||
this.put(it.name, new EmbeddablePart(it, globals))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,8 +8,10 @@ class GspPartRenderer implements PartRenderer {
|
||||
private static final TemplateEngine engine = new GStringTemplateEngine()
|
||||
|
||||
@Override
|
||||
String render(String partText, Map binding) {
|
||||
engine.createTemplate(partText).make(binding)
|
||||
String render(String partText, Map binding, Map globals) {
|
||||
def bindingCopy = new LinkedHashMap(binding)
|
||||
bindingCopy['globals'] = globals
|
||||
engine.createTemplate(partText).make(bindingCopy)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
interface PartRenderer {
|
||||
String render(String partText, Map binding)
|
||||
String render(String partText, Map binding, Map globals)
|
||||
}
|
||||
|
@ -12,10 +12,11 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
||||
private static final TemplateEngine engine = new GStringTemplateEngine()
|
||||
|
||||
@Override
|
||||
String render(String text, Collection<Text> texts, Collection<Part> parts) {
|
||||
String render(String text, Collection<Text> texts, Collection<Part> parts, Map globals) {
|
||||
engine.createTemplate(text).make([
|
||||
texts: new EmbeddableTextsCollection(texts),
|
||||
parts: new EmbeddablePartsMap(parts)
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals),
|
||||
texts: new EmbeddableTextsCollection(texts, globals)
|
||||
])
|
||||
}
|
||||
|
||||
|
@ -4,5 +4,12 @@ import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.text.Text
|
||||
|
||||
interface SpecialPageRenderer {
|
||||
String render(String text, Collection<Text> texts, Collection <Part> parts)
|
||||
|
||||
String render(
|
||||
String text,
|
||||
Collection<Text> texts,
|
||||
Collection <Part> parts,
|
||||
Map globals
|
||||
)
|
||||
|
||||
}
|
@ -11,11 +11,18 @@ class GspTemplateRenderer implements TemplateRenderer {
|
||||
private static final TemplateEngine engine = new GStringTemplateEngine()
|
||||
|
||||
@Override
|
||||
String render(Template template, FrontMatter frontMatter, String text, Collection<Part> parts) {
|
||||
String render(
|
||||
Template template,
|
||||
FrontMatter frontMatter,
|
||||
String text,
|
||||
Collection<Part> parts,
|
||||
Map globals
|
||||
) {
|
||||
engine.createTemplate(template.text).make([
|
||||
frontMatter: frontMatter,
|
||||
text: text,
|
||||
parts: new EmbeddablePartsMap(parts)
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals),
|
||||
text: text
|
||||
])
|
||||
}
|
||||
|
||||
|
@ -4,5 +4,13 @@ import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.text.FrontMatter
|
||||
|
||||
interface TemplateRenderer {
|
||||
String render(Template template, FrontMatter frontMatter, String text, Collection<Part> parts)
|
||||
|
||||
String render(
|
||||
Template template,
|
||||
FrontMatter frontMatter,
|
||||
String text,
|
||||
Collection<Part> parts,
|
||||
Map globals
|
||||
)
|
||||
|
||||
}
|
||||
|
@ -7,10 +7,11 @@ import groovy.transform.TupleConstructor
|
||||
class EmbeddableText {
|
||||
|
||||
private final Text text
|
||||
private final Map globals
|
||||
|
||||
@Memoized
|
||||
String render() {
|
||||
this.text.type.renderer.render(this.text.text)
|
||||
this.text.type.renderer.render(this.text.text, globals)
|
||||
}
|
||||
|
||||
@Memoized
|
||||
|
@ -8,9 +8,9 @@ class EmbeddableTextsCollection {
|
||||
@Delegate
|
||||
private final Collection<EmbeddableText> embeddableTexts = []
|
||||
|
||||
EmbeddableTextsCollection(Collection<Text> texts) {
|
||||
EmbeddableTextsCollection(Collection<Text> texts, Map globals) {
|
||||
Objects.requireNonNull(texts).each {
|
||||
this << new EmbeddableText(it)
|
||||
this << new EmbeddableText(it, globals)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ class MarkdownTextRenderer implements TextRenderer {
|
||||
private static final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build()
|
||||
|
||||
@Override
|
||||
String render(String text) {
|
||||
String render(String text, Map globals) {
|
||||
htmlRenderer.render(parser.parse(text))
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,13 @@
|
||||
package com.jessebrault.ssg.text
|
||||
|
||||
interface TextRenderer {
|
||||
String render(String text)
|
||||
|
||||
/**
|
||||
* Renders the text from its raw form to html.
|
||||
*
|
||||
* @param text in raw form
|
||||
* @return the rendered text in html
|
||||
*/
|
||||
String render(String text, Map globals)
|
||||
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ class StaticSiteGeneratorTests {
|
||||
new File(this.templatesDir, 'test.gsp').write('<%= text %>')
|
||||
|
||||
def buildDir = File.createTempDir()
|
||||
this.ssg.generate(buildDir)
|
||||
this.ssg.generate(buildDir, [:])
|
||||
|
||||
def outFile = new File(buildDir, 'test.html')
|
||||
assertTrue(outFile.exists())
|
||||
@ -78,7 +78,7 @@ class StaticSiteGeneratorTests {
|
||||
new File(this.templatesDir, 'nested.gsp').write('<%= text %>')
|
||||
|
||||
def buildDir = File.createTempDir()
|
||||
this.ssg.generate(buildDir)
|
||||
this.ssg.generate(buildDir, [:])
|
||||
|
||||
def outFile = new File(new File(buildDir, 'nested'), 'nested.html')
|
||||
assertTrue(outFile.exists())
|
||||
@ -92,7 +92,7 @@ class StaticSiteGeneratorTests {
|
||||
new FileTreeBuilder(this.textsDir).file('test.md', '---\ntemplate: template.gsp\n---\nHello, World!')
|
||||
|
||||
def buildDir = File.createTempDir()
|
||||
this.ssg.generate(buildDir)
|
||||
this.ssg.generate(buildDir, [:])
|
||||
|
||||
def outFile = new File(buildDir, 'special.html')
|
||||
assertTrue(outFile.exists())
|
||||
|
@ -24,7 +24,7 @@ class GspTemplateRendererTests {
|
||||
new PartType(['.gsp'], new GspPartRenderer()),
|
||||
'Hello, $person!'
|
||||
)
|
||||
def r = this.renderer.render(template, new FrontMatter([:]), '', [part])
|
||||
def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ class GspTemplateRendererTests {
|
||||
null,
|
||||
null
|
||||
)
|
||||
def r = this.renderer.render(template, new FrontMatter([title: ['Hello!']]), '', [])
|
||||
def r = this.renderer.render(template, new FrontMatter([title: ['Hello!']]), '', [], [:])
|
||||
assertEquals('Hello!', r)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user