diff --git a/.eslintignore b/.eslintignore index 2176928..fed184a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,5 @@ # Test app -test/app \ No newline at end of file +test/app + +# Compiled +examples/*/dist diff --git a/.gitignore b/.gitignore index 6652056..5bb3a7a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,11 @@ test/app/dist/bundle* test/app/dist/*.js test/app/dist/*.js.map +# Example apps +examples/*/dist/bundle* +examples/*/dist/*.js +examples/*/dist/*.js.map + # This is a module published on NPM, so we can ignore package-lock.json package-lock.json diff --git a/README.md b/README.md index f71d491..174ce2c 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ npm install # Navigate to a sample cd examples/… +# For example +cd examples/basic-routing # Build and run (in the folder of a sample) npx rollup -c diff --git a/examples/basic-routing/dist/index.html b/examples/basic-routing/dist/index.html new file mode 100755 index 0000000..6424790 --- /dev/null +++ b/examples/basic-routing/dist/index.html @@ -0,0 +1,13 @@ + + + + + + + svelte-spa-router sample + + + + + + \ No newline at end of file diff --git a/examples/basic-routing/rollup.config.js b/examples/basic-routing/rollup.config.js new file mode 100755 index 0000000..742d141 --- /dev/null +++ b/examples/basic-routing/rollup.config.js @@ -0,0 +1,33 @@ +import svelte from 'rollup-plugin-svelte' +import resolve from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' + +export default { + input: 'src/main.js', + output: { + sourcemap: true, + name: 'app', + format: 'esm', + dir: 'dist/', + chunkFileNames: '[name].js' + }, + plugins: [ + svelte({ + // enable run-time checks when not in production + dev: true, + // we'll extract any component CSS out into + // a separate file  better for performance + css: css => { + css.write('bundle.css') + } + }), + + // If you have external dependencies installed from + // npm, you'll most likely need these plugins. In + // some cases you'll need additional configuration  + // consult the documentation for details: + // https://github.com/rollup/rollup-plugin-commonjs + resolve(), + commonjs() + ] +} diff --git a/examples/basic-routing/src/App.svelte b/examples/basic-routing/src/App.svelte new file mode 100644 index 0000000..f2907ac --- /dev/null +++ b/examples/basic-routing/src/App.svelte @@ -0,0 +1,22 @@ +

svelte-spa-router sample

+

Basic routing

+ + + + + + + + diff --git a/examples/basic-routing/src/main.js b/examples/basic-routing/src/main.js new file mode 100644 index 0000000..57f6eca --- /dev/null +++ b/examples/basic-routing/src/main.js @@ -0,0 +1,7 @@ +// Initialize the Svelte app and inject it in the DOM +import App from './App.svelte' +const app = new App({ + target: document.body +}) + +export default app diff --git a/examples/basic-routing/src/routes.js b/examples/basic-routing/src/routes.js new file mode 100644 index 0000000..ce0c1b1 --- /dev/null +++ b/examples/basic-routing/src/routes.js @@ -0,0 +1,22 @@ +// Components +import Home from './routes/Home.svelte' +import Name from './routes/Name.svelte' +import Wild from './routes/Wild.svelte' +import NotFound from './routes/NotFound.svelte' + +// Export the route definition object +export default { + // Exact path + '/': Home, + + // Using named parameters, with last being optional + '/hello/:first/:last?': Name, + + // Wildcard parameter + // Included twice to match both `/wild` (and nothing after) and `/wild/*` (with anything after) + '/wild': Wild, + '/wild/*': Wild, + + // Catch-all, must be last + '*': NotFound, +} diff --git a/examples/basic-routing/src/routes/Home.svelte b/examples/basic-routing/src/routes/Home.svelte new file mode 100644 index 0000000..50c596f --- /dev/null +++ b/examples/basic-routing/src/routes/Home.svelte @@ -0,0 +1,11 @@ +

Home component

+ +

+ This sample shows how to set up the router with minimum functionality.
+ The route definition object contains a number of routes (including some with parameters and a catch-all at the end).
+ The links below allow navigating between pages. +

+ +

This is the Home component, which contains markup only.

+ +

Hint: Try navigating with the links below, then use your browser's back and forward buttons.

diff --git a/examples/basic-routing/src/routes/Name.svelte b/examples/basic-routing/src/routes/Name.svelte new file mode 100644 index 0000000..5707e05 --- /dev/null +++ b/examples/basic-routing/src/routes/Name.svelte @@ -0,0 +1,14 @@ +

Hi there!

+ +

+ Your name is: + {params.first} + {#if params.last}{params.last}{/if} +

+

This comes from the URL, matching /hello/:first/:last?, where the last name is optional.

+

Hint: Try changing the URL and add your name, e.g. /hello/alex or /hello/jane/doe

+ + diff --git a/examples/basic-routing/src/routes/NotFound.svelte b/examples/basic-routing/src/routes/NotFound.svelte new file mode 100644 index 0000000..f8b69bd --- /dev/null +++ b/examples/basic-routing/src/routes/NotFound.svelte @@ -0,0 +1,3 @@ +

NotFound

+ +

Oops, this route doesn't exist!

diff --git a/examples/basic-routing/src/routes/Wild.svelte b/examples/basic-routing/src/routes/Wild.svelte new file mode 100644 index 0000000..b1c5426 --- /dev/null +++ b/examples/basic-routing/src/routes/Wild.svelte @@ -0,0 +1,10 @@ +

Wildcard

+ +

Anything in the URL after /wild/ is shown below as message. That's found in the params.wild prop.

+ +

Your message is: {params.wild}

+ +