make selector customisable

This commit is contained in:
Rich Harris
2017-12-12 06:19:53 -05:00
parent fa70024a92
commit 58768ae27d
3 changed files with 14 additions and 6 deletions

View File

@@ -21,7 +21,7 @@ module.exports = function connect(opts) {
let server_routes = glob.sync('**/*.+(js|mjs)', { cwd: routes }); let server_routes = glob.sync('**/*.+(js|mjs)', { cwd: routes });
let server_route_matchers = create_matchers(server_routes); let server_route_matchers = create_matchers(server_routes);
create_app(routes, out, page_matchers, opts.dev); create_app(routes, out, page_matchers, opts);
const webpack_compiler = create_webpack_compiler( const webpack_compiler = create_webpack_compiler(
path.join(out, 'main.js'), path.join(out, 'main.js'),
@@ -43,16 +43,22 @@ module.exports = function connect(opts) {
const params = matcher.exec(url); const params = matcher.exec(url);
const Component = require(`${routes}/${matcher.file}`); const Component = require(`${routes}/${matcher.file}`);
const app = await webpack_compiler.app; const main = await webpack_compiler.app;
const page = opts.template({ const page = opts.template({
app, main,
html: Component.render({ html: Component.render({
params, params,
query: req.query query: req.query
}) })
}); });
res.status(200);
res.set({
// TODO etag stuff
'Content-Length': page.length,
'Content-Type': 'text/html'
});
res.end(page); res.end(page);
return; return;
} }

View File

@@ -13,7 +13,7 @@ window.addEventListener('popstate', event => {
navigate(window.location); navigate(window.location);
}); });
const target = document.querySelector('main'); const target = document.querySelector('__selector__');
let component; let component;
function navigate(url) { function navigate(url) {

View File

@@ -3,7 +3,7 @@ const path = require('path');
const template = fs.readFileSync(path.resolve(__dirname, '../templates/main.js'), 'utf-8'); const template = fs.readFileSync(path.resolve(__dirname, '../templates/main.js'), 'utf-8');
module.exports = function create_app(routes, dest, matchers, dev) { module.exports = function create_app(routes, dest, matchers, options) {
// TODO in dev mode, watch files // TODO in dev mode, watch files
const code = matchers const code = matchers
@@ -32,7 +32,9 @@ module.exports = function create_app(routes, dest, matchers, dev) {
}) })
.join(' else ') + ' else return false;'; .join(' else ') + ' else return false;';
const main = template.replace('// ROUTES', code); const main = template
.replace('__selector__', options.selector || 'main')
.replace('// ROUTES', code);
fs.writeFileSync(path.join(dest, 'main.js'), main); fs.writeFileSync(path.join(dest, 'main.js'), main);
}; };