diff --git a/src/builtin/tags/layout.ts b/src/builtin/tags/layout.ts index f69c842b23..23f09f4757 100644 --- a/src/builtin/tags/layout.ts +++ b/src/builtin/tags/layout.ts @@ -14,12 +14,18 @@ export default { render: function * (ctx: Context, emitter: Emitter) { const { liquid, hash, file } = this const { renderer } = liquid + if (file.getText() === 'none') { + ctx.setRegister('blockMode', BlockMode.OUTPUT) + const html = yield renderer.renderTemplates(this.tpls, ctx) + emitter.write(html) + return + } const filepath = ctx.opts.dynamicPartials ? (TypeGuards.isQuotedToken(file) ? yield renderer.renderTemplates(liquid.parse(evalQuotedToken(file)), ctx) : evalToken(this.file, ctx)) : file.getText() - assert(filepath, () => `illegal filename "${file.getText()}":"${filepath}"`) + assert(filepath, () => `file "${file.getText()}"("${filepath}") not available`) const templates = yield liquid._parseFile(filepath, ctx.opts, ctx.sync) // render remaining contents and store rendered results diff --git a/test/integration/builtin/tags/layout.ts b/test/integration/builtin/tags/layout.ts index 0f9c940f03..fe539a0735 100644 --- a/test/integration/builtin/tags/layout.ts +++ b/test/integration/builtin/tags/layout.ts @@ -38,9 +38,16 @@ describe('tags/layout', function () { }) return liquid.renderFile('/parent.html').catch(function (e) { expect(e.name).to.equal('RenderError') - expect(e.message).to.match(/illegal filename "foo":"undefined"/) + expect(e.message).to.contain('file "foo"("undefined") not available') }) }) + it('should handle layout none', async function () { + const src = '{% layout none %}' + + '{%block a%}A{%endblock%}' + + 'B' + const html = await liquid.parseAndRender(src) + return expect(html).to.equal('AB') + }) describe('anonymous block', function () { it('should handle anonymous block', async function () { mock({