Compare commits
68 Commits
@rocket/cl
...
feat/engin
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ac51803db | ||
|
|
79312ccb8d | ||
|
|
6d1a2933fa | ||
|
|
ba82d317fc | ||
|
|
3b14db0f9a | ||
|
|
93d9944ae5 | ||
|
|
4fd8388750 | ||
|
|
8e1301ed64 | ||
|
|
936b9500b3 | ||
|
|
41e132001b | ||
|
|
c4c9ee687f | ||
|
|
b59179864f | ||
|
|
9c6fb114b7 | ||
|
|
c5039d501e | ||
|
|
4d511f7a62 | ||
|
|
463dc82d60 | ||
|
|
ab1bbf166f | ||
|
|
08181194e2 | ||
|
|
97cb38ccb8 | ||
|
|
26d3de1444 | ||
|
|
1f141058c1 | ||
|
|
08574c9b31 | ||
|
|
e81b77f236 | ||
|
|
456b8e78f0 | ||
|
|
0d7ea015af | ||
|
|
445b02872f | ||
|
|
1a599db3ed | ||
|
|
6b6bed5391 | ||
|
|
30eb822151 | ||
|
|
15a82c0e4d | ||
|
|
0197bee621 | ||
|
|
5c6b9c91eb | ||
|
|
6221e5f9ea | ||
|
|
06741ed729 | ||
|
|
23c164c822 | ||
|
|
c2a76c3f53 | ||
|
|
70bb7a128e | ||
|
|
3c342473d7 | ||
|
|
9e0579ab19 | ||
|
|
de202da0a5 | ||
|
|
509a8d9115 | ||
|
|
42418f2c00 | ||
|
|
cadd8588b0 | ||
|
|
aabe011427 | ||
|
|
e1089c5701 | ||
|
|
9f10386eb2 | ||
|
|
0987a41620 | ||
|
|
7301a0f354 | ||
|
|
5ac6aa6693 | ||
|
|
9f1633cccc | ||
|
|
00f4a91550 | ||
|
|
eb62dd9fd5 | ||
|
|
bb07267289 | ||
|
|
738941afdd | ||
|
|
ef086c7aa3 | ||
|
|
3d22fbb72e | ||
|
|
adf0f1d88f | ||
|
|
4145031162 | ||
|
|
ac58953527 | ||
|
|
7dc3e0f9b0 | ||
|
|
305a657ff5 | ||
|
|
8585e2ad66 | ||
|
|
4585675b00 | ||
|
|
39f4fa7050 | ||
|
|
ccdd4d077e | ||
|
|
a5661b85c2 | ||
|
|
99b12c7c9e | ||
|
|
61bb700c3e |
6
.gitignore
vendored
@@ -1,6 +1,5 @@
|
||||
## editors
|
||||
/.idea
|
||||
/.vscode
|
||||
|
||||
## system files
|
||||
.DS_Store
|
||||
@@ -28,9 +27,7 @@ stats.html
|
||||
*.tsbuildinfo
|
||||
|
||||
## Rocket ignore files (need to be the full relative path to the folders)
|
||||
docs/_merged_data/
|
||||
docs/_merged_assets/
|
||||
docs/_merged_includes/
|
||||
*-mdjs-generated.js
|
||||
_site
|
||||
_site-dev
|
||||
|
||||
@@ -40,3 +37,4 @@ _merged_assets
|
||||
_merged_includes
|
||||
__output
|
||||
__output-dev
|
||||
docs_backup
|
||||
|
||||
7
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"dbaeumer.vscode-eslint"
|
||||
]
|
||||
}
|
||||
34
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
// A launch configuration that compiles the extension and then opens it inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Run Web Dev Server Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}/packages/vscode-rocket"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/packages/vscode-rocket/out/**/*.js"
|
||||
],
|
||||
"preLaunchTask": "Compile vscode-rocket"
|
||||
},
|
||||
{
|
||||
"name": "Extension Tests",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}",
|
||||
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/out/test/**/*.js"
|
||||
],
|
||||
"preLaunchTask": "${defaultBuildTask}"
|
||||
}
|
||||
]
|
||||
}
|
||||
10
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"gitdoc.enabled": false,
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"files.exclude": {
|
||||
"**/*-mdjs-generated.js": true,
|
||||
},
|
||||
"search.exclude": {
|
||||
"**/*-mdjs-generated.js": true,
|
||||
}
|
||||
}
|
||||
29
.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "watch",
|
||||
"problemMatcher": "$tsc-watch",
|
||||
"isBackground": true,
|
||||
"presentation": {
|
||||
"reveal": "never"
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Compile vscode-rocket",
|
||||
"type": "npm",
|
||||
"script": "compile",
|
||||
"path": "packages/vscode-rocket/",
|
||||
"group": "build",
|
||||
"problemMatcher": [],
|
||||
"detail": "tsc -p ./"
|
||||
}
|
||||
]
|
||||
}
|
||||
17
README.md
@@ -19,6 +19,11 @@
|
||||
src="https://img.shields.io/badge/twitter-@modern_web_dev-1DA1F3?style=flat-square"
|
||||
alt="Follow @modern_web_dev on Twitter"
|
||||
/></a>
|
||||
<a href="https://open.vscode.dev/modernweb-dev/rocket"
|
||||
><img
|
||||
src="https://open.vscode.dev/badges/open-in-vscode.svg"
|
||||
alt="Open in VS Code"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -33,7 +38,7 @@
|
||||
|
||||
**The modern web setup for static sites with a sprinkle of JavaScript!**
|
||||
|
||||
- **Meta Framework:** Build on top of giants like <a href="https://www.11ty.dev/">Eleventy</a>, <a href="https://rollupjs.org/">Rollup</a>, and <a href="https://www.modern-web.dev/">Modern Web</a>.
|
||||
- **Meta Framework:** Build on top of giants like <a href="https://lit.dev/">Lit</a>, <a href="https://rollupjs.org/">Rollup</a> and <a href="https://www.modern-web.dev/">Modern Web</a>.
|
||||
- **Powerful Default Template:** Provide content and you are ready to go.
|
||||
- **Small:** No overblown tools or frontend frameworks, add JavaScript and/or Web Components only on pages where needed..
|
||||
|
||||
@@ -50,6 +55,16 @@ You can still tweak every detail of every underlying tool that gets used.
|
||||
|
||||
Rocket is part of the [Modern Web Family](https://twitter.com/modern_web_dev).
|
||||
|
||||
## Quick Start
|
||||
|
||||
```
|
||||
mkdir test-rocket
|
||||
cd test-rocket
|
||||
npm init -y
|
||||
npm i @rocket/cli@alpha @rocket/launch@alpha @11ty/eleventy-cache-assets typescript
|
||||
npx rocket init
|
||||
```
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
We are always looking for contributors of all skill levels! If you're looking to ease your way into the project, try out a [good first issue](https://github.com/modernweb-dev/rocket/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
|
||||
|
||||
41
TODO.md
Normal file
@@ -0,0 +1,41 @@
|
||||
## Features
|
||||
|
||||
- Rename "options.docsDir" to "options.inputDir"
|
||||
- recursive rendering of lit / html / and markdown
|
||||
- convert `<meta name="menu:link.text" content="Docs" />` to `export const menuLinkText = 'Docs';`
|
||||
- "import" markdown with frontmatter
|
||||
- export const mdCleanup = false; => to not clean up auto generated md files for this page
|
||||
- add helper for layouts
|
||||
- Add "menuExclude" => to actually exclude the menu item
|
||||
|
||||
## Bugs
|
||||
|
||||
- write to `_site-dev` instead of `_site` while using `rocket start`
|
||||
- nested `recursive.data.js` do not overwrite the parent data
|
||||
- rocketGeneratedMdInJs => converted-md-source
|
||||
- rocketGeneratedFromMd => converted-md
|
||||
- support <!-- asdf --> in markdown
|
||||
- ssr render can just be a string concat
|
||||
|
||||
## Error Handling
|
||||
|
||||
- make error nice for "needs function export default () => html` instead of just export default html`"
|
||||
- make error nice for parent page not found in index => auto generate page? 🤔
|
||||
|
||||
## Examples
|
||||
|
||||
- docs site, blog (simple), blog (complex), minimal
|
||||
- add stackblitz/codesandbox examples
|
||||
|
||||
- Example: export variable and use it in rendering
|
||||
- Example: fetch data from an api and display it
|
||||
- Example: usage of image
|
||||
|
||||
## later
|
||||
|
||||
- support `@change` in markdown
|
||||
- support "hey ${foo.map(f => `${f} + 1`)}"
|
||||
|
||||
## consider
|
||||
|
||||
- Replace magic "resolve:pkg/foo.css" with a directive `${resolve()}`?
|
||||
@@ -1,4 +1,12 @@
|
||||
# First Pages >> Getting Started ||10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/10--first-pages/10--getting-started.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Getting Started
|
||||
|
||||
Rocket has the following prerequisites:
|
||||
|
||||
@@ -21,7 +29,7 @@ cd my-project
|
||||
|
||||
Then initialize a package.json file
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npm init -y
|
||||
@@ -39,7 +47,7 @@ pnpm init -y
|
||||
|
||||
### Step 2. Install dependencies
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npm install --save-dev @rocket/cli @rocket/launch
|
||||
@@ -57,7 +65,7 @@ pnpm add -D @rocket/cli @rocket/launch
|
||||
|
||||
### Step 3. Bootstrap the project
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npx rocket bootstrap
|
||||
@@ -75,10 +83,10 @@ pnpx rocket bootstrap
|
||||
|
||||
The `bootstrap` command creates four files in your repo:
|
||||
|
||||
- `.gitignore` containing rocket's build artifacts
|
||||
- `rocket.config.js` containing a minimal rocket config
|
||||
- `docs/.eleventyignore` required to allow you to [override templates](/guides/presets/overriding/)
|
||||
- `docs/index.md` your first page
|
||||
- `.gitignore` containing rocket's build artifacts
|
||||
- `.vscode/settings.json` hide build artifacts in your vscode
|
||||
|
||||
It also set the package `type` to `"module"` and adds a `start` and `docs` package scripts.
|
||||
|
||||
@@ -95,6 +103,7 @@ If you don't want to use the `module` package type, make sure to rename the gene
|
||||
```js tab rocket.config.js
|
||||
import { rocketLaunch } from '@rocket/launch';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
presets: [rocketLaunch()],
|
||||
};
|
||||
@@ -106,23 +115,11 @@ export default {
|
||||
Add your markdown content here.
|
||||
```
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
|
||||
```html tab docs/.eleventyignore
|
||||
_assets
|
||||
_includes
|
||||
_data
|
||||
```
|
||||
|
||||
```html tab .gitignore
|
||||
## Rocket ignore files (need to be the full relative path to the folders)
|
||||
docs/_merged_data/
|
||||
docs/_merged_assets/
|
||||
docs/_merged_includes/
|
||||
## Rocket ignore files (need to be the full relative path to the folders) docs/_merged_data/
|
||||
docs/_merged_assets/ docs/_merged_includes/
|
||||
```
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
</code-tabs>
|
||||
|
||||
</details>
|
||||
@@ -145,7 +142,7 @@ Please note that the heading - text prefixed with `#` or `##` - is not optional
|
||||
|
||||
Now you can launch your site locally with
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npm start
|
||||
@@ -175,11 +172,6 @@ It can be helpful to take an inventory, before we start, to separate basic setup
|
||||
|
||||
That's all it takes to get a new super-fast and powerful site, complete with a service worker, default styling, navigation, and ready to deploy as a plain old static files.
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Adding Pages](../adding-pages/)
|
||||
- [Using Presets](../../presets/getting-started/)
|
||||
|
||||
```js script
|
||||
import '@rocket/launch/inline-notification/inline-notification.js';
|
||||
```
|
||||
@@ -1,4 +1,12 @@
|
||||
# First Pages >> Adding Pages ||12
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/10--first-pages/20--adding-pages.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Adding Pages
|
||||
|
||||
<inline-notification type="warning">
|
||||
|
||||
@@ -12,13 +20,13 @@ It can help to examine each new page and menu carefully, to come to terms with t
|
||||
|
||||
In most cases you will have multiple sections in your website and each of those sections will come with its own sidebar navigation.
|
||||
|
||||
To create a section you need to create a folder with an `index.md`.
|
||||
To create a section you need to create a folder with an `index.rocket.md`.
|
||||
|
||||
```bash
|
||||
mkdir docs/guides
|
||||
```
|
||||
|
||||
👉 `docs/guides/index.md`
|
||||
👉 `docs/guides/index.rocket.md`
|
||||
|
||||
```md
|
||||
# Guides
|
||||
@@ -42,13 +50,13 @@ It might be more practical to stay below 5 sections.
|
||||
|
||||
Often each section will have multiple categories.
|
||||
|
||||
To create a category you need to create a folder with an `index.md`.
|
||||
To create a category you need to create a folder with an `index.rocket.md`.
|
||||
|
||||
```bash
|
||||
mkdir docs/guides/first-pages/
|
||||
```
|
||||
|
||||
👉 `docs/guides/first-pages/index.md`
|
||||
👉 `docs/guides/first-pages/index.rocket.md`
|
||||
|
||||
```md
|
||||
# First Pages
|
||||
@@ -56,10 +64,10 @@ mkdir docs/guides/first-pages/
|
||||
|
||||
## Adding a Page to a Category
|
||||
|
||||
👉 `docs/guides/first-pages/getting-started.md`
|
||||
👉 `docs/guides/first-pages/getting-started.rocket.md`
|
||||
|
||||
```md
|
||||
# First Pages >> Getting Started
|
||||
# Getting Started
|
||||
|
||||
This is how you get started.
|
||||
```
|
||||
@@ -1,22 +1,27 @@
|
||||
# First Pages >> Use JavaScript || 40
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/10--first-pages/30--use-javascript.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Use JavaScript
|
||||
|
||||
If you would like to add JavaScript to a page, you can do it inline using the `script` markdown directive. The script you write runs on the page as a module.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
~~~markdown
|
||||
````markdown
|
||||
```js script
|
||||
const message = 'Hello, World!';
|
||||
console.log(message);
|
||||
```
|
||||
~~~
|
||||
<!-- prettier-ignore-end -->
|
||||
````
|
||||
|
||||
Adding the above will log `Hello, World!` to the console without adding a global `message` variable.
|
||||
|
||||
This can be useful for importing web components and using them in Markdown. Imagine you had some `magic-reveal` element that you wanted to use on a page:
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
~~~markdown
|
||||
````markdown
|
||||
```js script
|
||||
import 'magic-reveal/magic-reveal.js';
|
||||
```
|
||||
@@ -29,21 +34,16 @@ I can **still** use Markdown as long as there is an empty line
|
||||
between the opening/closing tags and my text.
|
||||
|
||||
</magic-reveal>
|
||||
~~~
|
||||
<!-- prettier-ignore-end -->
|
||||
````
|
||||
|
||||
## Component Story Format
|
||||
|
||||
You can also add storybook-style CSF (v2 only) stories to a page using `js story` or `js preview-story`, just make sure to import `html` from `@mdjs/mdjs-preview` instead of from `lit` or `lit-html`.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
~~~markdown
|
||||
````markdown
|
||||
```js story
|
||||
import { html } from '@mdjs/mdjs-preview';
|
||||
|
||||
export const StoryPreview = () => html`
|
||||
<p>Use stories in Rocket!</p>
|
||||
`;
|
||||
export const StoryPreview = () => html` <p>Use stories in Rocket!</p> `;
|
||||
```
|
||||
~~~
|
||||
<!-- prettier-ignore-end -->
|
||||
````
|
||||
9
docs/10--guides/10--first-pages/index.rocket.js
Normal file
@@ -0,0 +1,9 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/10--first-pages/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () => html`<h1>First Pages</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,4 +1,12 @@
|
||||
# Presets >> Getting Started || 10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/20--presets/10--getting-started.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Getting Started
|
||||
|
||||
Presets are partial rocket configs that combine any number of plugins to add specific features. Rocket is built on these presets, like `rocketLaunch`, `rocketBlog`, and `rocketSearch`
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
# Presets >> Overriding ||20
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/20--presets/20--overriding.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Overriding
|
||||
|
||||
All loaded presets will be combined but you can override each file.
|
||||
|
||||
11
docs/10--guides/20--presets/index.rocket.js
Normal file
@@ -0,0 +1,11 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/20--presets/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () => html`
|
||||
<h1>Presets</h1>
|
||||
<meta name="menu:exclude" content="true" />
|
||||
`;
|
||||
@@ -1,4 +1,12 @@
|
||||
# Configuration >> Getting Started ||10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/30--configuration/10--getting-started.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Getting Started
|
||||
|
||||
The main config file is `rocket.config.js` or `rocket.config.mjs`.
|
||||
|
||||
@@ -22,17 +30,17 @@ The Plugins Manager helps you register and execute your plugins across the vario
|
||||
|
||||
If you want to add a plugin to the Markdown processing you can use `setupUnifiedPlugins`.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
import emoji from 'remark-emoji';
|
||||
import { addPlugin } from 'plugins-manager';
|
||||
|
||||
/** @type {Partial<import('@rocket/cli').RocketCliOptions>} */
|
||||
const config = {
|
||||
export default ({
|
||||
setupUnifiedPlugins: [addPlugin({ location: 'markdown', name: 'emoji', plugin: emoji })],
|
||||
};
|
||||
|
||||
export default config;
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
For plugins that should handle the Markdown <abbr title="Abstract Syntax Tree">AST</abbr> you should use `addPlugin({ location: 'markdown', name: 'my-plugin', plugin: MyPlugin})`. <br>
|
||||
While for the rehype AST you should use `addPlugin({ location: 'remark2rehype', name: 'my-plugin', plugin: MyPlugin})`.
|
||||
9
docs/10--guides/30--configuration/index.rocket.js
Normal file
@@ -0,0 +1,9 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/30--configuration/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () => html`<h1>Configuration</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,4 +1,12 @@
|
||||
# Go Live >> Overview || 10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/40--go-live/10--overview.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Overview
|
||||
|
||||
A few things are usually needed before going live "for real".
|
||||
|
||||
@@ -42,11 +50,13 @@ eleventyExcludeFromCollections: true
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
{% raw %}{% for page in collections.all %}
|
||||
{%- if page.url !== '/404.html' -%}
|
||||
<url>
|
||||
<loc>{{ rocketConfig.absoluteBaseUrl }}{{ page.url | url }}</loc>
|
||||
<lastmod>{{ page.date.toISOString() }}</lastmod>
|
||||
<changefreq>{{ page.data.changeFreq if page.data.changeFreq else "monthly" }}</changefreq>
|
||||
</url>
|
||||
{%- endif -%}
|
||||
{% endfor %}{% endraw %}
|
||||
</urlset>
|
||||
```
|
||||
@@ -1,12 +1,18 @@
|
||||
# Go Live >> Social Media || 20
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/40--go-live/20--social-media.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Social Media
|
||||
|
||||
Having a nice preview image for social media can be very helpful.
|
||||
For that reason Rocket creates those automatically with the title, parent title, section and your logo.
|
||||
|
||||
It will look like this but with your logo:
|
||||
|
||||
<img src="{{ socialMediaImage | url }}" width="1200" height="630" alt="Social Media Image of this page" style="border: 1px solid #000" />
|
||||
|
||||
There are multiple ways you can modify it.
|
||||
|
||||
Note: If your logo has an `<?xml>` tag it will throw an error as it will be inlined into this SVG and nested XML tags are not allowed.
|
||||
9
docs/10--guides/40--go-live/index.rocket.js
Normal file
@@ -0,0 +1,9 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/40--go-live/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () => html`<h1>Go Live</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,9 +1,14 @@
|
||||
---
|
||||
title: Learning Rocket
|
||||
eleventyNavigation:
|
||||
key: Guides
|
||||
order: 10
|
||||
---
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '10--guides/index.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Learning Rocket
|
||||
|
||||
<meta name="menu:link.text" content="Guides">
|
||||
|
||||
Rocket helps you generate static pages from Markdown files while giving you the flexibility to sprinkle in some JavaScript where needed.
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
# Configuration >> Overview || 10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/10--configuration/10--overview.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Overview
|
||||
|
||||
The configuration file is `rocket.config.js` or `rocket.config.mjs`.
|
||||
|
||||
@@ -7,6 +15,7 @@ The config files consist of the following parts:
|
||||
```js
|
||||
import { rocketLaunch } from '@rocket/launch';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
presets: [rocketLaunch()],
|
||||
emptyOutputDir: true,
|
||||
@@ -19,25 +28,17 @@ Rocket is primarily build around plugins for each of its systems.
|
||||
New plugins can be added and all default plugins can be adjusted or even removed by using the following functions.
|
||||
|
||||
```js
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
// add remark/unified plugin to the Markdown processing (e.g. enable special code blocks)
|
||||
setupUnifiedPlugins: [],
|
||||
|
||||
// add a rollup plugins to the web dev server (will be wrapped with @web/dev-server-rollup) AND the rollup build (e.g. enable json importing)
|
||||
setupDevAndBuildPlugins: [],
|
||||
setupDevServerAndBuildPlugins: [],
|
||||
|
||||
// add a plugin to the web dev server (will not be wrapped) (e.g. esbuild for TypeScript)
|
||||
setupDevPlugins: [],
|
||||
setupDevServerPlugins: [],
|
||||
|
||||
// add a plugin to the rollup build (e.g. optimization steps)
|
||||
setupBuildPlugins: [],
|
||||
|
||||
// add a plugin to Eleventy (e.g. a filter packs)
|
||||
setupEleventyPlugins: [],
|
||||
|
||||
// add a computedConfig to Eleventy (e.g. site wide default variables like socialMediaImage)
|
||||
setupEleventyComputedConfig: [],
|
||||
|
||||
// add a plugin to the cli (e.g. a new command like "rocket my-command")
|
||||
setupCliPlugins: [],
|
||||
};
|
||||
@@ -53,20 +54,18 @@ import data from './data.json';
|
||||
|
||||
You can accomplish this with Rollup and dev server plugins. Make sure to add both the dev-server plugin as well as the Rollup plugin, so that the behaviors is the same during development as it is in the production build.
|
||||
|
||||
For these cases you can use `setupDevAndBuildPlugins`, which will automatically add the plugin for you to both Rollup and dev-server:
|
||||
For these cases you can use `setupDevServerAndBuildPlugins`, which will automatically add the plugin for you to both Rollup and dev-server:
|
||||
|
||||
```js
|
||||
import json from '@rollup/plugin-json';
|
||||
import { addPlugin } from 'plugins-manager';
|
||||
|
||||
/** @type {import('@rocket/cli').RocketCliOptions} */
|
||||
const config = {
|
||||
setupDevAndBuildPlugins: [
|
||||
export default {
|
||||
setupDevServerAndBuildPlugins: [
|
||||
addPlugin({ name: 'json', plugin: json, location: 'top', options: { my: 'settings' } }),
|
||||
],
|
||||
};
|
||||
|
||||
export default config;
|
||||
```
|
||||
|
||||
This will add the Rollup plugin `json` with the id `json` at the top of the plugin list of Rollup and the dev server. It needs to be at the top so further plugins down the line can work with JSON imports.
|
||||
@@ -80,21 +79,27 @@ All plugins which are either default or are added via a preset can still be adju
|
||||
import { adjustPluginOptions } from 'plugins-manager';
|
||||
|
||||
/** @type {import('@rocket/cli').RocketCliOptions} */
|
||||
const config = {
|
||||
setupDevAndBuildPlugins: [adjustPluginOptions('json', { my: 'overwrite settings' })],
|
||||
export default {
|
||||
setupDevServerAndBuildPlugins: [adjustPluginOptions('json', { my: 'overwrite settings' })],
|
||||
};
|
||||
|
||||
export default config;
|
||||
```
|
||||
|
||||
## Lifecycle
|
||||
## Advanced
|
||||
|
||||
You can hook into the rocket lifecycle by specifying a function for `before11ty`. This function runs before 11ty calls it's write method. If it is an async function, Rocket will await it's promise.
|
||||
Sometimes you need even more control over specific settings.
|
||||
|
||||
### Rollup
|
||||
|
||||
For example if you wanna add an `acron` plugin to rollup
|
||||
|
||||
```js
|
||||
import { importAssertions } from 'acorn-import-assertions';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
async before11ty() {
|
||||
await copyDataFiles();
|
||||
},
|
||||
rollup: config => ({
|
||||
...config,
|
||||
acornInjectPlugins: [importAssertions],
|
||||
}),
|
||||
};
|
||||
```
|
||||
@@ -1,4 +1,12 @@
|
||||
# Configuration >> Service Worker ||30
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/10--configuration/20--service-worker.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Service Worker
|
||||
|
||||
Rocket does come with a default service worker that will
|
||||
|
||||
@@ -13,6 +21,7 @@ Changing the service worker file name can be quite a hassle so you can adjust ge
|
||||
👉 `rocket.config.js`
|
||||
|
||||
```js
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
serviceWorkerName: 'my-service-worker-name.js',
|
||||
};
|
||||
@@ -1,4 +1,12 @@
|
||||
# Configuration >> Images ||40
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/10--configuration/30--images.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Images
|
||||
|
||||
Rocket does handle content images automatically by
|
||||
|
||||
@@ -88,8 +96,10 @@ The default preset for regular markdown content is available as `responsive`.
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
export default {
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
imagePresets: {
|
||||
responsive: {
|
||||
widths: [300, 820],
|
||||
@@ -97,8 +107,9 @@ export default {
|
||||
sizes: '(min-width: 1024px) 820px, calc(100vw - 20px)',
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
## Ignoring Images
|
||||
|
||||
@@ -148,8 +159,10 @@ For this example we want to also ignore `.jpeg` files.
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
export default {
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
imagePresets: {
|
||||
responsive: {
|
||||
// ...
|
||||
@@ -157,8 +170,9 @@ export default {
|
||||
src.endsWith('.jpeg') || src.endsWith('svg') || src.includes('rocket-unresponsive.'),
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
With that setting we get the following behavior
|
||||
|
||||
@@ -180,8 +194,10 @@ becomes
|
||||
|
||||
You can add your own image preset like so
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
export default {
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
imagePresets: {
|
||||
'my-image-preset': {
|
||||
widths: [30, 60],
|
||||
@@ -189,8 +205,9 @@ export default {
|
||||
sizes: '(min-width: 1024px) 30px, 60px',
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
Once that `imagePreset` is defined you can use it by adding it to any `img` tag.
|
||||
|
||||
@@ -232,15 +249,18 @@ If you want to add `webp` (or replace `avif` with it) you can do so by setting t
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
export default {
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
imagePresets: {
|
||||
responsive: {
|
||||
formats: ['avif', 'webp', 'jpeg'],
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
## Default widths
|
||||
|
||||
@@ -262,16 +282,19 @@ If you want to add more widths you can add them to `widths`.
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
export default {
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
imagePresets: {
|
||||
responsive: {
|
||||
widths: [300, 600, 900, 1200, 1640],
|
||||
sizes: '(min-width: 1024px) 820px, calc(100vw - 20px)',
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<inline-notification type="tip">
|
||||
|
||||
10
docs/20--docs/10--configuration/index.rocket.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/10--configuration/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () =>
|
||||
html`<h1>Configuration</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,4 +1,12 @@
|
||||
# Presets >> Joining Blocks || 10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/10--joining-blocks.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Joining Blocks
|
||||
|
||||
The template system allows for a very granular control of how individual parts will be merged, overwritten or reorderd.
|
||||
|
||||
10
docs/20--docs/20--presets/20--launch/index.rocket.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/20--launch/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () =>
|
||||
html`<h1>Launch</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,14 +1,16 @@
|
||||
---
|
||||
alerts:
|
||||
- type: tip
|
||||
content: Take a tip from me
|
||||
- type: warning
|
||||
content: Be *sure* about this...
|
||||
- type: danger
|
||||
content: You **really** shouldn't!
|
||||
---
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/20--launch/overview.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Presets >> Launch || 20
|
||||
```js server
|
||||
import { html } from 'lit-html';
|
||||
```
|
||||
|
||||
# Overview
|
||||
|
||||
Rocket comes with a preset you will love. Simple, responsive and behaving like native, it sure is going to be a hit among your users.
|
||||
|
||||
@@ -16,7 +18,7 @@ Rocket comes with a preset you will love. Simple, responsive and behaving like n
|
||||
|
||||
Install `@rocket/launch` from the NPM repository using your favourite package manager.
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npm i @rocket/launch
|
||||
@@ -39,6 +41,7 @@ pnpm add @rocket/launch
|
||||
```js
|
||||
import { rocketLaunch } from '@rocket/launch';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
presets: [rocketLaunch()],
|
||||
};
|
||||
@@ -46,11 +49,7 @@ export default {
|
||||
|
||||
## Data
|
||||
|
||||
The launch preset configures [11ty data](https://www.11ty.dev/docs/data/) using a few overridable files:
|
||||
|
||||
- `site.cjs`: Responsible for most of the site-wide config
|
||||
- `rocketLaunch.json`: configures the homepage layout
|
||||
- `footer.json`: Configures the content of the footer
|
||||
You can define your own data for the available Layouts.
|
||||
|
||||
## Inline Notification
|
||||
|
||||
@@ -62,13 +61,11 @@ Launch ships with `<inline-notification>`, a custom element that applies some st
|
||||
|
||||
To add an inline notification you need to remember to import the element definition:
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
~~~markdown
|
||||
````md
|
||||
```js script
|
||||
import '@rocket/launch/inline-notification/inline-notification.js';
|
||||
```
|
||||
~~~
|
||||
<!-- prettier-ignore-end -->
|
||||
````
|
||||
|
||||
Then you can add your notification to the page. If you want to write the notification's content using markdown, just pad the opening and closing tags with empty lines.
|
||||
|
||||
@@ -91,35 +88,51 @@ There are three varieties of `<inline-notification>`, "tip", "warning", and "dan
|
||||
}
|
||||
</style>
|
||||
|
||||
<code-tabs id="inline-notifications" default-tab="tip">
|
||||
<inline-notification type="tip">
|
||||
|
||||
{%for alert in alerts%}
|
||||
Take a tip from me
|
||||
|
||||
<code-tab data-label="{{ alert.type }}" data-id="{{ alert.type }}" no-copy>
|
||||
</inline-notification>
|
||||
|
||||
```md copy
|
||||
<inline-notification type="{{ alert.type }}">
|
||||
```md
|
||||
<inline-notification type="tip">
|
||||
|
||||
{{ alert.content | safe }}
|
||||
Take a tip from me
|
||||
|
||||
</inline-notification>
|
||||
```
|
||||
|
||||
<inline-notification type="{{ alert.type }}">
|
||||
<inline-notification type="warning">
|
||||
|
||||
{{ alert.content | safe }}
|
||||
Be _sure_ about this...
|
||||
|
||||
</inline-notification>
|
||||
|
||||
</code-tab>
|
||||
```md
|
||||
<inline-notification type="warning">
|
||||
|
||||
{%endfor%}
|
||||
Be _sure_ about this...
|
||||
|
||||
</code-tabs>
|
||||
</inline-notification>
|
||||
```
|
||||
|
||||
<inline-notification type="danger">
|
||||
|
||||
You **really** shouldn't!
|
||||
|
||||
</inline-notification>
|
||||
|
||||
```md
|
||||
<inline-notification type="danger">
|
||||
|
||||
You **really** shouldn't!
|
||||
|
||||
</inline-notification>
|
||||
```
|
||||
|
||||
### Modify the Title
|
||||
|
||||
The notification title defautls to it's type. You can write a custom title with the `title` attribute.
|
||||
The notification title defaults to it's type. You can write a custom title with the `title` attribute.
|
||||
|
||||
<inline-notification type="tip" title="success">
|
||||
|
||||
10
docs/20--docs/20--presets/30--search/index.rocket.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/30--search/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () =>
|
||||
html`<h1>Search</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
42
docs/20--docs/20--presets/30--search/overview.rocket.md
Normal file
@@ -0,0 +1,42 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/30--search/overview.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Overview
|
||||
|
||||
Add a search for all your static content.
|
||||
|
||||
## Installation
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npm i @rocket/search
|
||||
```
|
||||
|
||||
```bash tab yarn
|
||||
yarn add @rocket/search
|
||||
```
|
||||
|
||||
```bash tab pnpm
|
||||
pnpm add @rocket/search
|
||||
```
|
||||
|
||||
</code-tabs>
|
||||
|
||||
## Usage
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
```js
|
||||
import { rocketSearch } from '@rocket/search';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
presets: [rocketSearch()],
|
||||
};
|
||||
```
|
||||
42
docs/20--docs/20--presets/40--blog.rocket.md
Normal file
@@ -0,0 +1,42 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/40--blog.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Blog
|
||||
|
||||
Enable writing blog posts within your Rocket site.
|
||||
|
||||
## Installation
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm" align="end">
|
||||
|
||||
```bash tab npm
|
||||
npm i @rocket/blog
|
||||
```
|
||||
|
||||
```bash tab yarn
|
||||
yarn add @rocket/blog
|
||||
```
|
||||
|
||||
```bash tab pnpm
|
||||
pnpm add @rocket/blog
|
||||
```
|
||||
|
||||
</code-tabs>
|
||||
|
||||
## Usage
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
```js
|
||||
import { rocketBlog } from '@rocket/blog';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default {
|
||||
presets: [rocketBlog()],
|
||||
};
|
||||
```
|
||||
10
docs/20--docs/20--presets/index.rocket.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/20--presets/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () =>
|
||||
html`<h1>Presets</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,4 +1,12 @@
|
||||
# Markdown JavaScript >> Overview || 10
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/30--markdown-javascript/10--overview.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Overview
|
||||
|
||||
```js script
|
||||
import '@mdjs/mdjs-story/define';
|
||||
@@ -123,6 +131,68 @@ export const header = () => {
|
||||
};
|
||||
```
|
||||
|
||||
```js story-code
|
||||
// not defined for android
|
||||
```
|
||||
|
||||
```js story-code
|
||||
// not defined for ios
|
||||
```
|
||||
|
||||
#### Story Code
|
||||
|
||||
If your preview is followed by a code blocks marked as `story-code` then those will be shown when switching between multiple platforms
|
||||
|
||||
````md
|
||||
```js preview-story
|
||||
// will be visible when platform web is selected
|
||||
export const JsPreviewStory = () => html` <demo-wc-card>JS Preview Story</demo-wc-card> `;
|
||||
```
|
||||
|
||||
```xml story-code
|
||||
<!-- will be visible when platform android is selected -->
|
||||
<Button
|
||||
android:id="@+id/demoWcCard"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Android Code"
|
||||
style="@style/Widget.FooComponents.Demo.Wc.Card"
|
||||
/>
|
||||
```
|
||||
|
||||
```swift story-code
|
||||
// will be visible when platform ios is selected
|
||||
import DemoWc.Card
|
||||
|
||||
let card = DemoWcButton()
|
||||
```
|
||||
````
|
||||
|
||||
See it in action by opening up the code block and switching platforms
|
||||
|
||||
```js preview-story
|
||||
// will be visible when platform web is selected
|
||||
export const JsPreviewStory = () => html` <demo-wc-card>JS Preview Story</demo-wc-card> `;
|
||||
```
|
||||
|
||||
```xml story-code
|
||||
<!-- will be visible when platform android is selected -->
|
||||
<Button
|
||||
android:id="@+id/demoWcCard"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Android Code"
|
||||
style="@style/Widget.FooComponents.Demo.Wc.Card"
|
||||
/>
|
||||
```
|
||||
|
||||
```swift story-code
|
||||
// will be visible when platform ios is selected
|
||||
import DemoWc.Card
|
||||
|
||||
let card = DemoWcButton()
|
||||
```
|
||||
|
||||
## Supported Systems
|
||||
|
||||
### Storybook
|
||||
@@ -1,4 +1,12 @@
|
||||
# Markdown JavaScript >> Preview ||20
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/30--markdown-javascript/20--preview.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Preview
|
||||
|
||||
You can showcase live running code by annotating a code block with `js preview-story`.
|
||||
|
||||
@@ -40,6 +48,68 @@ will result in
|
||||
export const foo = () => html` <demo-element></demo-element> `;
|
||||
```
|
||||
|
||||
```js story-code
|
||||
// not defined for android
|
||||
```
|
||||
|
||||
```js story-code
|
||||
// not defined for ios
|
||||
```
|
||||
|
||||
#### Story Code
|
||||
|
||||
If your preview is followed by a code blocks marked as `story-code` then those will be shown when switching between multiple platforms
|
||||
|
||||
````md
|
||||
```js preview-story
|
||||
// will be visible when platform web is selected
|
||||
export const JsPreviewStory = () => html` <demo-element></demo-element> `;
|
||||
```
|
||||
|
||||
```xml story-code
|
||||
<!-- will be visible when platform android is selected -->
|
||||
<Button
|
||||
android:id="@+id/demoElement"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Android Code"
|
||||
style="@style/Widget.Demo.Element"
|
||||
/>
|
||||
```
|
||||
|
||||
```swift story-code
|
||||
// will be visible when platform ios is selected
|
||||
import Demo.Element
|
||||
|
||||
let card = DemoElement()
|
||||
```
|
||||
````
|
||||
|
||||
See it in action by opening up the code block and switching platforms
|
||||
|
||||
```js preview-story
|
||||
// will be visible when platform web is selected
|
||||
export const JsPreviewStory = () => html` <demo-element></demo-element> `;
|
||||
```
|
||||
|
||||
```xml story-code
|
||||
<!-- will be visible when platform android is selected -->
|
||||
<Button
|
||||
android:id="@+id/demoElement"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Android Code"
|
||||
style="@style/Widget.Demo.Element"
|
||||
/>
|
||||
```
|
||||
|
||||
```swift story-code
|
||||
// will be visible when platform ios is selected
|
||||
import Demo.Element
|
||||
|
||||
let card = DemoElement()
|
||||
```
|
||||
|
||||
## HTML Story
|
||||
|
||||
````md
|
||||
@@ -72,15 +142,18 @@ excludeFromSearch: true
|
||||
|
||||
Once you have that you need to configure it for the story renderer by setting it in your `rocket.config.js`.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
export default {
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
setupUnifiedPlugins: [
|
||||
adjustPluginOptions('mdjsSetupCode', {
|
||||
simulationSettings: { simulatorUrl: '/simulator/' },
|
||||
}),
|
||||
],
|
||||
};
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<inline-notification type="tip">
|
||||
|
||||
31
docs/20--docs/30--markdown-javascript/30--story.rocket.md
Normal file
@@ -0,0 +1,31 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/30--markdown-javascript/30--story.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Story
|
||||
|
||||
You can showcase live running code by annotating a code block with `js story`.
|
||||
|
||||
```js script
|
||||
import { html } from '@mdjs/mdjs-story';
|
||||
```
|
||||
|
||||
````md
|
||||
```js script
|
||||
import { html } from '@mdjs/mdjs-story';
|
||||
```
|
||||
|
||||
```js story
|
||||
export const foo = () => html` <p>my html</p> `;
|
||||
```
|
||||
````
|
||||
|
||||
will result in
|
||||
|
||||
```js story
|
||||
export const foo = () => html` <p>my html</p> `;
|
||||
```
|
||||
10
docs/20--docs/30--markdown-javascript/index.rocket.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/30--markdown-javascript/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () =>
|
||||
html`<h1>Markdown Javascript</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
391
docs/20--docs/50--tools/10--plugins-manager.rocket.md
Normal file
@@ -0,0 +1,391 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/50--tools/10--plugins-manager.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Plugins Manager
|
||||
|
||||
The Plugins Manager replaces the specific registration/execution (with options) in a given plugin system by an intend to use a plugin (with these options).
|
||||
This allows your users to adjust the options before actually applying the plugins.
|
||||
|
||||
## Setup
|
||||
|
||||
1. Install npm package
|
||||
```bash
|
||||
npm i plugins-manager
|
||||
```
|
||||
2. Change your public API from an array of plugin "instances" to an array of setup functions
|
||||
```diff
|
||||
import myPlugin from 'my-plugin';
|
||||
+ import { addPlugin } from 'plugins-manager';
|
||||
export default {
|
||||
- plugins: [myPlugin],
|
||||
+ setupPlugins: [addPlugin(myPlugin)]
|
||||
}
|
||||
```
|
||||
3. Convert setup function to plugins
|
||||
|
||||
```js
|
||||
import { applyPlugins } from 'plugins-manager';
|
||||
|
||||
const finalConfig = applyPlugins(config); // "converts" setupPlugins to plugins
|
||||
|
||||
// work with plugins or pass it on to another tool
|
||||
const bundle = await rollup(finalConfig);
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
As you users in most cases you will need to either add or adjust a given plugin in a config file.
|
||||
|
||||
👉 `my-tool.config.js`
|
||||
|
||||
```js
|
||||
import { addPlugin, adjustPluginOptions } from 'plugins-manager';
|
||||
import json from '@rollup/plugin-json';
|
||||
import { nodeResolve } from '@rollup/plugin-node-resolve';
|
||||
|
||||
export default {
|
||||
setupPlugins: [
|
||||
// add a new plugin with optional plugin options
|
||||
addPlugin(json, {
|
||||
/* ... */
|
||||
}),
|
||||
|
||||
// adjust the options of a plugin that is already registered
|
||||
adjustPluginOptions(nodeResolve, {
|
||||
/* ... */
|
||||
}),
|
||||
],
|
||||
};
|
||||
```
|
||||
|
||||
## Plugins can be functions or classes
|
||||
|
||||
### Function Plugins
|
||||
|
||||
```js
|
||||
function myPlugin({ lastName: 'initial-second' }) {
|
||||
// ...
|
||||
}
|
||||
|
||||
export default {
|
||||
setupPlugins: [addPlugin(myPlugin)],
|
||||
};
|
||||
|
||||
// function parameters are type safe
|
||||
addPlugin(myPlugin, { lastName: 'new name' }); // ts ok
|
||||
addPlugin(myPlugin, { otherProp: 'new name' }); // ts error
|
||||
```
|
||||
|
||||
### Class Plugins
|
||||
|
||||
The options are passed to the constructor.
|
||||
|
||||
```js
|
||||
/**
|
||||
* @typedef {object} MyClassOptions
|
||||
* @property {string} lastName
|
||||
*/
|
||||
|
||||
class MyClass {
|
||||
/** @type {MyClassOptions} */
|
||||
options = {
|
||||
lastName: 'initial-second',
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {Partial<MyClassOptions>} options
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
this.options = { ...this.options, ...options };
|
||||
}
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
export default {
|
||||
setupPlugins: [addPlugin(MyClass)],
|
||||
};
|
||||
|
||||
// constructor parameters are type safe
|
||||
addPlugin(MyClass, { lastName: 'new name' }); // ts ok
|
||||
addPlugin(MyClass, { otherProp: 'new name' }); // ts error
|
||||
```
|
||||
|
||||
## Problem
|
||||
|
||||
Many plugin systems require you to either execute a plugin function like in `rollup`.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
import json from '@rollup/plugin-json';
|
||||
|
||||
/** @type {import('rocket/cli').RocketCliConfig} */
|
||||
export default ({
|
||||
plugins: [json({ preferConst: true })],
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
or add it in a special way like in `eleventy`
|
||||
|
||||
```js
|
||||
const pluginSyntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginSyntaxHighlight, { templateFormats: ['md'] });
|
||||
};
|
||||
```
|
||||
|
||||
or `unified/remark`.
|
||||
|
||||
```js
|
||||
var unified = require('unified');
|
||||
var markdown = require('remark-parse');
|
||||
var toc = require('remark-toc');
|
||||
|
||||
var processor = unified().use(markdown).use(toc, { maxDepth: 2 });
|
||||
// ...
|
||||
```
|
||||
|
||||
## Problem Statement
|
||||
|
||||
> Executing or adding a plugin in a special way is a one time process. You can not transparently later change the options of the given plugin.
|
||||
|
||||
This means if you wish to define default plugins and allow your user to override all of the settings it's "impossible".
|
||||
|
||||
## Solution
|
||||
|
||||
The plugins manager lets you orchestrate a set of "meta plugins" which are defined by
|
||||
|
||||
- plugin (class or function)
|
||||
- it's options
|
||||
|
||||
```js
|
||||
import beep from '@rollup/plugin-beep';
|
||||
import url from '@rollup/plugin-url';
|
||||
|
||||
let metaPlugins = [{ plugin: beep }, { plugin: url, options: { limit: 10000 } }];
|
||||
```
|
||||
|
||||
This array can be modified by adding/removing or adjusting options.
|
||||
|
||||
```js
|
||||
// raw add
|
||||
metaPlugins.push({
|
||||
// another plugin
|
||||
});
|
||||
|
||||
// raw adjust
|
||||
metaPlugins[1].options.limit = 20000;
|
||||
```
|
||||
|
||||
And then you can convert it into the specific format that can be assigned to your system in question.
|
||||
|
||||
```js
|
||||
// execute plugins for rollup
|
||||
const plugins = metaPlugins.map(pluginObj => {
|
||||
if (pluginObj.options) {
|
||||
return pluginObj.plugin(pluginObj.options);
|
||||
} else {
|
||||
return pluginObj.plugin();
|
||||
}
|
||||
});
|
||||
|
||||
// rollup.config.js
|
||||
export default {
|
||||
plugins,
|
||||
};
|
||||
```
|
||||
|
||||
### Adding Helpers
|
||||
|
||||
Doing array manipulations is kinda error-prone so we encourage to use an array of setup function. Where as each setup function can either add a new plugin (with a unique name) or adjust an already existing plugin.
|
||||
|
||||
```js
|
||||
import { addPlugin, adjustPluginOptions } from 'plugins-manager';
|
||||
|
||||
const systemSetupFunctions = [addPlugin(first), addPlugin(second)];
|
||||
const userSetupFunctions = [adjustPluginOptions(first, { my: 'options' })];
|
||||
```
|
||||
|
||||
Arrays of functions can by merged like so
|
||||
|
||||
```js
|
||||
const finalSetupFunctions = [...systemSetupFunctions, ...userSetupFunctions];
|
||||
```
|
||||
|
||||
and then converted to the final output.
|
||||
|
||||
```js
|
||||
import { applyPlugins } from 'plugins-manager';
|
||||
|
||||
const plugins = applyPlugins(finalSetupFunctions, metaPlugins);
|
||||
```
|
||||
|
||||
## Adding a Plugin
|
||||
|
||||
This makes sure that
|
||||
|
||||
- the name is unique
|
||||
- you can add at at `top`, `bottom` and `after/before` a given other plugin
|
||||
|
||||
By default it adds at the bottom.
|
||||
|
||||
```js
|
||||
import json from '@rollup/plugin-json';
|
||||
import { addPlugin } from 'plugins-manager';
|
||||
|
||||
const userSetupFunctions = [addPlugin(json, { preferConst: true })];
|
||||
```
|
||||
|
||||
Example usage:
|
||||
|
||||
```js
|
||||
addPlugin(json); // Add at the bottom (default)
|
||||
addPlugin(json, {}, { location: 'top' }); // Add at the top/beginning of the array
|
||||
addPlugin(json, {}, { location: beep }); // Add after (default) plugin 'beep'
|
||||
addPlugin(json, {}, { location: beep, how: 'before' }); // Add before plugin 'beep'
|
||||
```
|
||||
|
||||
This is type safe and typescript will throw an error if you pass the wrong type.
|
||||
|
||||
```js
|
||||
function myPlugin({ myFlag = false } = {}) {
|
||||
// ...
|
||||
}
|
||||
|
||||
addPlugin(myPlugin, { myFlag: true }); // ts ok
|
||||
addPlugin(myPlugin, { notExisting: true }); // ts error
|
||||
```
|
||||
|
||||
## Adjusting Plugin Options
|
||||
|
||||
Adjusting options means to either
|
||||
|
||||
- flatly merge objects (e.g. only the first level will be preserved)
|
||||
- calling a function to do the merge yourself
|
||||
- setting the raw value (if not an object or function)
|
||||
- you need to have a reference to the plugin (which is used to auto complete the available options via typescript)
|
||||
|
||||
```js
|
||||
import json from '@rollup/plugin-json';
|
||||
import { adjustPluginOptions } from 'plugins-manager';
|
||||
|
||||
const userSetupFunctions = [
|
||||
adjustPluginOptions(json, { preferConst: false, anotherOption: 'format' }),
|
||||
];
|
||||
```
|
||||
|
||||
Example usage:
|
||||
|
||||
```js
|
||||
// given
|
||||
addPlugin(json, {
|
||||
other: {
|
||||
nested: 'other.nested',
|
||||
nested2: 'other.nested2',
|
||||
},
|
||||
main: true,
|
||||
});
|
||||
|
||||
// merge objects flately
|
||||
adjustPluginOptions(json, { other: { nested: '--overwritten--' } });
|
||||
// resulting options = { other: { nested: '--overwritten--' }, main: true }
|
||||
// NOTE: nested2 is removed
|
||||
|
||||
// merge via function
|
||||
adjustPluginOptions(json, config => ({ other: { ...config.other, nested: '--overwritten--' } }));
|
||||
// resulting options = { other: { nested: '--overwritten--', nested2: 'other.nested2' }, main: true }
|
||||
|
||||
// merge via function to override full options
|
||||
adjustPluginOptions(json, config => ({ only: 'this' }));
|
||||
// resulting options = { only: 'this' }
|
||||
|
||||
// setting a raw value
|
||||
adjustPluginOptions(json, false);
|
||||
// resulting options = false
|
||||
```
|
||||
|
||||
This is type safe and typescript will throw an error if you pass the wrong type.
|
||||
|
||||
```js
|
||||
function myPlugin({ myFlag = false } = {}) {
|
||||
// ...
|
||||
}
|
||||
|
||||
adjustPluginOptions(myPlugin, { myFlag: true }); // ts ok
|
||||
adjustPluginOptions(myPlugin, { notExisting: true }); // ts error
|
||||
```
|
||||
|
||||
## Remove Plugin
|
||||
|
||||
Sometimes you would like to remove a default plugin from the config.
|
||||
|
||||
```js
|
||||
export default {
|
||||
setupPlugins: [removePlugin(json)],
|
||||
};
|
||||
```
|
||||
|
||||
## Converting metaPlugins to an Actual Plugin
|
||||
|
||||
To execute all setup function you can use this little helper
|
||||
|
||||
```js
|
||||
const finalMetaPlugins = executeSetupFunctions(finalSetupFunctions, metaPlugins);
|
||||
```
|
||||
|
||||
And then you can convert it into your format.
|
||||
For Rollup you would execute the plugin with the options if there are any.
|
||||
|
||||
```js
|
||||
const plugins = finalMetaPlugins.map(pluginObj => {
|
||||
if (pluginObj.options) {
|
||||
return pluginObj.plugin(pluginObj.options);
|
||||
} else {
|
||||
return pluginObj.plugin();
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**Examples**
|
||||
|
||||
Rollup has a more specific helper that handles
|
||||
|
||||
- `config.setupPlugins`
|
||||
|
||||
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins`
|
||||
|
||||
```js
|
||||
import { applyPlugins } from 'plugins-manager';
|
||||
|
||||
const finalConfig = applyPlugins(currentConfig, defaultMetaPlugins);
|
||||
```
|
||||
|
||||
Eleventy
|
||||
|
||||
```js
|
||||
module.exports = eleventyConfig => {
|
||||
for (const pluginObj of metaPlugins) {
|
||||
if (pluginObj.options) {
|
||||
eleventyConfig.addPlugin(pluginObj.plugin, pluginObj.options);
|
||||
} else {
|
||||
eleventyConfig.addPlugin(pluginObj.plugin);
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
Unified/Remark
|
||||
|
||||
```js
|
||||
const parser = unified();
|
||||
|
||||
for (const pluginObj of metaPlugins) {
|
||||
parser.use(pluginObj.plugin, pluginObj.options);
|
||||
}
|
||||
```
|
||||
@@ -1,4 +1,12 @@
|
||||
# Tools >> Rollup Config ||20
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/50--tools/20--rollup-config.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Rollup Config
|
||||
|
||||
Rollup configuration to help you get started building modern web applications.
|
||||
You write modern JavaScript using the latest browser features. Rollup will optimize your code for production and ensure it runs on all supported browsers.
|
||||
@@ -1,4 +1,12 @@
|
||||
# Tools >> Check HTML Links ||30
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/50--tools/30--check-html-links.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Check HTML Links
|
||||
|
||||
```js script
|
||||
import '@rocket/launch/inline-notification/inline-notification.js';
|
||||
@@ -8,7 +16,7 @@ A fast checker for broken links/references in HTML.
|
||||
|
||||
<inline-notification type="tip">
|
||||
|
||||
Read the [Introducing Check HTMl Links - no more bad links](../../blog/introducing-check-html-links.md) Blog post to find out how it came to be and how it works.
|
||||
Read the [Introducing Check HTML Links - no more bad links](../../blog/introducing-check-html-links.md) Blog post to find out how it came to be and how it works.
|
||||
|
||||
</inline-notification>
|
||||
|
||||
|
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 214 KiB |
10
docs/20--docs/50--tools/index.rocket.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/50--tools/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
export default () =>
|
||||
html`<h1>Tools</h1>
|
||||
<meta name="menu:exclude" content="true" />`;
|
||||
@@ -1,9 +1,14 @@
|
||||
---
|
||||
title: Documentation
|
||||
eleventyNavigation:
|
||||
key: Docs
|
||||
order: 20
|
||||
---
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '20--docs/index.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
<meta name="menu:link.text" content="Docs" />
|
||||
|
||||
# Documentation
|
||||
|
||||
Here you will find all the details for each of the packages/systems we offer.
|
||||
|
||||
15
docs/30--blog/index.rocket.js
Normal file
@@ -0,0 +1,15 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '30--blog/index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
|
||||
export default () => html`
|
||||
<h1>Rocket Blog</h1>
|
||||
<meta name="menu:link.text" content="Blog" />
|
||||
<p>
|
||||
Discover articles from the core team and contributors about Rocket, tips and tricks included!
|
||||
</p>
|
||||
`;
|
||||
@@ -1,10 +1,16 @@
|
||||
---
|
||||
title: Introducing Check HTMl Links - no more bad links
|
||||
published: true
|
||||
description: A fast link checker for static HTML
|
||||
tags: [html, javascript, webdev, node]
|
||||
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/an9z6f4hdll2jlne43u3.jpg
|
||||
---
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '30--blog/introducing-check-html-links.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
export const tags = ['html', 'javascript', 'webdev', 'node'];
|
||||
export const subTitle = 'A fast link checker for static HTML';
|
||||
// cover_image: https://dev-to-uploads.s3.amazonaws.com/i/an9z6f4hdll2jlne43u3.jpg
|
||||
```
|
||||
|
||||
# Introducing Check HTML Links - no more bad links
|
||||
|
||||
**TL;DR : I created a standalone tool that can help you fix all the broken links in your websites/documentation. You can check it out [on npm as check-html-links](https://www.npmjs.com/package/check-html-links)**
|
||||
|
||||
11
docs/404.html.rocket.js
Normal file
@@ -0,0 +1,11 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = '404.html.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu } from './recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { Layout404 } from '@rocket/launch';
|
||||
|
||||
export const layout = new Layout404();
|
||||
|
||||
export default () => '';
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
layout: layout-404
|
||||
permalink: 404.html
|
||||
---
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -1 +0,0 @@
|
||||
<svg id="n" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><defs><style>.cls-1{fill:#c12127;}.cls-2{fill:#fff;}</style></defs><title>n</title><path class="cls-1" d="M0,16V0H16V16ZM3,3V13H8V5h3v8h2V3Z"/><path class="cls-2" d="M3,3H13V13H11V5H8v8H3Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 287 B |
@@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="76.58987244897958 44 164.00775510204068 164" width="160.01" height="160"><defs><path d="M237.6 95L187.6 95L187.6 45L237.6 45L237.6 95Z" id="arNRoK435"></path><path d="M182.59 95L132.59 95L132.59 45L182.59 45L182.59 95Z" id="a3H2WU7Px"></path><path d="M127.59 95L77.59 95L77.59 45L127.59 45L127.59 95Z" id="b1DInM56vl"></path><path d="M237.6 150L187.6 150L187.6 100L237.6 100L237.6 150Z" id="a7LFlgQIwu"></path><path d="M182.59 150L132.59 150L132.59 100L182.59 100L182.59 150Z" id="amwLiZcuo"></path><path d="M182.59 205L132.59 205L132.59 155L182.59 155L182.59 205Z" id="f3Peu5RWan"></path><path d="M237.6 205L187.6 205L187.6 155L237.6 155L237.6 205Z" id="a6DXBfqPa"></path><path d="M127.59 205L77.59 205L77.59 155L127.59 155L127.59 205Z" id="c1GWSTH1z7"></path></defs><g><g><use xlink:href="#arNRoK435" opacity="1" fill="#f9ad00" fill-opacity="1"></use></g><g><use xlink:href="#a3H2WU7Px" opacity="1" fill="#f9ad00" fill-opacity="1"></use></g><g><use xlink:href="#b1DInM56vl" opacity="1" fill="#f9ad00" fill-opacity="1"></use></g><g><use xlink:href="#a7LFlgQIwu" opacity="1" fill="#f9ad00" fill-opacity="1"></use></g><g><use xlink:href="#amwLiZcuo" opacity="1" fill="#4e4e4e" fill-opacity="1"></use></g><g><use xlink:href="#f3Peu5RWan" opacity="1" fill="#4e4e4e" fill-opacity="1"></use></g><g><use xlink:href="#a6DXBfqPa" opacity="1" fill="#4e4e4e" fill-opacity="1"></use></g><g><use xlink:href="#c1GWSTH1z7" opacity="1" fill="#4e4e4e" fill-opacity="1"></use></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1 +0,0 @@
|
||||
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 518 518"><style>.st0{fill:#2c8ebb}.st1{fill:#fff}</style><path class="st0" d="M259 0c143 0 259 116 259 259S402 518 259 518 0 402 0 259 116 0 259 0z"/><path class="st1" d="M435.2 337.5c-1.8-14.2-13.8-24-29.2-23.8-23 .3-42.3 12.2-55.1 20.1-5 3.1-9.3 5.4-13 7.1.8-11.6.1-26.8-5.9-43.5-7.3-20-17.1-32.3-24.1-39.4 8.1-11.8 19.2-29 24.4-55.6 4.5-22.7 3.1-58-7.2-77.8-2.1-4-5.6-6.9-10-8.1-1.8-.5-5.2-1.5-11.9.4C293.1 96 289.6 93.8 286.9 92c-5.6-3.6-12.2-4.4-18.4-2.1-8.3 3-15.4 11-22.1 25.2-1 2.1-1.9 4.1-2.7 6.1-12.7.9-32.7 5.5-49.6 23.8-2.1 2.3-6.2 4-10.5 5.6h.1c-8.8 3.1-12.8 10.3-17.7 23.3-6.8 18.2.2 36.1 7.1 47.7-9.4 8.4-21.9 21.8-28.5 37.5-8.2 19.4-9.1 38.4-8.8 48.7-7 7.4-17.8 21.3-19 36.9-1.6 21.8 6.3 36.6 9.8 42 1 1.6 2.1 2.9 3.3 4.2-.4 2.7-.5 5.6.1 8.6 1.3 7 5.7 12.7 12.4 16.3 13.2 7 31.6 10 45.8 2.9 5.1 5.4 14.4 10.6 31.3 10.6h1c4.3 0 58.9-2.9 74.8-6.8 7.1-1.7 12-4.7 15.2-7.4 10.2-3.2 38.4-12.8 65-30 18.8-12.2 25.3-14.8 39.3-18.2 13.6-3.3 22.1-15.7 20.4-29.4zm-23.8 14.7c-16 3.8-24.1 7.3-43.9 20.2-30.9 20-64.7 29.3-64.7 29.3s-2.8 4.2-10.9 6.1c-14 3.4-66.7 6.3-71.5 6.4-12.9.1-20.8-3.3-23-8.6-6.7-16 9.6-23 9.6-23s-3.6-2.2-5.7-4.2c-1.9-1.9-3.9-5.7-4.5-4.3-2.5 6.1-3.8 21-10.5 27.7-9.2 9.3-26.6 6.2-36.9.8-11.3-6 .8-20.1.8-20.1s-6.1 3.6-11-3.8c-4.4-6.8-8.5-18.4-7.4-32.7 1.2-16.3 19.4-32.1 19.4-32.1s-3.2-24.1 7.3-48.8c9.5-22.5 35.1-40.6 35.1-40.6s-21.5-23.8-13.5-45.2c5.2-14 7.3-13.9 9-14.5 6-2.3 11.8-4.8 16.1-9.5 21.5-23.2 48.9-18.8 48.9-18.8s13-39.5 25-31.8c3.7 2.4 17 32 17 32s14.2-8.3 15.8-5.2c8.6 16.7 9.6 48.6 5.8 68-6.4 32-22.4 49.2-28.8 60-1.5 2.5 17.2 10.4 29 43.1 10.9 29.9 1.2 55 2.9 57.8.3.5.4.7.4.7s12.5 1 37.6-14.5c13.4-8.3 29.3-17.6 47.4-17.8 17.5-.3 18.4 20.2 5.2 23.4z"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,10 +0,0 @@
|
||||
html {
|
||||
--demo-background-color: #eee;
|
||||
--demo-color: #222;
|
||||
}
|
||||
|
||||
html[theme="dark"] body {
|
||||
background: #333;
|
||||
--demo-background-color: #888;
|
||||
--demo-color: #eee;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,33 +0,0 @@
|
||||
<svg fill="#e63946" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 511.998 511.998" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M98.649,430.256c-46.365,28.67-71.17,30.939-78.916,23.51c-7.75-7.433-6.519-32.307,20.182-79.832
|
||||
c24.953-44.412,65.374-96.693,113.818-147.211l-11.279-10.817C93.124,267.348,51.871,320.751,26.291,366.279
|
||||
c-19.228,34.22-37.848,79.134-17.375,98.766c5.84,5.6,13.599,7.935,22.484,7.935c22.269,0,51.606-14.677,75.469-29.432
|
||||
c44.416-27.464,96.044-70.919,145.373-122.362l-11.279-10.817C192.517,360.888,141.976,403.464,98.649,430.256z"/>
|
||||
|
||||
<rect x="238.112" y="272.64" transform="matrix(-0.7218 -0.6921 0.6921 -0.7218 237.9094 656.5383)" width="25.589" height="15.628"/>
|
||||
|
||||
<rect x="268.895" y="302.163" transform="matrix(-0.7218 -0.6921 0.6921 -0.7218 270.4774 728.6761)" width="25.589" height="15.628"/>
|
||||
|
||||
<rect x="232.827" y="268.929" transform="matrix(-0.7218 -0.6921 0.6921 -0.7218 297.4719 673.0591)" width="102.364" height="15.628"/>
|
||||
<path d="M500.916,41.287c-7.769,1.59-76.412,16.062-93.897,34.294l-50.728,52.899l-114.703-3.629l-39.198,40.876l79.28,40.569
|
||||
l-21.755,22.687l72.848,69.858l21.755-22.687l43.857,77.51l39.197-40.876l-8.433-114.451l50.727-52.899
|
||||
c17.485-18.234,29.067-87.422,30.331-95.251l1.801-11.169L500.916,41.287z M228.209,161.383l19.842-20.692l93.688,2.964
|
||||
l-48.775,50.864L228.209,161.383z M401.632,327.686l-35.822-63.308l48.776-50.865l6.886,93.482L401.632,327.686z
|
||||
M332.298,276.743l-50.287-48.223L412.89,92.037l50.288,48.223L332.298,276.743z M473.009,128.036l-48.316-46.334
|
||||
c14.54-8.427,44.787-17.217,68.076-22.632C488.336,82.567,480.82,113.155,473.009,128.036z"/>
|
||||
|
||||
<rect x="302.369" y="231.988" transform="matrix(-0.7218 -0.6921 0.6921 -0.7218 384.0262 633.9694)" width="34.12" height="15.628"/>
|
||||
|
||||
<rect x="411.311" y="127.35" transform="matrix(-0.6921 0.7218 -0.7218 -0.6921 807.9747 -74.331)" width="17.061" height="15.628"/>
|
||||
|
||||
<rect x="394.288" y="145.087" transform="matrix(-0.7218 -0.6921 0.6921 -0.7218 586.0206 542.7934)" width="15.628" height="17.06"/>
|
||||
|
||||
<rect x="376.571" y="163.565" transform="matrix(-0.7218 -0.6921 0.6921 -0.7218 542.7271 562.3462)" width="15.628" height="17.06"/>
|
||||
|
||||
<rect x="161.111" y="185.158" transform="matrix(0.7071 0.7071 -0.7071 0.7071 192.1943 -60.3323)" width="15.628" height="33.35"/>
|
||||
|
||||
<rect x="184.683" y="172.695" transform="matrix(0.707 0.7072 -0.7072 0.707 182.4625 -83.9076)" width="15.628" height="11.118"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 51 KiB |
@@ -1,34 +0,0 @@
|
||||
:root {
|
||||
--markdown-table-row-odd-background-color: #efefef;
|
||||
}
|
||||
|
||||
body[layout^='layout-home'] .markdown-body .call-to-action:nth-of-type(2) {
|
||||
--primary-color: #222;
|
||||
--primary-color-lighter: #333;
|
||||
--primary-color-darker: #000;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1024px) {
|
||||
body[layout='layout-home-background'] .page-background {
|
||||
top: -210px;
|
||||
right: -463px;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
|
||||
rocket-navigation {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
header {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
code-tabs[collection="package-managers"] {
|
||||
--code-tabs-icon-height: 18px;
|
||||
--code-tabs-justify-tabs: end;
|
||||
}
|
||||
|
||||
:not(rocket-navigation):not(:defined) {
|
||||
opacity: 0;
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"name": "Rocket",
|
||||
"short_name": "rocket",
|
||||
"theme_color": "#e63946",
|
||||
"background_color": "#1d3557",
|
||||
"display": "standalone",
|
||||
"orientation": "portrait",
|
||||
"Scope": "/",
|
||||
"start_url": "/",
|
||||
"icons": [
|
||||
{
|
||||
"src": "../_merged_assets/_static/icons/android-chrome-192x192.png",
|
||||
"sizes": "128x128",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "../_merged_assets/_static/icons/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "../_merged_assets/_static/icons/maskable-icon.jpg",
|
||||
"sizes": "1024x1024",
|
||||
"type": "image/jpg",
|
||||
"purpose": "any maskable"
|
||||
}
|
||||
],
|
||||
"splash_pages": null
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
[
|
||||
{
|
||||
"name": "Discover",
|
||||
"children": [
|
||||
{
|
||||
"text": "Blog",
|
||||
"href": "/blog/"
|
||||
},
|
||||
{
|
||||
"text": "Help and Feedback",
|
||||
"href": "https://github.com/modernweb-dev/rocket/issues"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Follow",
|
||||
"children": [
|
||||
{
|
||||
"text": "GitHub",
|
||||
"href": "https://github.com/modernweb-dev/rocket"
|
||||
},
|
||||
{
|
||||
"text": "Twitter",
|
||||
"href": "https://twitter.com/modern_web_dev"
|
||||
},
|
||||
{
|
||||
"text": "Slack",
|
||||
"href": "/about/slack/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Support",
|
||||
"children": [
|
||||
{
|
||||
"text": "Sponsor",
|
||||
"href": "/about/sponsor/"
|
||||
},
|
||||
{
|
||||
"text": "Contribute",
|
||||
"href": "https://github.com/modernweb-dev/rocket/blob/main/CONTRIBUTING.md"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"homeLayout": "background",
|
||||
"newsletter": false
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
module.exports = async function () {
|
||||
return {
|
||||
dir: 'ltr',
|
||||
lang: 'en',
|
||||
name: 'Rocket',
|
||||
description: 'Rocket is the way to build fast static websites with a sprinkle of JavaScript',
|
||||
socialLinks: [
|
||||
{
|
||||
name: 'GitHub',
|
||||
url: 'https://github.com/modernweb-dev/rocket',
|
||||
},
|
||||
{
|
||||
name: 'Slack',
|
||||
url:
|
||||
'https://join.slack.com/t/lit-and-friends/shared_invite/zt-llwznvsy-LZwT13R66gOgnrg12PUGqw',
|
||||
},
|
||||
],
|
||||
gitSiteUrl: 'https://github.com/modernweb-dev/rocket',
|
||||
gitBranch: 'main',
|
||||
helpUrl: 'https://github.com/modernweb-dev/rocket/issues',
|
||||
logoAlt: 'Rocket Logo',
|
||||
iconColorMaskIcon: '#3f93ce',
|
||||
iconColorMsapplicationTileColor: '#1d3557',
|
||||
iconColorThemeColor: '#1d3557',
|
||||
socialMediaImage: '/_assets/social-media-image.jpg',
|
||||
// analytics: 'UA-131782693-2', // modern web key
|
||||
};
|
||||
};
|
||||
@@ -1,3 +0,0 @@
|
||||
<meta name="twitter:creator" content="@modern_web_dev" />
|
||||
|
||||
<link rel="stylesheet" href="{{ '/_assets/body.css' | asset | url }}" mdjs-use>
|
||||
11
docs/about/index.rocket.md
Normal file
@@ -0,0 +1,11 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = 'about/index.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
<meta name="menu:exclude" content="true" />
|
||||
|
||||
# About
|
||||
@@ -1,5 +0,0 @@
|
||||
# Slack
|
||||
|
||||
You can also find us on the Polymer Slack in the [#open-wc](https://polymer.slack.com/archives/CE6D9DN05) channel.
|
||||
|
||||
You can join the Polymer Slack by visiting [https://www.polymer-project.org/slack-invite](https://www.polymer-project.org/slack-invite).
|
||||
13
docs/about/slack.rocket.md
Normal file
@@ -0,0 +1,13 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = 'about/slack.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Slack
|
||||
|
||||
You can also find us on the Polymer Slack in the [#open-wc](https://polymer.slack.com/archives/CE6D9DN05) channel.
|
||||
|
||||
You can join the Polymer Slack by visiting [https://www.polymer-project.org/slack-invite](https://www.polymer-project.org/slack-invite).
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: Sponsor
|
||||
eleventyNavigation:
|
||||
key: Sponsor
|
||||
---
|
||||
|
||||
We currently can only accept sponsoring in the form of services or contributions.
|
||||
|
||||
If you are interested in monetary sponsoring please [let us know](mailto:hello@modern-web.dev).
|
||||
13
docs/about/sponsor.rocket.md
Normal file
@@ -0,0 +1,13 @@
|
||||
```js server
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = 'about/sponsor.rocket.md';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu, layout } from '../recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu, layout };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
```
|
||||
|
||||
# Sponsor
|
||||
|
||||
We currently can only accept sponsoring in the form of services or contributions.
|
||||
|
||||
If you are interested in monetary sponsoring please [let us know](mailto:hello@modern-web.dev).
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
layout: layout-blog-overview
|
||||
eleventyNavigation:
|
||||
key: Blog
|
||||
order: 30
|
||||
pagination:
|
||||
data: collections.blog
|
||||
size: 10
|
||||
reverse: true
|
||||
alias: posts
|
||||
---
|
||||
|
||||
# Rocket Blog
|
||||
|
||||
Discover articles from the core team and contributors about Rocket, tips and tricks included!
|
||||
@@ -1,12 +0,0 @@
|
||||
const { createSocialImage } = require('@rocket/cli');
|
||||
|
||||
module.exports = async function () {
|
||||
const socialMediaImage = await createSocialImage({
|
||||
title: 'Introducing',
|
||||
subTitle: 'check-html-links',
|
||||
footer: 'Rocket Blog',
|
||||
});
|
||||
return {
|
||||
socialMediaImage,
|
||||
};
|
||||
};
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#1d3557</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
@@ -1,40 +0,0 @@
|
||||
# Configuration >> Computed Config || 20
|
||||
|
||||
If you want to add data that depends on other data then you can do it via [Eleventy's computed data](https://www.11ty.dev/docs/data-computed/).
|
||||
|
||||
Rocket exposes it via `setupEleventyComputedConfig`.
|
||||
|
||||
## Set Your Own Data
|
||||
|
||||
Let's say you want to add a `Welcome to the contact page` everywhere. (A filter might be a better choice, but it's a good example of the concept.)
|
||||
|
||||
👉 `rocket.config.js` (or your theme config file)
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js copy
|
||||
import { addPlugin } from 'plugins-manager';
|
||||
|
||||
/** @type {import('@rocket/cli').RocketCliOptions} */
|
||||
export default ({
|
||||
setupEleventyComputedConfig: [
|
||||
addPlugin({ name: 'greeting', plugin: data => `Welcome to the ${data.title} page.` }),
|
||||
],
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
Now you can use {% raw %}{{ greeting }}{% endraw %} everywhere,
|
||||
and it will be correctly replaced with a Welcome and the page title.
|
||||
|
||||
## Default Available Configs
|
||||
|
||||
```js
|
||||
[
|
||||
{ name: 'titleMeta', plugin: titleMetaPlugin },
|
||||
{ name: 'title', plugin: titlePlugin },
|
||||
{ name: 'eleventyNavigation', plugin: eleventyNavigationPlugin },
|
||||
{ name: 'section', plugin: sectionPlugin },
|
||||
{ name: 'socialMediaImage', plugin: socialMediaImagePlugin },
|
||||
{ name: 'templateBlocks', plugin: templateBlocksPlugin, options: rocketConfig },
|
||||
];
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
# Configuration ||10
|
||||
@@ -1 +0,0 @@
|
||||
# Eleventy Plugins ||40
|
||||
@@ -1,94 +0,0 @@
|
||||
# Eleventy Plugins >> Markdown JavaScript (mdjs)
|
||||
|
||||
Use mdjs in your Eleventy site.
|
||||
|
||||
## Setup
|
||||
|
||||
```
|
||||
npm install @rocket/eleventy-plugin-mdjs
|
||||
```
|
||||
|
||||
Create an Eleventy config file `.eleventy.js`
|
||||
|
||||
```js
|
||||
const pluginMdjs = require('@rocket/eleventy-plugin-mdjs');
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginMdjs);
|
||||
};
|
||||
```
|
||||
|
||||
## Configure a unified or remark Plugin with mdjs
|
||||
|
||||
By providing a `setupUnifiedPlugins` function as an option to `eleventy-plugin-mdjs` you can set options for all unified/remark plugins.
|
||||
|
||||
We do use [plugins-manager](../tools/plugins-manager.md).
|
||||
|
||||
This example adds a CSS class to the `htmlHeading` plugin so heading links can be selected in CSS.
|
||||
|
||||
```js
|
||||
const pluginMdjs = require('@rocket/eleventy-plugin-mdjs');
|
||||
const { adjustPluginOptions } = require('plugins-manager');
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginMdjs, {
|
||||
setupUnifiedPlugins: [
|
||||
adjustPluginOptions('htmlHeading', {
|
||||
properties: {
|
||||
className: ['anchor'],
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
## Add a unified or remark Plugin
|
||||
|
||||
The order of plugins is important in unified as each plugin processes the content and passes on its result.
|
||||
Some plugins do work with the Markdown AST and some with the rehype (e.g. HTML) AST. In order to get access to the correct AST the plugin needs to be in a specific location in the processing order.
|
||||
|
||||
Examples on how to insert a plugin right after creating the Markdown AST.
|
||||
|
||||
```js
|
||||
const pluginMdjs = require('@rocket/eleventy-plugin-mdjs');
|
||||
const { addPlugin } = require('plugins-manager');
|
||||
const { myRemarkPlugin } = require('./my-remark-plugin.js');
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginMdjs, {
|
||||
setupUnifiedPlugins: [
|
||||
addPlugin({ name: 'my-remark-plugin', plugin: myRemarkPlugin, location: 'markdown' }),
|
||||
],
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
Examples on how to insert a plugin right after creating the rehype AST.
|
||||
|
||||
```js
|
||||
const pluginMdjs = require('@rocket/eleventy-plugin-mdjs');
|
||||
const { addPlugin } = require('plugins-manager');
|
||||
const { myRehypePlugin } = require('./my-rehype-plugin.js');
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginMdjs, {
|
||||
setupUnifiedPlugins: [
|
||||
addPlugin({ name: 'my-rehype-plugin', plugin: myRehypePlugin, location: 'remark2rehype' }),
|
||||
],
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
You can also add both
|
||||
|
||||
```js
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginMdjs, {
|
||||
setupUnifiedPlugins: [
|
||||
addPlugin({ name: 'my-remark-plugin', plugin: myRemarkPlugin, location: 'markdown' }),
|
||||
addPlugin({ name: 'my-rehype-plugin', plugin: myRehypePlugin, location: 'remark2rehype' }),
|
||||
],
|
||||
});
|
||||
};
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
# Markdown JavaScript ||30
|
||||
@@ -1,23 +0,0 @@
|
||||
# Markdown JavaScript >> Story ||30
|
||||
|
||||
You can showcase live running code by annotating a code block with `js story`.
|
||||
|
||||
```js script
|
||||
import { html } from '@mdjs/mdjs-story';
|
||||
```
|
||||
|
||||
````md
|
||||
```js script
|
||||
import { html } from '@mdjs/mdjs-story';
|
||||
```
|
||||
|
||||
```js story
|
||||
export const foo = () => html` <p>my html</p> `;
|
||||
```
|
||||
````
|
||||
|
||||
will result in
|
||||
|
||||
```js story
|
||||
export const foo = () => html` <p>my html</p> `;
|
||||
```
|
||||
@@ -1,33 +0,0 @@
|
||||
# Presets >> Blog || 40
|
||||
|
||||
Enable writing blog posts within your Rocket site.
|
||||
|
||||
## Installation
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
|
||||
```bash tab npm
|
||||
npm i @rocket/blog
|
||||
```
|
||||
|
||||
```bash tab yarn
|
||||
yarn add @rocket/blog
|
||||
```
|
||||
|
||||
```bash tab pnpm
|
||||
pnpm add @rocket/blog
|
||||
```
|
||||
|
||||
</code-tabs>
|
||||
|
||||
## Usage
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
```js
|
||||
import { rocketBlog } from '@rocket/blog';
|
||||
|
||||
export default {
|
||||
presets: [rocketBlog()],
|
||||
};
|
||||
```
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
excludeFromSearch: true
|
||||
---
|
||||
|
||||
# Presets ||20
|
||||
@@ -1,43 +0,0 @@
|
||||
# Presets >> Search || 30
|
||||
|
||||
Add a search for all your static content.
|
||||
|
||||
## Installation
|
||||
|
||||
<code-tabs collection="package-managers" default-tab="npm">
|
||||
|
||||
```bash tab npm
|
||||
npm i @rocket/search
|
||||
```
|
||||
|
||||
```bash tab yarn
|
||||
yarn add @rocket/search
|
||||
```
|
||||
|
||||
```bash tab pnpm
|
||||
pnpm add @rocket/search
|
||||
```
|
||||
|
||||
</code-tabs>
|
||||
|
||||
## Usage
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
```js
|
||||
import { rocketSearch } from '@rocket/search';
|
||||
|
||||
export default {
|
||||
presets: [rocketSearch()],
|
||||
};
|
||||
```
|
||||
|
||||
## Styling
|
||||
|
||||
| Property | Default | Description |
|
||||
| ------------------------------------- | --------- | ------------------------------------ |
|
||||
| `--rocket-search-background-color` | `#fff` | Search results background color |
|
||||
| `--rocket-search-input-border-color` | `#dfe1e5` | |
|
||||
| `--rocket-search-input-border-radius` | `24px` | |
|
||||
| `--rocket-search-fill-color` | `#000` | Search Icon Color |
|
||||
| `--rocket-search-highlight-color` | `#6c63ff` | Highlighted search result text color |
|
||||
@@ -1 +0,0 @@
|
||||
# Tools ||50
|
||||
@@ -1,269 +0,0 @@
|
||||
# Tools >> Plugins Manager ||10
|
||||
|
||||
The Plugins Manager replaces the specific registration/execution (with options) in a given plugin system by an intend to use a plugin (with these options).
|
||||
This allows your users to adjust the options before actually applying the plugins.
|
||||
|
||||
## Problem
|
||||
|
||||
Many plugin systems require you to either execute a plugin function like in `rollup`.
|
||||
|
||||
```js
|
||||
import json from '@rollup/plugin-json';
|
||||
export default {
|
||||
plugins: [json({ preferConst: true })],
|
||||
};
|
||||
```
|
||||
|
||||
or add it in a special way like in `eleventy`
|
||||
|
||||
```js
|
||||
const pluginSyntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.addPlugin(pluginSyntaxHighlight, { templateFormats: ['md'] });
|
||||
};
|
||||
```
|
||||
|
||||
or `unified/remark`.
|
||||
|
||||
```js
|
||||
var unified = require('unified');
|
||||
var markdown = require('remark-parse');
|
||||
var toc = require('remark-toc');
|
||||
|
||||
var processor = unified().use(markdown).use(toc, { maxDepth: 2 });
|
||||
// ...
|
||||
```
|
||||
|
||||
## Problem Statement
|
||||
|
||||
> Executing or adding a plugin in a special way is a one time process. You can not transparently later change the options of the given plugin.
|
||||
|
||||
This means if you wish to define default plugins and allow your user to override all of the settings it's "impossible".
|
||||
|
||||
## Solution
|
||||
|
||||
The plugins manager lets you orchestrate a set of "meta plugins" which are defined by
|
||||
|
||||
- name
|
||||
- plugin
|
||||
- options
|
||||
|
||||
```js
|
||||
import beep from '@rollup/plugin-beep';
|
||||
import url from '@rollup/plugin-url';
|
||||
|
||||
let metaPlugins = [
|
||||
{ name: 'beep', plugin: beep },
|
||||
{ name: 'url', plugin: url, options: { limit: 10000 } },
|
||||
];
|
||||
```
|
||||
|
||||
This array can be modified by adding/removing or adjusting options.
|
||||
|
||||
```js
|
||||
// raw add
|
||||
metaPlugins.push({
|
||||
// another plugin
|
||||
});
|
||||
|
||||
// raw adjust
|
||||
metaPlugins[1].options.limit = 20000;
|
||||
```
|
||||
|
||||
And then you can convert it into the specific format that can be assigned to your system in question.
|
||||
|
||||
```js
|
||||
// execute plugins for rollup
|
||||
const plugins = metaPlugins.map(pluginObj => {
|
||||
if (pluginObj.options) {
|
||||
return pluginObj.plugin(pluginObj.options);
|
||||
} else {
|
||||
return pluginObj.plugin();
|
||||
}
|
||||
});
|
||||
|
||||
// rollup.config.js
|
||||
export default {
|
||||
plugins,
|
||||
};
|
||||
```
|
||||
|
||||
### Adding Helpers
|
||||
|
||||
Doing array manipulations is kinda error-prone so we offer encourage to use an array of setup function. Where as each setup function can either add a new plugin (with a unique name) or adjust an already existing plugin.
|
||||
|
||||
```js
|
||||
import { addPlugin, adjustPluginOptions } from 'plugins-manager';
|
||||
|
||||
const systemSetupFunctions = [
|
||||
addPlugin({ name: 'first', plugin: first }),
|
||||
addPlugin({ name: 'second', plugin: second }),
|
||||
];
|
||||
const userSetupFunctions = [adjustPluginOptions('first', { my: 'options' })];
|
||||
```
|
||||
|
||||
Arrays of functions can by merged like so
|
||||
|
||||
```js
|
||||
const finalSetupFunctions = [...systemSetupFunctions, ...userSetupFunctions];
|
||||
```
|
||||
|
||||
and then converted to the final output.
|
||||
|
||||
```js
|
||||
import { metaPluginsToRollupPlugins } from 'plugins-manager';
|
||||
|
||||
const plugins = metaPluginsToRollupPlugins(finalSetupFunctions, metaPlugins);
|
||||
```
|
||||
|
||||
## Adding a Plugin
|
||||
|
||||
This makes sure that
|
||||
|
||||
- the name is unique
|
||||
- you can add at at `top`, `bottom` and `after/before` a given other plugin
|
||||
|
||||
By default it adds at the bottom.
|
||||
|
||||
```js
|
||||
import json from '@rollup/plugin-json';
|
||||
import { addPlugin } from 'plugins-manager';
|
||||
|
||||
const userSetupFunctions = [
|
||||
addPlugin({ name: 'json', plugin: json, options: { preferConst: true } }),
|
||||
];
|
||||
```
|
||||
|
||||
Example usage:
|
||||
|
||||
```js
|
||||
addPlugin({ name: 'json', plugin: json }); // Add at the bottom (default)
|
||||
addPlugin({ name: 'json', plugin: json, location: 'top' }); // Add at the top/beginning of the array
|
||||
addPlugin({ name: 'json', plugin: json, location: 'beep' }); // Add after (default) plugin 'beep'
|
||||
addPlugin({ name: 'json', plugin: json, location: 'beep', how: 'before' }); // Add before plugin 'beep'
|
||||
```
|
||||
|
||||
## Adjusting Plugin Options
|
||||
|
||||
Adjusting options means to either
|
||||
|
||||
- flatly merge objects (e.g. only the first level will be preserved)
|
||||
- calling a function to do the merge yourself
|
||||
- setting the raw value (if not an object or function)
|
||||
|
||||
```js
|
||||
import { adjustPluginOptions } from 'plugins-manager';
|
||||
|
||||
const userSetupFunctions = [
|
||||
adjustPluginOptions('json', { preferConst: false, anotherOption: 'format' }),
|
||||
];
|
||||
```
|
||||
|
||||
Example usage:
|
||||
|
||||
```js
|
||||
// given
|
||||
addPlugin({
|
||||
name: 'json',
|
||||
plugin: json,
|
||||
options: {
|
||||
other: {
|
||||
nested: 'other.nested',
|
||||
nested2: 'other.nested2',
|
||||
},
|
||||
main: true,
|
||||
},
|
||||
});
|
||||
|
||||
// merge objects flately
|
||||
adjustPluginOptions('json', { other: { nested: '--overwritten--' } });
|
||||
// resulting options = { other: { nested: '--overwritten--' }, main: true }
|
||||
// NOTE: nested2 is removed
|
||||
|
||||
// merge via function
|
||||
adjustPluginOptions('json', config => ({ other: { ...config.other, nested: '--overwritten--' } }));
|
||||
// resulting options = { other: { nested: '--overwritten--', nested2: 'other.nested2' }, main: true }
|
||||
|
||||
// merge via function to override full options
|
||||
adjustPluginOptions('json', config => ({ only: 'this' }));
|
||||
// resulting options = { only: 'this' }
|
||||
|
||||
// setting a raw value
|
||||
adjustPluginOptions('json', false);
|
||||
// resulting options = false
|
||||
```
|
||||
|
||||
## Converting metaPlugins to an Actual Plugin
|
||||
|
||||
To execute all setup function you can use this little helper
|
||||
|
||||
```js
|
||||
const finalMetaPlugins = executeSetupFunctions(finalSetupFunctions, metaPlugins);
|
||||
```
|
||||
|
||||
And then you can convert it into your format.
|
||||
For Rollup you would execute the plugin with the options if there are any.
|
||||
|
||||
```js
|
||||
const plugins = finalMetaPlugins.map(pluginObj => {
|
||||
if (pluginObj.options) {
|
||||
return pluginObj.plugin(pluginObj.options);
|
||||
} else {
|
||||
return pluginObj.plugin();
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**Examples**
|
||||
|
||||
Rollup has a more specific helper that handles
|
||||
|
||||
- `config.setupPlugins`
|
||||
|
||||
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins`
|
||||
|
||||
```js
|
||||
import { metaConfigToRollupConfig } from 'plugins-manager';
|
||||
|
||||
const finalConfig = metaConfigToRollupConfig(currentConfig, defaultMetaPlugins);
|
||||
```
|
||||
|
||||
Web Dev Server has a more specific helper that handles
|
||||
|
||||
- `config.setupPlugins`
|
||||
- `config.setupRollupPlugins`
|
||||
|
||||
Note: if you provide `config.plugins` then it will return that directly ignoring `setupPlugins` and `setupRollupPlugins`
|
||||
|
||||
```js
|
||||
import { metaConfigToWebDevServerConfig } from 'plugins-manager';
|
||||
import { fromRollup } from '@web/dev-server-rollup';
|
||||
|
||||
const finalConfig = metaConfigToWebDevServerConfig(currentConfig, defaultMetaPlugins, {
|
||||
rollupWrapperFunction: fromRollup,
|
||||
});
|
||||
```
|
||||
|
||||
Eleventy
|
||||
|
||||
```js
|
||||
module.exports = eleventyConfig => {
|
||||
for (const pluginObj of metaPlugins) {
|
||||
if (pluginObj.options) {
|
||||
eleventyConfig.addPlugin(pluginObj.plugin, pluginObj.options);
|
||||
} else {
|
||||
eleventyConfig.addPlugin(pluginObj.plugin);
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
Unified/Remark
|
||||
|
||||
```js
|
||||
const parser = unified();
|
||||
|
||||
for (const pluginObj of metaPlugins) {
|
||||
parser.use(pluginObj.plugin, pluginObj.options);
|
||||
}
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
# Configuration ||30
|
||||
@@ -1 +0,0 @@
|
||||
# First Pages ||10
|
||||
@@ -1,29 +0,0 @@
|
||||
# First Pages >> Layouts ||60
|
||||
|
||||
The following templates are always available:
|
||||
|
||||
- `layout-raw` No html or any wrapping (use it for xml, json, ... outputs)
|
||||
- `layout-default` For content
|
||||
- `layout-index` Extends content and adds an "Open Navigation" button for mobile
|
||||
|
||||
Layout Default has the following Joining Blocks:
|
||||
|
||||
- `head` For the html `<head>`
|
||||
- `header` Within the top `<header>`
|
||||
- `content` Html within the main content section
|
||||
- `footer` Within to bottom `<footer>`
|
||||
- `bottom` Add the end of the body
|
||||
|
||||
## Launch Preset
|
||||
|
||||
On top of the above it adds the following templates
|
||||
|
||||
- `layout-404` A space not found page
|
||||
- `layout-home` Frontpage with center logo below text
|
||||
- `layout-home-background` Frontpage with left text and background image on the right
|
||||
- `layout-sidebar` Left sidebar, right content
|
||||
- `layout-index` Extends layout-sidebar
|
||||
|
||||
And the following changes
|
||||
|
||||
- Sets `layout-sidebar` as the default layout
|
||||
@@ -1,7 +0,0 @@
|
||||
# First Pages >> Linking ||20
|
||||
|
||||
Standard Markdown applies. You can link like this:
|
||||
|
||||
```md
|
||||
[visible label](./path/to/other-file.md)
|
||||
```
|
||||
@@ -1,57 +0,0 @@
|
||||
# First Pages >> Managing sidebar || 30
|
||||
|
||||
The sidebar will show all the content of the current section.
|
||||
|
||||
## Nesting Pages
|
||||
|
||||
You nest by adding `>>` between parent and child.
|
||||
|
||||
## Sorting Pages
|
||||
|
||||
You can sort by adding `||xx` at the end.
|
||||
|
||||
e.g.
|
||||
|
||||
```
|
||||
# Second || 20
|
||||
# First || 10
|
||||
```
|
||||
|
||||
Will be ordered as `First`, `Second`,
|
||||
|
||||
## How it works
|
||||
|
||||
Internally `# Foo >> Bar >> Baz ||20` gets converted to.
|
||||
|
||||
```
|
||||
---
|
||||
title: Bar: Baz
|
||||
eleventyNavigation:
|
||||
key: Foo >> Bar >> Baz
|
||||
parent: Foo >> Bar
|
||||
order: 20
|
||||
---
|
||||
```
|
||||
|
||||
<!--
|
||||
You can also look at this live playground:
|
||||
|
||||
```js story
|
||||
import { html } from '@mdjs/mdjs-preview';
|
||||
|
||||
export const headlineConverter = () => html`
|
||||
<p>
|
||||
<strong style="color: red;">TODO: </strong>I will become a web component that has an input and
|
||||
out that live udpates
|
||||
</p>
|
||||
`;
|
||||
```
|
||||
-->
|
||||
|
||||
How it then works is very similar to https://www.11ty.dev/docs/plugins/navigation/
|
||||
|
||||
## Sidebar redirects
|
||||
|
||||
By default, the sidebar nav redirects clicks on category headings to the first child page in that category.
|
||||
|
||||
To disable those redirects, override `_includes/_joiningBlocks/_layoutSidebar/sidebar/20-navigation.njk` and add the `no-redirects` attribute to the `<rocket-navigation>` element.
|
||||
@@ -1,5 +0,0 @@
|
||||
# First Pages >> URLs ||50
|
||||
|
||||
URLs will be represented by the folder structure.
|
||||
|
||||
You can use front matter with a [permalink](https://www.11ty.dev/docs/permalinks/) to override.
|
||||
@@ -1 +0,0 @@
|
||||
# Go Live || 40
|
||||
@@ -1,13 +0,0 @@
|
||||
const { createSocialImage } = require('@rocket/cli');
|
||||
|
||||
module.exports = async function () {
|
||||
const socialMediaImage = await createSocialImage({
|
||||
title: 'Learning Rocket',
|
||||
subTitle: 'Have a website',
|
||||
subTitle2: 'in 5 Minutes',
|
||||
footer: 'Rocket Guides',
|
||||
});
|
||||
return {
|
||||
socialMediaImage,
|
||||
};
|
||||
};
|
||||
@@ -1,54 +0,0 @@
|
||||
# Presets >> Create your Own >> Getting Started || 10
|
||||
|
||||
A preset is a setup function and a folder including `_assets`, `_data` and `_includes` (all optional).
|
||||
|
||||
To play around with a preset you can create a folder `fire-theme`.
|
||||
|
||||
You then create the setup function for it with only one property called `path` which will allow Rocket to properly resolve it.
|
||||
|
||||
## Create a Preset Config File
|
||||
|
||||
👉 `fire-theme/fireTheme.js`
|
||||
|
||||
```js copy
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
export function fireTheme() {
|
||||
return {
|
||||
path: path.resolve(__dirname),
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Once you have that you can start filling in content you need.
|
||||
|
||||
For example we could override the full `layout.css` by adding it like so
|
||||
|
||||
👉 `fire-theme/layout.css`
|
||||
|
||||
```css copy
|
||||
body {
|
||||
background: hotpink;
|
||||
}
|
||||
```
|
||||
|
||||
Once you have that you can add it to your Rocket config.
|
||||
|
||||
NOTE: The order of presets is important, as for example in this case we take everything from `rocketLaunch` but later override via `fireTheme`.
|
||||
|
||||
👉 `rocket.config.js`
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js copy
|
||||
import { rocketLaunch } from '@rocket/launch';
|
||||
import { fireTheme } from 'path/to/fire-theme/fireTheme.js';
|
||||
|
||||
/** @type {import('@rocket/cli').RocketCliOptions} */
|
||||
export default ({
|
||||
presets: [rocketLaunch(), fireTheme()],
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -1,22 +0,0 @@
|
||||
# Presets >> Create your Own >> Hooks || 20
|
||||
|
||||
Your preset can hook into the rocket lifecycle by specifying a function for `before11ty`. This function runs before 11ty calls it's write method. If it is an async function, Rocket will await it's promise.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
```js
|
||||
/** @type {import('@rocket/cli').RocketPreset} */
|
||||
export default ({
|
||||
async before11ty() {
|
||||
await copyDataFiles();
|
||||
},
|
||||
});
|
||||
```
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
## Preset Interface
|
||||
|
||||
The full preset interface is copied below for your reference.
|
||||
|
||||
```ts
|
||||
{% include ../../../../packages/cli/types/preset.d.ts %}
|
||||
```
|
||||
@@ -1,7 +0,0 @@
|
||||
# Presets >> Create your Own || 40
|
||||
|
||||
## Contents
|
||||
|
||||
- [Getting Started](./getting-started/)
|
||||
- [Hooks](./hooks/)
|
||||
- [Publishing your Preset](./publishing/)
|
||||
@@ -1,60 +0,0 @@
|
||||
# Presets >> Create your Own >> Publishing || 100
|
||||
|
||||
If you would like to publish a preset to use it on multiple websites or share it with your friends you can do like so.
|
||||
|
||||
1. Pick a name for the package
|
||||
- use the convention `rocket-preset-${name}`
|
||||
- for this example we use `rocket-preset-fire-theme`.
|
||||
2. Create a new folder `fire-theme`
|
||||
3. Create a folder `fire-theme/preset` copy `fireTheme.js` from [above](../getting-started/) into `preset/fireTheme.js`
|
||||
4. Add a 👉 `package.json`
|
||||
|
||||
```json copy
|
||||
{
|
||||
"name": "rocket-preset-fire-theme",
|
||||
"version": "0.3.0",
|
||||
"description": "Fire Theme for Rocket",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./index.js",
|
||||
"./preset/": "./preset/"
|
||||
},
|
||||
"files": ["*.js", "preset"],
|
||||
"keywords": ["rocket", "preset"]
|
||||
}
|
||||
```
|
||||
|
||||
5. Add a 👉 `index.js`
|
||||
|
||||
```js copy
|
||||
export { fireTheme } from './preset/fireTheme.js';
|
||||
```
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
6. Add a 👉 `README.md`
|
||||
|
||||
~~~markdown copy
|
||||
# FireTheme
|
||||
|
||||
This is a theme/preset for [Rocket](https://rocket.modern-web.dev/).
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
npm i -D fire-theme
|
||||
```
|
||||
|
||||
Add it to your 👉 `rocket.config.js`
|
||||
|
||||
```js
|
||||
import { fireTheme } from 'fire-theme';
|
||||
|
||||
/** @type {import('@rocket/cli').RocketCliOptions} */
|
||||
export default ({
|
||||
presets: [rocketLaunch(), fireTheme()],
|
||||
});
|
||||
```
|
||||
~~~
|
||||
|
||||
<!-- prettier-ignore-end -->
|
||||
@@ -1,6 +0,0 @@
|
||||
# Presets || 20
|
||||
|
||||
- [Getting Started](./getting-started/)
|
||||
- [Overriding](./overriding/)
|
||||
- [Using Templates](./using-templates/)
|
||||
- [Create Your Own](./create-your-own/getting-started/)
|
||||
@@ -1,71 +0,0 @@
|
||||
# Presets >> Using templates ||30
|
||||
|
||||
The template system allows for very granular control of how individual parts will be merged, overwritten, or reordered.
|
||||
|
||||
On top of the [Overriding](./overriding.md) you can do with the presets alone templates have another superpower and that is automatically joining of parts.
|
||||
|
||||
It is generally preferred to use `Joining Blocks` before overriding.
|
||||
|
||||
## Adding html to the html head
|
||||
|
||||
Often you will want to load some more fonts or an additional CSS file. You can do so by adding a file to the head Joining Block.
|
||||
|
||||
👉 `docs/_includes/_joiningBlocks/head/additional-styles.njk`
|
||||
|
||||
```html
|
||||
<link rel="stylesheet" href="{{ '/_assets/additional-styles.css' | asset | url }}" />
|
||||
```
|
||||
|
||||
This will add the html at the bottom of the head.
|
||||
|
||||
## Adding JavaScript to the bottom of the body
|
||||
|
||||
For executing a script you can use the `bottom` Joining Block.
|
||||
|
||||
👉 `docs/_includes/_joiningBlocks/bottom/my-script.njk`
|
||||
|
||||
```html
|
||||
<script>
|
||||
console.log('hello world');
|
||||
</script>
|
||||
```
|
||||
|
||||
If you look into `docs/_merged_includes/_joiningBlocks/bottom/` you will see a few scripts
|
||||
|
||||
- `10-init-navigation.njk`
|
||||
- `180-service-worker-update.njk`
|
||||
- `190-google-analytics.njk`
|
||||
- `my-script.njk`
|
||||
|
||||
<inline-notification type="tip">
|
||||
|
||||
File names without an order/number in front are considered with the order number `10 000` so the generally end up at the bottom. If you need something even below unordered items you can use numbers that are greater then `10 000`.
|
||||
|
||||
_Note: For unordered files there is no guarantee of any order._
|
||||
|
||||
</inline-notification>
|
||||
|
||||
## Controlling the order
|
||||
|
||||
In the html `<head>` order is usually not that important but when adding script it does.
|
||||
|
||||
If you look into the dom then you see that its order matches with the file system order.
|
||||
|
||||
Now if you want to move your script in-between `init-nagivation` and `service-worker-update` then you can rename your file to
|
||||
|
||||
👉 `docs/_includes/_joiningBlocks/bottom/20-my-script.njk`
|
||||
|
||||
which brings the order to
|
||||
|
||||
- `10-init-navigation.njk`
|
||||
- `20-my-script.njk`
|
||||
- `180-service-worker-update.njk`
|
||||
- `190-google-analytics.njk`
|
||||
|
||||
## More information
|
||||
|
||||
For more details please see the [Joining Blocks Docs](../../docs/presets/joining-blocks.md)
|
||||
|
||||
```js script
|
||||
import '@rocket/launch/inline-notification/inline-notification.js';
|
||||
```
|
||||
@@ -1,13 +0,0 @@
|
||||
const { createSocialImage } = require('@rocket/cli');
|
||||
|
||||
module.exports = async function () {
|
||||
const socialMediaImage = await createSocialImage({
|
||||
title: 'Rocket',
|
||||
subTitle: 'Static sites with',
|
||||
subTitle2: 'a sprinkle of JavaScript.',
|
||||
footer: 'A Modern Web Product',
|
||||
});
|
||||
return {
|
||||
socialMediaImage,
|
||||
};
|
||||
};
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
title: Rocket
|
||||
layout: layout-home-background
|
||||
slogan: The modern web setup for static sites with a sprinkle of JavaScript.
|
||||
callToActionItems:
|
||||
- text: Follow Guides
|
||||
href: /guides/
|
||||
- text: Browse Docs
|
||||
href: /docs/
|
||||
reasonHeader: Why Rocket?
|
||||
reasons:
|
||||
- header: Small
|
||||
text: No overblown tools or frontend frameworks, add JavaScript and/or Web Components only on pages where needed.
|
||||
- header: Pre-Rendered
|
||||
text: Statically generated content means less JavaScript to ship and process.
|
||||
- header: Zero Configuration
|
||||
text: Automatic code splitting, filesystem based routing, and JavaScript in Markdown.
|
||||
- header: Meta Framework
|
||||
text: 'Build on top of giants like <a href="https://www.11ty.dev/">Eleventy</a>, <a href="https://rollupjs.org/">Rollup</a>, and <a href="https://www.modern-web.dev/">Modern Web</a>.'
|
||||
- header: Powerful Default Template
|
||||
text: Provide content and you are ready to go.
|
||||
- header: Ready for Production
|
||||
text: Optimized for a smaller build size, faster dev compilation and dozens of other improvements.
|
||||
---
|
||||
50
docs/index.rocket.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = 'index.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu } from './recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { html } from 'lit-html';
|
||||
|
||||
import { LayoutHome } from '@rocket/launch';
|
||||
|
||||
export const layout = new LayoutHome({
|
||||
pageTree,
|
||||
footerMenu,
|
||||
slogan: 'The modern web setup for static sites with a sprinkle of JavaScript.',
|
||||
callToActionItems: [
|
||||
{ text: 'Follow Guides', href: '/guides/' },
|
||||
{ text: 'Browse Docs', href: '/docs/' },
|
||||
],
|
||||
background: '/home-background.svg',
|
||||
reasonHeader: 'Why Rocket?',
|
||||
reasons: [
|
||||
{
|
||||
header: 'Small',
|
||||
text:
|
||||
'No overblown tools or frontend frameworks, add JavaScript and/or Web Components only on pages where needed.',
|
||||
},
|
||||
{
|
||||
header: 'Pre-Rendered',
|
||||
text: 'Statically generated content means less JavaScript to ship and process.',
|
||||
},
|
||||
{
|
||||
header: 'Zero Configuration',
|
||||
text: 'Automatic code splitting, filesystem based routing, and JavaScript in Markdown.',
|
||||
},
|
||||
{
|
||||
header: 'Meta Framework',
|
||||
text: html`Build on top of giants like <a href="https://www.11ty.dev/">Eleventy</a>,
|
||||
<a href="https://rollupjs.org/">Rollup</a>, and
|
||||
<a href="https://www.modern-web.dev/">Modern Web</a>.`,
|
||||
},
|
||||
{ header: 'Powerful Default Template', text: 'Provide content and you are ready to go.' },
|
||||
{
|
||||
header: 'Ready for Production',
|
||||
text:
|
||||
'Optimized for a smaller build size, faster dev compilation and dozens of other improvements.',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
export default () => '';
|
||||
1169
docs/pageTreeData.rocketGenerated.json
Normal file
77
docs/recursive.data.js
Normal file
@@ -0,0 +1,77 @@
|
||||
import { PageTree } from '@rocket/engine';
|
||||
import { LayoutSidebar } from '@rocket/launch';
|
||||
import { adjustPluginOptions } from 'plugins-manager';
|
||||
import { mdjsSetupCode } from '@mdjs/core';
|
||||
|
||||
export const pageTree = new PageTree({
|
||||
inputDir: new URL('./', import.meta.url),
|
||||
outputDir: new URL('../_site', import.meta.url),
|
||||
});
|
||||
await pageTree.restore();
|
||||
|
||||
export const setupUnifiedPlugins = [
|
||||
adjustPluginOptions(mdjsSetupCode, {
|
||||
simulationSettings: {
|
||||
simulatorUrl: '/simulator/',
|
||||
themes: [
|
||||
{ key: 'light', name: 'Light' },
|
||||
{ key: 'dark', name: 'Dark' },
|
||||
],
|
||||
platforms: [
|
||||
{ key: 'web', name: 'Web' },
|
||||
{ key: 'android', name: 'Android' },
|
||||
{ key: 'ios', name: 'iOS' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
export const footerMenu = [
|
||||
{
|
||||
name: 'Discover',
|
||||
children: [
|
||||
{
|
||||
text: 'Blog',
|
||||
href: '/blog/',
|
||||
},
|
||||
{
|
||||
text: 'Help and Feedback',
|
||||
href: 'https://github.com/modernweb-dev/rocket/issues',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Follow',
|
||||
children: [
|
||||
{
|
||||
text: 'GitHub',
|
||||
href: 'https://github.com/modernweb-dev/rocket',
|
||||
},
|
||||
{
|
||||
text: 'Twitter',
|
||||
href: 'https://twitter.com/modern_web_dev',
|
||||
},
|
||||
{
|
||||
text: 'Slack',
|
||||
href: '/about/slack/',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Support',
|
||||
children: [
|
||||
{
|
||||
text: 'Sponsor',
|
||||
href: '/about/sponsor/',
|
||||
},
|
||||
{
|
||||
text: 'Contribute',
|
||||
href: 'https://github.com/modernweb-dev/rocket/blob/main/CONTRIBUTING.md',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export const layout = new LayoutSidebar({ pageTree, footerMenu });
|
||||
|
||||
// export const openGraphLayout = new OpenGraphLayoutLogo();
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
layout: layout-simulator
|
||||
eleventyExcludeFromCollections: true
|
||||
excludeFromSearch: true
|
||||
---
|
||||
11
docs/simulator.rocket.js
Normal file
@@ -0,0 +1,11 @@
|
||||
/* START - Rocket auto generated - do not touch */
|
||||
export const sourceRelativeFilePath = 'simulator.rocket.js';
|
||||
import { pageTree, setupUnifiedPlugins, footerMenu } from './recursive.data.js';
|
||||
export { pageTree, setupUnifiedPlugins, footerMenu };
|
||||
/* END - Rocket auto generated - do not touch */
|
||||
|
||||
import { LayoutSimulator } from '@mdjs/mdjs-preview/server';
|
||||
|
||||
export const layout = new LayoutSimulator();
|
||||
|
||||
export default () => '';
|
||||