Compare commits

...

13 Commits

Author SHA1 Message Date
Benny Powers
5c3eda35a9 Merge pull request #191 from modernweb-dev/changeset-release/main
Version Packages
2021-07-04 22:57:22 +03:00
github-actions[bot]
6910d50bf5 Version Packages 2021-07-04 19:47:35 +00:00
Dani Garcia
a2dc8656db chore: improve wording in getting-started.md (#196) 2021-07-04 21:46:26 +02:00
Benny Powers
e778cd8a3c Update 30-collection-header.njk
fixes #189
2021-07-04 21:45:21 +02:00
Thomas Allmer
9e3c2f52d9 fix(launch): create help & feedback link only if site.helpUrl is defined 2021-07-04 18:21:19 +02:00
Thomas Allmer
579e8e72a2 fix(cli): Unordered joiningBlocks should generally end up at the end 2021-07-04 16:50:11 +02:00
Thomas Allmer
06ae8693b2 docs: add info that a server needs to handle the 404.html file 2021-07-04 16:50:07 +02:00
Thomas Allmer
cee2b7b04c fix(launch): fix font variables 2021-07-04 16:49:40 +02:00
Thomas Allmer
9625b94d39 fix(launch): remove footer urls that require user creation 2021-07-04 16:48:44 +02:00
Benny Powers
1f79d7a047 feat(launch): move font-family to variables 2021-07-04 12:00:31 +02:00
Benny Powers
bf99541951 fix(cli): copy all static assets on build 2021-07-04 12:00:14 +02:00
github-actions[bot]
8df9a3e9c3 Version Packages 2021-07-02 13:42:36 +02:00
Benny Powers
1b9559f2a5 feat(cli): add async before11ty hook (#183) 2021-07-02 11:58:54 +02:00
33 changed files with 199 additions and 78 deletions

View File

@@ -86,3 +86,15 @@ const config = {
export default config;
```
## Lifecycle
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.
```js
export default {
async before11ty() {
await copyDataFiles();
},
};
```

View File

@@ -20,7 +20,7 @@ The Plugins Manager helps you register and execute your plugins across the vario
## Adding Remark/Unified Plugins
If you want to a plugin to the Markdown processing you can use `setupUnifiedPlugins`.
If you want to add a plugin to the Markdown processing you can use `setupUnifiedPlugins`.
```js
import emoji from 'remark-emoji';

View File

@@ -9,7 +9,7 @@ Many servers are configured to handle this automatically and to serve a 404.html
The [Rocket Launch preset](../../docs/presets/launch.md) ships a default 404 template you can use.
To enable it, you need to create a 404.md and use the 404 layout.
To enable it, you need to create a `404.md` and use the 404 layout.
👉 `docs/404.md`
@@ -20,6 +20,10 @@ permalink: 404.html
---
```
This results in a `404.html` page, which will do nothing by itself. But many hosting services like netlify or firebase, for example will redirect 404s to this `404.html` by default.
If the hosting provider doesn't already do this, then you may be able to accomplish it via some settings for example by using a `.htaccess` file in case of an apache server.
## Add a Sitemap
A sitemap can be used to inform search engines or services about the pages your site has.

View File

@@ -0,0 +1,11 @@
# Presets >> Create your own > Options || 10
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.
```js
export default {
async before11ty() {
await copyDataFiles();
},
};
```

View File

@@ -37,6 +37,14 @@ If you look into `docs/_merged_includes/_joiningBlocks/bottom/` you will see a f
- `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.
@@ -57,3 +65,7 @@ which brings the order to
## 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';
```

View File

@@ -1,5 +1,23 @@
# @rocket/cli
## 0.9.6
### Patch Changes
- bf99541: Adjust copy logic to
1. for `_assets/_static` copy over everything
2. for all other paths copy over everything except `*.html` and `*.md`
- 579e8e7: Unordered joiningBlocks are now considered with the order number `10 000` and will generally be at the bottom.
You can use numbers `> 10 000` to place files even after unordered joiningBlocks.
## 0.9.5
### Patch Changes
- 1b9559f: Adds `before11ty` hook to config and presets
## 0.9.4
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@rocket/cli",
"version": "0.9.4",
"version": "0.9.6",
"publishConfig": {
"access": "public"
},

View File

@@ -29,7 +29,7 @@ async function productionBuild(config) {
name: 'copy',
plugin: copy,
options: {
patterns: ['!(*.md|*.html)*', '_merged_assets/_static/**/*.{png,gif,jpg,json,css,svg,ico}'],
patterns: ['!(*.md|*.html)*', '_merged_assets/_static/**/*'],
rootDir: config.outputDevDir,
},
}),

View File

@@ -31,6 +31,7 @@ export class RocketEleventy extends Eleventy {
async write() {
await this.__rocketCli.mergePresets();
for (const fn of this.__rocketCli.config.__before11tyFunctions) await fn();
await super.write();
await this.__rocketCli.update();
}
@@ -120,7 +121,7 @@ export class RocketCli {
for (const folder of ['_assets', '_data', '_includes']) {
const to = path.join(this.config._inputDirCwdRelative, `_merged${folder}`);
await fs.emptyDir(to);
for (const sourceDir of this.config._presetPathes) {
for (const sourceDir of this.config._presetPaths) {
const from = path.join(sourceDir, folder);
if (fs.existsSync(from)) {
if (folder === '_includes') {

View File

@@ -1,6 +1,10 @@
const rocketCopy = {
configFunction: (eleventyConfig, { _inputDirCwdRelative, filesExtensionsToCopy }) => {
eleventyConfig.addPassthroughCopy(`${_inputDirCwdRelative}/**/*.{${filesExtensionsToCopy}}`);
configFunction: (eleventyConfig, { _inputDirCwdRelative }) => {
eleventyConfig.addPassthroughCopy(`${_inputDirCwdRelative}/!(*.md|*.html)*`);
eleventyConfig.addPassthroughCopy(
`${_inputDirCwdRelative}/!(_includes|_data|_assets|_merged_data|_merged_includes)*/**/!(*.md|*.html)*`,
);
eleventyConfig.addPassthroughCopy(`${_inputDirCwdRelative}/_merged_assets/_static/**/*`);
},
};

View File

@@ -5,6 +5,7 @@
/** @typedef {import('@web/dev-server').DevServerConfig} DevServerConfig */
/** @typedef {import('../types/main').RocketCliOptions} RocketCliOptions */
/** @typedef {import('../types/main').ImagePreset} ImagePreset */
/** @typedef {import('../types/main').RocketPlugin} RocketPlugin */
import path from 'path';
@@ -37,7 +38,7 @@ function ignore({ src }) {
/**
* @param {Partial<RocketCliOptions>} inConfig
* @returns {Promise<RocketCliOptions>}
* @returns {Promise<RocketCliOptions & { __before11tyFunctions: RocketCliOptions['before11ty'][] }>}
*/
export async function normalizeConfig(inConfig) {
let config = {
@@ -61,6 +62,11 @@ export async function normalizeConfig(inConfig) {
devServer: {},
...inConfig,
/** @type{RocketCliOptions['before11ty'][]} */
__before11tyFunctions: [],
/** @type{{[key: string]: ImagePreset}} */
imagePresets: {
responsive: {
widths: [600, 900, 1640],
@@ -121,9 +127,9 @@ export async function normalizeConfig(inConfig) {
const _inputDirCwdRelative = path.join(_configDirCwdRelative, config.inputDir);
// cli core preset is always first
config._presetPathes = [path.join(__dirname, '..', 'preset')];
config._presetPaths = [path.join(__dirname, '..', 'preset')];
for (const preset of config.presets) {
config._presetPathes.push(preset.path);
config._presetPaths.push(preset.path);
if (preset.adjustImagePresets) {
config.imagePresets = preset.adjustImagePresets(config.imagePresets);
@@ -159,9 +165,13 @@ export async function normalizeConfig(inConfig) {
if (preset.setupCliPlugins) {
config.setupCliPlugins = [...config.setupCliPlugins, ...preset.setupCliPlugins];
}
if (typeof preset.before11ty === 'function') {
config.__before11tyFunctions.push(preset.before11ty);
}
}
// add "local" preset
config._presetPathes.push(path.resolve(_inputDirCwdRelative));
config._presetPaths.push(path.resolve(_inputDirCwdRelative));
/** @type {MetaPlugin[]} */
let pluginsMeta = [
@@ -186,6 +196,10 @@ export async function normalizeConfig(inConfig) {
plugins.push(pluginInst);
}
if (typeof config.before11ty === 'function') {
config.__before11tyFunctions.push(config.before11ty);
}
// TODO: check pathPrefix to NOT have a '/' at the end as it will mean it may get ignored by 11ty 🤷‍♂️
return {

View File

@@ -106,7 +106,7 @@ function socialMediaImagePlugin(args = {}) {
};
}
function sortyByOrder(a, b) {
function sortByOrder(a, b) {
if (a.order > b.order) {
return 1;
}
@@ -127,20 +127,20 @@ async function dirToTree(sourcePath, extra = '') {
if (entry.isDirectory()) {
const value = await dirToTree(sourcePath, relativePath);
unsortedEntries.push({
order: matches && matches.length > 0 ? parseInt(matches[1]) : 0,
order: matches && matches.length > 0 ? parseInt(matches[1]) : 10000,
name: entry.name,
value,
});
} else {
unsortedEntries.push({
order: matches && matches.length > 0 ? parseInt(matches[1]) : 0,
order: matches && matches.length > 0 ? parseInt(matches[1]) : 10000,
name: entry.name,
value: relativePath,
});
}
}
const sortedTree = {};
for (const unsortedEntry of unsortedEntries.sort(sortyByOrder)) {
for (const unsortedEntry of unsortedEntries.sort(sortByOrder)) {
sortedTree[unsortedEntry.name] = unsortedEntry.value;
}
return sortedTree;

View File

@@ -30,10 +30,7 @@ module.exports = function (eleventyConfig) {
{
name: 'rocket-copy',
plugin: rocketCopy,
options: {
_inputDirCwdRelative,
filesExtensionsToCopy: 'png,gif,jpg,jpeg,svg,css,xml,json,js',
},
options: { _inputDirCwdRelative },
},
{
name: 'eleventy-plugin-mdjs-unified',

View File

@@ -29,7 +29,13 @@ describe('RocketCli mergeTemplates', () => {
const indexHtml = await readStartOutput(cli, 'index.html');
expect(trimWhiteSpace(indexHtml)).to.equal(
['<p>first</p>', '<p>second</p>', '<p>30-third</p>', '<p>100-last</p>'].join('\n'),
[
'<p>30-first</p>',
'<p>100-second</p>',
'<p>bar-third</p>',
'<p>foo-fourth</p>',
'<p>10100-last</p>',
].join('\n'),
);
});

View File

@@ -10,7 +10,7 @@ function cleanup(config) {
const configNoPaths = { ...config };
delete configNoPaths._inputDirCwdRelative;
delete configNoPaths.configFile;
delete configNoPaths._presetPathes;
delete configNoPaths._presetPaths;
delete configNoPaths.eleventy;
delete configNoPaths.outputDevDir;
delete configNoPaths.imagePresets.responsive.ignore;
@@ -24,11 +24,12 @@ describe('normalizeConfig', () => {
// testing pathes is always a little more complicted 😅
expect(config._inputDirCwdRelative).to.match(/empty\/docs$/);
expect(config._presetPathes[0]).to.match(/cli\/preset$/);
expect(config._presetPathes[1]).to.match(/empty\/docs$/);
expect(config._presetPaths[0]).to.match(/cli\/preset$/);
expect(config._presetPaths[1]).to.match(/empty\/docs$/);
expect(config.outputDevDir).to.match(/_site-dev$/);
expect(cleanup(config)).to.deep.equal({
__before11tyFunctions: [],
command: 'help',
createSocialMediaImages: true,
devServer: {},
@@ -70,6 +71,7 @@ describe('normalizeConfig', () => {
});
expect(cleanup(config)).to.deep.equal({
__before11tyFunctions: [],
command: 'help',
createSocialMediaImages: true,
devServer: {
@@ -110,6 +112,7 @@ describe('normalizeConfig', () => {
});
expect(cleanup(config)).to.deep.equal({
__before11tyFunctions: [],
command: 'help',
createSocialMediaImages: true,
devServer: {
@@ -155,6 +158,7 @@ describe('normalizeConfig', () => {
});
expect(cleanup(config)).to.deep.equal({
__before11tyFunctions: [],
command: 'help',
createSocialMediaImages: true,
devServer: {},

View File

@@ -4,21 +4,25 @@ import { CheckHtmlLinksCliOptions } from 'check-html-links/dist-types/types/main
export interface RocketPreset {
path: string;
adjustImagePresets?: (preset: { [key: string]: ImagePreset }) => { [key: string]: ImagePreset };
before11ty?: () => void | Promise<void>;
// TODO: improve all setup functions
setupUnifiedPlugins?: function[];
setupDevAndBuildPlugins: function[];
setupBuildPlugins: function[];
setupDevPlugins: function[];
setupCliPlugins: function[];
setupEleventyPlugins: function[];
setupEleventyComputedConfig: function[];
setupDevAndBuildPlugins?: function[];
setupBuildPlugins?: function[];
setupDevPlugins?: function[];
setupCliPlugins?: function[];
setupEleventyPlugins?: function[];
setupEleventyComputedConfig?: function[];
}
interface RocketStartConfig {
createSocialMediaImages?: boolean;
}
type ImageFormat = 'avif' | 'webp' | 'jpg' | 'png' | 'svg';
type ImageFormat = 'avif' | 'webp' | 'jpg' | 'jpeg' | 'png' | 'svg';
interface ImagePreset {
widths: number[];
@@ -27,46 +31,49 @@ interface ImagePreset {
}
export interface RocketCliOptions {
presets: Array<RocketPreset>;
presets?: Array<RocketPreset>;
pathPrefix?: string;
serviceWorkerName?: string;
inputDir: string;
outputDir: string;
inputDir?: string;
outputDir?: string;
emptyOutputDir?: boolean;
absoluteBaseUrl?: string;
watch: boolean;
watch?: boolean;
createSocialMediaImages?: boolean;
imagePresets: {
imagePresets?: {
[key: string]: ImagePreset;
};
checkLinks: Partial<CheckHtmlLinksCliOptions>;
before11ty?: () => void | Promise<void>;
checkLinks?: Partial<CheckHtmlLinksCliOptions>;
start?: RocketStartConfig;
// TODO: improve all setup functions
setupUnifiedPlugins?: function[];
setupDevAndBuildPlugins: function[];
setupBuildPlugins: function[];
setupDevPlugins: function[];
setupCliPlugins: function[];
setupEleventyPlugins: function[];
setupEleventyComputedConfig: function[];
setupDevAndBuildPlugins?: function[];
setupBuildPlugins?: function[];
setupDevPlugins?: function[];
setupCliPlugins?: function[];
setupEleventyPlugins?: function[];
setupEleventyComputedConfig?: function[];
// advanced
devServer: DevServerConfig;
eleventy: function; // TODO: improve
plugins: RocketPlugin[];
devServer?: DevServerConfig;
eleventy?: (eleventyConfig: any) => void; // TODO: improve
plugins?: RocketPlugin[];
// rarely used
command: string;
command?: string;
configFile?: string;
outputDevDir: string;
outputDevDir?: string;
private _inputDirCwdRelative: string;
private _presetPathes?: Array<string>;
private _inputDirCwdRelative?: string;
private _presetPaths?: string[];
private __before11tyFunctions?: (() => void | Promise<void>)[];
}
export interface RocketPlugin {
commands: Array<string>;
commands: string[];
}

View File

@@ -1,5 +1,18 @@
# @rocket/launch
## 0.5.2
### Patch Changes
- 9e3c2f5: Only show the help & feedback link if a site.helpUrl is defined
- 9625b94: Remove footer urls to pages that users would need to create
- 1f79d7a: Add font-family CSS variables
- `--primary-font-family` for body text
- `--secondary-font-family` for emphasis (e.g. call-to-action)
- `--heading-font-family` for headings (defaults to `--primary-font-family`)
- `--monospace-font-family` for code blocks
## 0.5.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@rocket/launch",
"version": "0.5.1",
"version": "0.5.2",
"publishConfig": {
"access": "public"
},

View File

@@ -7,7 +7,7 @@
body {
margin: 0;
font-family: 'Open Sans', sans-serif;
font-family: var(--primary-font-family);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-size: 16px;
@@ -434,11 +434,13 @@ li.current > ul > li.anchor {
/* for blog detail page */
rocket-navigation h3 {
font-family: var(--heading-font-family, var(--primary-font-family));
font-size: 16px;
margin: 0 0 7px 0;
}
.sidebar-tags h3 {
font-family: var(--heading-font-family, var(--primary-font-family));
margin-top: 30px;
}
@@ -541,7 +543,7 @@ main > * {
display: inline-block;
text-align: center;
text-transform: uppercase;
font-family: 'Montserrat', sans-serif;
font-family: var(--secondary-font-family);
font-size: 16px;
font-weight: bold;
vertical-align: middle;

View File

@@ -1,6 +1,7 @@
@font-face {
font-family: octicons-link;
src: url(data:font/woff;charset=utf-8;base64,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)
src:
url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==)
format('woff');
}
@@ -61,7 +62,7 @@
-webkit-text-size-adjust: 100%;
color: var(--markdown-body, --page-background);
line-height: 1.5;
font-family: 'Open Sans', sans-serif;
font-family: var(--primary-font-family);
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
@@ -188,6 +189,7 @@
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
font-family: var(--heading-font-family, var(--primary-font-family));
margin-bottom: 0;
margin-top: 0;
}
@@ -265,7 +267,7 @@
.markdown-body code,
.markdown-body pre {
font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;
font-family: var(--monospace-font-family);
font-size: 12px;
}
@@ -555,57 +557,75 @@ pre[class*='language-'] {
.token.atrule {
color: var(--markdown-syntax-atrule-color, #d73a49);
}
.token.attr-name {
color: var(--markdown-syntax-attr-name-color, #d73a49);
}
.token.boolean {
color: var(--markdown-syntax-boolean-color, #005cc5);
}
.token.class-name {
color: var(--markdown-syntax-class-name-color, #6f42c1);
}
.token.constant {
color: var(--markdown-syntax-constant-color, #005cc5);
}
.token.entity {
color: var(--markdown-syntax-entity-color, #005cc5);
}
.token.function {
color: var(--markdown-syntax-function-color, #6f42c1);
}
.token.inserted {
color: var(--markdown-syntax-inserted-color, #005cc5);
}
.token.keyword {
color: var(--markdown-syntax-keyword-color, #d73a49);
}
.token.number {
color: var(--markdown-syntax-number-color, #005cc5);
}
.token.operator {
color: var(--markdown-syntax-operator-color, #005cc5);
}
.token.property {
color: var(--markdown-syntax-property-color, #005cc5);
}
.token.punctuation {
color: var(--markdown-syntax-punctuation-color, #005cc5);
}
.token.regex {
color: var(--markdown-syntax-regex-color, #032f62);
}
.token.selector {
color: var(--markdown-syntax-selector-color, #22863a);
}
.token.symbol {
color: var(--markdown-syntax-symbol-color, #005cc5);
}
.token.tag {
color: var(--markdown-syntax-tag-color, #22863a);
}
.token.url {
color: var(--markdown-syntax-url-color, #005cc5);
}
.token.variable {
color: var(--markdown-syntax-variable-color, #005cc5);
}
@@ -613,6 +633,7 @@ pre[class*='language-'] {
.language-autohotkey .token.selector {
color: var(--markdown-syntax-hotkey-selector-color, #d73a49);
}
.language-autohotkey .token.keyword {
color: var(--markdown-syntax-keyword-color, #22863a);
}

View File

@@ -14,7 +14,11 @@ html {
--page-background: white;
--footer-background: rgba(0, 0, 0, 0.1);
/* typography */
--text-color: black;
--primary-font-family: 'Open Sans', sans-serif;
--secondary-font-family: 'Montserrat', sans-serif;
--monospace-font-family: 'SFMono-Regular', 'Consolas', 'Liberation Mono', 'Menlo', 'Courier', monospace;
}
html.dark {
@@ -32,8 +36,10 @@ html.dark {
--page-background: #333;
--footer-background: #4f4f4f;
/* typography */
--text-color: white;
/* markdown */
--markdown-octicon-link: white;
--markdown-syntax-background-color: #a0a0a0;
--markdown-link-color: #fb7881;

View File

@@ -2,10 +2,6 @@
{
"name": "Discover",
"children": [
{
"text": "Blog",
"href": "/blog/"
},
{
"text": "Help and Feedback",
"href": "https://github.com/modernweb-dev/rocket/issues"
@@ -23,19 +19,11 @@
"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/master/CONTRIBUTING.md"

View File

@@ -1,6 +1,6 @@
{%- for entry in collections.header %}
<a href="{{ entry.url | url }}" class="
{% if entry.url == page.url %} current {% endif %}
{% if (page.url.search(entry.url) !== -1) and (page.url !== '/') %} active {% endif %}
{% if page.url and page.url.search and (page.url.search(entry.url) !== -1) and (page.url !== '/') %} active {% endif %}
">{{ entry.data.eleventyNavigation.key }}</a>
{%- endfor %}

View File

@@ -1,6 +1,6 @@
<div class="sidebar-bottom">
<hr>
{% include 'partials/_shared/darkSwitch.njk' %}
<hr/> {% include 'partials/_shared/darkSwitch.njk' %}
{% if site.helpUrl %}
<a href="{{ site.helpUrl | url }}">Help and Feedback</a>
{% endif %}
</div>