Added targetPath to dsl.
This commit is contained in:
parent
b57ad55396
commit
6de83dff10
@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory
|
|||||||
import org.slf4j.Marker
|
import org.slf4j.Marker
|
||||||
import org.slf4j.MarkerFactory
|
import org.slf4j.MarkerFactory
|
||||||
|
|
||||||
|
import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension
|
||||||
|
|
||||||
@TupleConstructor(includeFields = true)
|
@TupleConstructor(includeFields = true)
|
||||||
@NullCheck
|
@NullCheck
|
||||||
@EqualsAndHashCode(includeFields = true)
|
@EqualsAndHashCode(includeFields = true)
|
||||||
@ -70,13 +72,16 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
|||||||
}
|
}
|
||||||
logger.debug('found template: {}', template)
|
logger.debug('found template: {}', template)
|
||||||
|
|
||||||
|
def targetPath = stripExtension(it.path) + '.html'
|
||||||
|
|
||||||
// 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(
|
def templateRenderResult = template.type.renderer.render(
|
||||||
template,
|
template,
|
||||||
frontMatter,
|
frontMatter,
|
||||||
it,
|
it,
|
||||||
parts,
|
parts,
|
||||||
globals
|
globals,
|
||||||
|
targetPath
|
||||||
)
|
)
|
||||||
String renderedTemplate
|
String renderedTemplate
|
||||||
if (templateRenderResult.v1.size() > 0) {
|
if (templateRenderResult.v1.size() > 0) {
|
||||||
@ -88,14 +93,21 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a GeneratedPage
|
// Create a GeneratedPage
|
||||||
generatedPages << OutputPage.of(it, '.html', renderedTemplate)
|
generatedPages << new OutputPage(targetPath, renderedTemplate)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate special pages
|
// Generate special pages
|
||||||
specialPages.each {
|
specialPages.each {
|
||||||
logger.info('processing specialPage: {}', it.path)
|
logger.info('processing specialPage: {}', it.path)
|
||||||
|
|
||||||
def specialPageRenderResult = it.type.renderer.render(it, texts, parts, globals)
|
def targetPath = stripExtension(it.path) + '.html'
|
||||||
|
def specialPageRenderResult = it.type.renderer.render(
|
||||||
|
it,
|
||||||
|
texts,
|
||||||
|
parts,
|
||||||
|
globals,
|
||||||
|
targetPath
|
||||||
|
)
|
||||||
String renderedSpecialPage
|
String renderedSpecialPage
|
||||||
if (specialPageRenderResult.v1.size() > 0) {
|
if (specialPageRenderResult.v1.size() > 0) {
|
||||||
diagnostics.addAll(specialPageRenderResult.v1)
|
diagnostics.addAll(specialPageRenderResult.v1)
|
||||||
@ -106,7 +118,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a GeneratedPage
|
// Create a GeneratedPage
|
||||||
generatedPages << OutputPage.of(it, '.html', renderedSpecialPage)
|
generatedPages << new OutputPage(targetPath, renderedSpecialPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.trace(exit, '\n\tdiagnostics: {}\n\tgeneratedPages: {}', diagnostics, generatedPages)
|
logger.trace(exit, '\n\tdiagnostics: {}\n\tgeneratedPages: {}', diagnostics, generatedPages)
|
||||||
|
@ -10,6 +10,7 @@ import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension
|
|||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
final class OutputPage {
|
final class OutputPage {
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
static OutputPage of(InputPage inputFile, String extension, String content) {
|
static OutputPage of(InputPage inputFile, String extension, String content) {
|
||||||
new OutputPage(stripExtension(inputFile.path) + extension, content)
|
new OutputPage(stripExtension(inputFile.path) + extension, content)
|
||||||
}
|
}
|
||||||
@ -17,7 +18,7 @@ final class OutputPage {
|
|||||||
final String path
|
final String path
|
||||||
final String content
|
final String content
|
||||||
|
|
||||||
private OutputPage(String path, String content) {
|
OutputPage(String path, String content) {
|
||||||
this.path = path
|
this.path = path
|
||||||
this.content = content
|
this.content = content
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,8 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
|||||||
SpecialPage specialPage,
|
SpecialPage specialPage,
|
||||||
Collection<Text> texts,
|
Collection<Text> texts,
|
||||||
Collection<Part> parts,
|
Collection<Part> parts,
|
||||||
Map globals
|
Map globals,
|
||||||
|
String targetPath
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
Collection<Diagnostic> diagnostics = []
|
Collection<Diagnostic> diagnostics = []
|
||||||
@ -32,8 +33,9 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
|||||||
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path),
|
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path),
|
||||||
path: specialPage.path,
|
path: specialPage.path,
|
||||||
tagBuilder: new DynamicTagBuilder(),
|
tagBuilder: new DynamicTagBuilder(),
|
||||||
|
targetPath: targetPath,
|
||||||
texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll),
|
texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll),
|
||||||
urlBuilder: new PathBasedUrlBuilder(specialPage.path)
|
urlBuilder: new PathBasedUrlBuilder(targetPath)
|
||||||
])
|
])
|
||||||
new Tuple2<>(diagnostics, result.toString())
|
new Tuple2<>(diagnostics, result.toString())
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -10,7 +10,8 @@ interface SpecialPageRenderer {
|
|||||||
SpecialPage specialPage,
|
SpecialPage specialPage,
|
||||||
Collection<Text> texts,
|
Collection<Text> texts,
|
||||||
Collection <Part> parts,
|
Collection <Part> parts,
|
||||||
Map globals
|
Map globals,
|
||||||
|
String targetPath
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
@ -26,7 +26,8 @@ class GspTemplateRenderer implements TemplateRenderer {
|
|||||||
FrontMatter frontMatter,
|
FrontMatter frontMatter,
|
||||||
Text text,
|
Text text,
|
||||||
Collection<Part> parts,
|
Collection<Part> parts,
|
||||||
Map globals
|
Map globals,
|
||||||
|
String targetPath
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
Collection<Diagnostic> diagnostics = []
|
Collection<Diagnostic> diagnostics = []
|
||||||
@ -40,8 +41,9 @@ class GspTemplateRenderer implements TemplateRenderer {
|
|||||||
parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path),
|
parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path),
|
||||||
path: text.path,
|
path: text.path,
|
||||||
tagBuilder: new DynamicTagBuilder(),
|
tagBuilder: new DynamicTagBuilder(),
|
||||||
|
targetPath: targetPath,
|
||||||
text: embeddableText,
|
text: embeddableText,
|
||||||
urlBuilder: new PathBasedUrlBuilder(text.path)
|
urlBuilder: new PathBasedUrlBuilder(targetPath)
|
||||||
])
|
])
|
||||||
new Tuple2<>(diagnostics, result.toString())
|
new Tuple2<>(diagnostics, result.toString())
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -16,7 +16,8 @@ interface TemplateRenderer {
|
|||||||
FrontMatter frontMatter,
|
FrontMatter frontMatter,
|
||||||
Text text,
|
Text text,
|
||||||
Collection<Part> parts,
|
Collection<Part> parts,
|
||||||
Map globals
|
Map globals,
|
||||||
|
String targetPath
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ class GspSpecialPageRendererTests {
|
|||||||
void rendersGlobal() {
|
void rendersGlobal() {
|
||||||
def specialPage = new SpecialPage("<%= globals['greeting'] %>", 'test.gsp', null)
|
def specialPage = new SpecialPage("<%= globals['greeting'] %>", 'test.gsp', null)
|
||||||
def globals = [greeting: 'Hello, World!']
|
def globals = [greeting: 'Hello, World!']
|
||||||
def r = this.renderer.render(specialPage, [], [], globals)
|
def r = this.renderer.render(specialPage, [], [], globals, '')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
}
|
}
|
||||||
@ -37,7 +37,7 @@ class GspSpecialPageRendererTests {
|
|||||||
def part = new Part('test', partType , '')
|
def part = new Part('test', partType , '')
|
||||||
|
|
||||||
def specialPage = new SpecialPage("<%= parts['test'].render() %>", 'test.gsp', null)
|
def specialPage = new SpecialPage("<%= parts['test'].render() %>", 'test.gsp', null)
|
||||||
def r = this.renderer.render(specialPage, [], [part], [:])
|
def r = this.renderer.render(specialPage, [], [part], [:], '')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ class GspSpecialPageRendererTests {
|
|||||||
'test.gsp',
|
'test.gsp',
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
def r = this.renderer.render(specialPage, [], [part], [:])
|
def r = this.renderer.render(specialPage, [], [part], [:], '')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ class GspSpecialPageRendererTests {
|
|||||||
'test.gsp',
|
'test.gsp',
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
def r = this.renderer.render(specialPage, [text], [], [:])
|
def r = this.renderer.render(specialPage, [text], [], [:], '')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', r.v2)
|
assertEquals('<p><strong>Hello, World!</strong></p>\n', r.v2)
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ class GspSpecialPageRendererTests {
|
|||||||
@Test
|
@Test
|
||||||
void tagBuilderAvailable() {
|
void tagBuilderAvailable() {
|
||||||
def specialPage = new SpecialPage('<%= tagBuilder.test() %>', 'test.gsp', null)
|
def specialPage = new SpecialPage('<%= tagBuilder.test() %>', 'test.gsp', null)
|
||||||
def r = this.renderer.render(specialPage, [], [], [:])
|
def r = this.renderer.render(specialPage, [], [], [:], '')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('<test />', r.v2)
|
assertEquals('<test />', r.v2)
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ class GspSpecialPageRendererTests {
|
|||||||
@Test
|
@Test
|
||||||
void pathAvailable() {
|
void pathAvailable() {
|
||||||
def specialPage = new SpecialPage('<%= path %>', 'test.gsp', null)
|
def specialPage = new SpecialPage('<%= path %>', 'test.gsp', null)
|
||||||
def r = this.renderer.render(specialPage, [], [], [:])
|
def r = this.renderer.render(specialPage, [], [], [:], '')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('test.gsp', r.v2)
|
assertEquals('test.gsp', r.v2)
|
||||||
}
|
}
|
||||||
@ -100,9 +100,35 @@ class GspSpecialPageRendererTests {
|
|||||||
'test.gsp',
|
'test.gsp',
|
||||||
null
|
null
|
||||||
)
|
)
|
||||||
def r = this.renderer.render(specialPage, [], [], [:])
|
def r = this.renderer.render(specialPage, [], [], [:], 'test.html')
|
||||||
assertEmptyDiagnostics(r)
|
assertEmptyDiagnostics(r)
|
||||||
assertEquals('images/test.jpg', r.v2)
|
assertEquals('images/test.jpg', r.v2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void urlBuilderIsRelativeToTargetPath() {
|
||||||
|
def specialPage = new SpecialPage(
|
||||||
|
'<%= urlBuilder.relative("images/test.jpg") %>',
|
||||||
|
'',
|
||||||
|
null
|
||||||
|
)
|
||||||
|
def r = this.renderer.render(
|
||||||
|
specialPage, [], [], [:], 'test/test.html'
|
||||||
|
)
|
||||||
|
assertEmptyDiagnostics(r)
|
||||||
|
assertEquals('../images/test.jpg', r.v2)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void targetPathAvailable() {
|
||||||
|
def specialPage = new SpecialPage(
|
||||||
|
'<%= targetPath %>',
|
||||||
|
'',
|
||||||
|
null
|
||||||
|
)
|
||||||
|
def r = this.renderer.render(specialPage, [], [], [:], 'test.html')
|
||||||
|
assertEmptyDiagnostics(r)
|
||||||
|
assertEquals('test.html', r.v2)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.junit.jupiter.api.extension.ExtendWith
|
|||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.junit.jupiter.MockitoExtension
|
import org.mockito.junit.jupiter.MockitoExtension
|
||||||
|
|
||||||
|
import static com.jessebrault.ssg.testutil.DiagnosticsUtil.assertEmptyDiagnostics
|
||||||
import static com.jessebrault.ssg.testutil.DiagnosticsUtil.getDiagnosticsMessageSupplier
|
import static com.jessebrault.ssg.testutil.DiagnosticsUtil.getDiagnosticsMessageSupplier
|
||||||
import static com.jessebrault.ssg.text.TextMocks.*
|
import static com.jessebrault.ssg.text.TextMocks.*
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals
|
import static org.junit.jupiter.api.Assertions.assertEquals
|
||||||
@ -40,7 +41,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
blankText(),
|
blankText(),
|
||||||
[part],
|
[part],
|
||||||
[:]
|
[:],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
@ -64,7 +66,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
blankText(),
|
blankText(),
|
||||||
[part],
|
[part],
|
||||||
[:]
|
[:],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
@ -78,7 +81,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [title: ['Hello!']]),
|
new FrontMatter(null, [title: ['Hello!']]),
|
||||||
blankText(),
|
blankText(),
|
||||||
[],
|
[],
|
||||||
[:]
|
[:],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('Hello!', r.v2)
|
assertEquals('Hello!', r.v2)
|
||||||
@ -92,7 +96,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
blankText(),
|
blankText(),
|
||||||
[],
|
[],
|
||||||
[test: 'Hello, World!']
|
[test: 'Hello, World!'],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
@ -106,7 +111,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
renderableText('Hello, World!'),
|
renderableText('Hello, World!'),
|
||||||
[],
|
[],
|
||||||
[:]
|
[:],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('Hello, World!', r.v2)
|
assertEquals('Hello, World!', r.v2)
|
||||||
@ -120,7 +126,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
blankText(),
|
blankText(),
|
||||||
[],
|
[],
|
||||||
[:]
|
[:],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('<test />', r.v2)
|
assertEquals('<test />', r.v2)
|
||||||
@ -134,7 +141,8 @@ class GspTemplateRendererTests {
|
|||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
textWithPath('test.md'),
|
textWithPath('test.md'),
|
||||||
[],
|
[],
|
||||||
[:]
|
[:],
|
||||||
|
''
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('test.md', r.v2)
|
assertEquals('test.md', r.v2)
|
||||||
@ -146,12 +154,43 @@ class GspTemplateRendererTests {
|
|||||||
def r = this.renderer.render(
|
def r = this.renderer.render(
|
||||||
template,
|
template,
|
||||||
new FrontMatter(null, [:]),
|
new FrontMatter(null, [:]),
|
||||||
textWithPath('test.md'),
|
blankText(),
|
||||||
[],
|
[],
|
||||||
[:]
|
[:],
|
||||||
|
'test.html'
|
||||||
)
|
)
|
||||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||||
assertEquals('images/test.jpg', r.v2)
|
assertEquals('images/test.jpg', r.v2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void urlBuilderIsRelativeToTargetPath() {
|
||||||
|
def template = new Template('<%= urlBuilder.relative("images/test.jpg") %>', null, null)
|
||||||
|
def r = this.renderer.render(
|
||||||
|
template,
|
||||||
|
new FrontMatter(null, [:]),
|
||||||
|
blankText(),
|
||||||
|
[],
|
||||||
|
[:],
|
||||||
|
'test/test.html'
|
||||||
|
)
|
||||||
|
assertEmptyDiagnostics(r)
|
||||||
|
assertEquals('../images/test.jpg', r.v2)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void targetPathAvailable() {
|
||||||
|
def template = new Template('<%= targetPath %>', null, null)
|
||||||
|
def r = this.renderer.render(
|
||||||
|
template,
|
||||||
|
new FrontMatter(null, [:]),
|
||||||
|
blankText(),
|
||||||
|
[],
|
||||||
|
[:],
|
||||||
|
'test.html'
|
||||||
|
)
|
||||||
|
assertEmptyDiagnostics(r)
|
||||||
|
assertEquals('test.html', r.v2)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user