If there is no 'template' in frontMatter, does not generate text.
This commit is contained in:
parent
480c794047
commit
9ecb985bc9
@ -37,24 +37,11 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
|||||||
Collection<Diagnostic> diagnostics = []
|
Collection<Diagnostic> diagnostics = []
|
||||||
Collection<GeneratedPage> generatedPages = []
|
Collection<GeneratedPage> generatedPages = []
|
||||||
|
|
||||||
// Generate pages from each text
|
// Generate pages from each text, but only those that have a 'template' frontMatter field with a valid value
|
||||||
texts.each {
|
texts.each {
|
||||||
logger.trace(enter, 'text: {}', it)
|
logger.trace(enter, 'text: {}', it)
|
||||||
logger.info('processing text: {}', it.path)
|
logger.info('processing text: {}', it.path)
|
||||||
|
|
||||||
// Render the text (i.e., transform text to html)
|
|
||||||
def textRenderResult = it.type.renderer.render(it, globals)
|
|
||||||
String renderedText
|
|
||||||
if (textRenderResult.v1.size() > 0) {
|
|
||||||
logger.debug('diagnostics for rendering {}: {}', it.path, textRenderResult.v1)
|
|
||||||
diagnostics.addAll(textRenderResult.v1)
|
|
||||||
logger.trace(exit, '')
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
renderedText = textRenderResult.v2
|
|
||||||
logger.debug('renderedText: {}', renderedText)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract frontMatter from text
|
// Extract frontMatter from text
|
||||||
def frontMatterResult = it.type.frontMatterGetter.get(it)
|
def frontMatterResult = it.type.frontMatterGetter.get(it)
|
||||||
FrontMatter frontMatter
|
FrontMatter frontMatter
|
||||||
@ -69,14 +56,12 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find the appropriate template from the frontMatter
|
// Find the appropriate template from the frontMatter
|
||||||
def desiredTemplate = frontMatter['template']
|
def desiredTemplate = frontMatter.find('template')
|
||||||
logger.debug('desiredTemplate name: {}', desiredTemplate)
|
if (desiredTemplate.isEmpty()) {
|
||||||
if (desiredTemplate == null || desiredTemplate.isEmpty() || desiredTemplate.isBlank()) {
|
logger.info('{} has no \'template\' key in its frontMatter; skipping generation')
|
||||||
diagnostics << new Diagnostic('in textFile ' + it.path + ' frontMatter.template must not be empty, blank, or missing', null)
|
|
||||||
logger.trace(exit, '')
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
def template = templates.find { it.path == desiredTemplate }
|
def template = templates.find { it.path == desiredTemplate.get() }
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
diagnostics << new Diagnostic('in textFile' + it.path + ' frontMatter.template references an unknown template: ' + desiredTemplate, null)
|
diagnostics << new Diagnostic('in textFile' + it.path + ' frontMatter.template references an unknown template: ' + desiredTemplate, null)
|
||||||
logger.trace(exit, '')
|
logger.trace(exit, '')
|
||||||
@ -84,6 +69,19 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
|||||||
}
|
}
|
||||||
logger.debug('found template: {}', template)
|
logger.debug('found template: {}', template)
|
||||||
|
|
||||||
|
// Render the text (i.e., transform text to html)
|
||||||
|
def textRenderResult = it.type.renderer.render(it, globals)
|
||||||
|
String renderedText
|
||||||
|
if (textRenderResult.v1.size() > 0) {
|
||||||
|
logger.debug('diagnostics for rendering {}: {}', it.path, textRenderResult.v1)
|
||||||
|
diagnostics.addAll(textRenderResult.v1)
|
||||||
|
logger.trace(exit, '')
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
renderedText = textRenderResult.v2
|
||||||
|
logger.debug('renderedText: {}', renderedText)
|
||||||
|
}
|
||||||
|
|
||||||
// Render the template using the result of rendering the text earlier
|
// Render the template using the result of rendering the text earlier
|
||||||
def templateRenderResult = template.type.renderer.render(template, frontMatter, renderedText, parts, globals)
|
def templateRenderResult = template.type.renderer.render(template, frontMatter, renderedText, parts, globals)
|
||||||
String renderedTemplate
|
String renderedTemplate
|
||||||
|
@ -17,8 +17,8 @@ class FrontMatter {
|
|||||||
private final Map<String, List<String>> data
|
private final Map<String, List<String>> data
|
||||||
|
|
||||||
String get(String key) {
|
String get(String key) {
|
||||||
if (data[key] != null) {
|
if (this.data[key] != null) {
|
||||||
data[key][0]
|
this.data[key][0]
|
||||||
} else {
|
} else {
|
||||||
logger.warn('in {} no entry for key {} in frontMatter, returning empty string', this.text, key)
|
logger.warn('in {} no entry for key {} in frontMatter, returning empty string', this.text, key)
|
||||||
''
|
''
|
||||||
@ -38,6 +38,14 @@ class FrontMatter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Optional<String> find(String key) {
|
||||||
|
Optional.ofNullable(this.data[key]?[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<List<String>> findList(String key) {
|
||||||
|
Optional.ofNullable(this.data[key])
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
String toString() {
|
String toString() {
|
||||||
"FrontMatter(text: ${ this.text }, data: ${ this.data })"
|
"FrontMatter(text: ${ this.text }, data: ${ this.data })"
|
||||||
|
@ -113,4 +113,12 @@ class SimpleStaticSiteGeneratorIntegrationTests {
|
|||||||
assertEquals('<p>Hello, World!</p>\n', specialPage.html)
|
assertEquals('<p>Hello, World!</p>\n', specialPage.html)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void doesNotGenerateIfNoTemplateInFrontMatter() {
|
||||||
|
new File(this.textsDir, 'test.md').write('Hello, World!')
|
||||||
|
def result = this.ssg.generate(this.build)
|
||||||
|
assertEquals(0, result.v1.size())
|
||||||
|
assertEquals(0, result.v2.size())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user