From 84b70eac8885e69c31c3f1b774b26b839d837eb0 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 13 Dec 2017 19:40:32 -0500 Subject: [PATCH] server-side <:Head> --- src/generators/server-side-rendering/index.ts | 4 ++-- src/generators/server-side-rendering/visitors/Head.ts | 11 ++++++----- .../js/samples/ssr-no-oncreate-etc/expected-bundle.js | 4 ++-- test/js/samples/ssr-no-oncreate-etc/expected.js | 4 ++-- test/runtime/samples/head-title-dynamic/_config.js | 2 -- test/server-side-rendering/index.js | 11 ++++++----- .../samples/head-title/_actual-head.html | 2 ++ .../samples/head-title/_expected-head.html | 1 + .../samples/head-title/title.txt | 1 - 9 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 test/server-side-rendering/samples/head-title/_actual-head.html create mode 100644 test/server-side-rendering/samples/head-title/_expected-head.html delete mode 100644 test/server-side-rendering/samples/head-title/title.txt diff --git a/src/generators/server-side-rendering/index.ts b/src/generators/server-side-rendering/index.ts index 78441d4483..64af350b79 100644 --- a/src/generators/server-side-rendering/index.ts +++ b/src/generators/server-side-rendering/index.ts @@ -110,14 +110,14 @@ export default function ssr( components.add(component); } - var result = { title: null, addComponent }; + var result = { head: '', addComponent }; var html = ${name}._render(result, state, options); var cssCode = Array.from(components).map(c => c.css && c.css.code).filter(Boolean).join('\\n'); return { html, - title: result.title, + head: result.head, css: { code: cssCode, map: null }, toString() { return result.html; diff --git a/src/generators/server-side-rendering/visitors/Head.ts b/src/generators/server-side-rendering/visitors/Head.ts index f43f989ccc..e7b4681f90 100644 --- a/src/generators/server-side-rendering/visitors/Head.ts +++ b/src/generators/server-side-rendering/visitors/Head.ts @@ -2,17 +2,18 @@ import { SsrGenerator } from '../index'; import Block from '../Block'; import { Node } from '../../../interfaces'; import stringifyAttributeValue from './shared/stringifyAttributeValue'; +import visit from '../visit'; export default function visitDocument( generator: SsrGenerator, block: Block, node: Node ) { - throw new Error('TODO'); + generator.append('${(__result.head += `'); - // const title = node.attributes.find(attribute => attribute.type === 'Attribute' && attribute.name === 'title'); + node.children.forEach((child: Node) => { + visit(generator, block, child); + }); - // if (title) { - // generator.append('${(__result.title = `' + stringifyAttributeValue(block, title.value) + '`, "")}'); - // } + generator.append('`, "")}'); } \ No newline at end of file diff --git a/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js b/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js index cb02a0b01a..4bcbe320f1 100644 --- a/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js +++ b/test/js/samples/ssr-no-oncreate-etc/expected-bundle.js @@ -11,14 +11,14 @@ SvelteComponent.render = function(state, options = {}) { components.add(component); } - var result = { title: null, addComponent }; + var result = { head: '', addComponent }; var html = SvelteComponent._render(result, state, options); var cssCode = Array.from(components).map(c => c.css && c.css.code).filter(Boolean).join('\n'); return { html, - title: result.title, + head: result.head, css: { code: cssCode, map: null }, toString() { return result.html; diff --git a/test/js/samples/ssr-no-oncreate-etc/expected.js b/test/js/samples/ssr-no-oncreate-etc/expected.js index 101aef98da..0ef80be7a4 100644 --- a/test/js/samples/ssr-no-oncreate-etc/expected.js +++ b/test/js/samples/ssr-no-oncreate-etc/expected.js @@ -13,14 +13,14 @@ SvelteComponent.render = function(state, options = {}) { components.add(component); } - var result = { title: null, addComponent }; + var result = { head: '', addComponent }; var html = SvelteComponent._render(result, state, options); var cssCode = Array.from(components).map(c => c.css && c.css.code).filter(Boolean).join('\n'); return { html, - title: result.title, + head: result.head, css: { code: cssCode, map: null }, toString() { return result.html; diff --git a/test/runtime/samples/head-title-dynamic/_config.js b/test/runtime/samples/head-title-dynamic/_config.js index 8d8ed8b8c8..5155554a0e 100644 --- a/test/runtime/samples/head-title-dynamic/_config.js +++ b/test/runtime/samples/head-title-dynamic/_config.js @@ -1,6 +1,4 @@ export default { - solo: true, - data: { adjective: 'custom' }, diff --git a/test/server-side-rendering/index.js b/test/server-side-rendering/index.js index 2ad256ac99..385f781b6e 100644 --- a/test/server-side-rendering/index.js +++ b/test/server-side-rendering/index.js @@ -59,7 +59,7 @@ describe("ssr", () => { const data = tryToLoadJson(`${dir}/data.json`); - const { html, css, title } = component.render(data); + const { html, css, head } = component.render(data); fs.writeFileSync(`${dir}/_actual.html`, html); if (css.code) fs.writeFileSync(`${dir}/_actual.css`, css.code); @@ -70,10 +70,11 @@ describe("ssr", () => { expectedCss.replace(/^\s+/gm, "") ); - if (fs.existsSync(`${dir}/title.txt`)) { - assert.equal( - title, - fs.readFileSync(`${dir}/title.txt`, 'utf-8') + if (fs.existsSync(`${dir}/_expected-head.html`)) { + fs.writeFileSync(`${dir}/_actual-head.html`, head); + assert.htmlEqual( + head, + fs.readFileSync(`${dir}/_expected-head.html`, 'utf-8') ); } diff --git a/test/server-side-rendering/samples/head-title/_actual-head.html b/test/server-side-rendering/samples/head-title/_actual-head.html new file mode 100644 index 0000000000..b0a06af0cc --- /dev/null +++ b/test/server-side-rendering/samples/head-title/_actual-head.html @@ -0,0 +1,2 @@ + + a custom title diff --git a/test/server-side-rendering/samples/head-title/_expected-head.html b/test/server-side-rendering/samples/head-title/_expected-head.html new file mode 100644 index 0000000000..7d696352f9 --- /dev/null +++ b/test/server-side-rendering/samples/head-title/_expected-head.html @@ -0,0 +1 @@ +a custom title \ No newline at end of file diff --git a/test/server-side-rendering/samples/head-title/title.txt b/test/server-side-rendering/samples/head-title/title.txt deleted file mode 100644 index ee4f8353b2..0000000000 --- a/test/server-side-rendering/samples/head-title/title.txt +++ /dev/null @@ -1 +0,0 @@ -a custom title \ No newline at end of file