From 1839dd7fbf3ec153d1ba23ee6f8dff88c31d854a Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Fri, 22 May 2020 17:03:26 +0200 Subject: [PATCH] new post: gatsby-redirect-from --- .../gatsby-redirect-from-teaser.png | Bin 0 -> 30331 bytes .../2020-05-22-gatsby-redirect-from/index.md | 102 ++++++++++++++++++ src/components/atoms/Changelog.module.scss | 7 +- src/components/atoms/Changelog.tsx | 2 +- src/styles/global.scss | 27 +++++ 5 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 content/posts/2020-05-22-gatsby-redirect-from/gatsby-redirect-from-teaser.png create mode 100644 content/posts/2020-05-22-gatsby-redirect-from/index.md diff --git a/content/posts/2020-05-22-gatsby-redirect-from/gatsby-redirect-from-teaser.png b/content/posts/2020-05-22-gatsby-redirect-from/gatsby-redirect-from-teaser.png new file mode 100644 index 0000000000000000000000000000000000000000..c81cfc458fcfd189dc95c14eee7051265aaecf51 GIT binary patch literal 30331 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 literal 0 HcmV?d00001 diff --git a/content/posts/2020-05-22-gatsby-redirect-from/index.md b/content/posts/2020-05-22-gatsby-redirect-from/index.md new file mode 100644 index 00000000..967032a2 --- /dev/null +++ b/content/posts/2020-05-22-gatsby-redirect-from/index.md @@ -0,0 +1,102 @@ +--- +type: post +date: 2020-05-22T14:08:00.367Z + +title: Redirect plugin for Markdown Pages in Gatsby +image: gatsby-redirect-from-teaser.png +changelog: gatsby-redirect-from + +tags: + - goodies + - gatsby + - development + +toc: true +--- + +Plugin for [Gatsby](https://www.gatsbyjs.org) to create redirects based on a list in your Markdown frontmatter, mimicking the behavior of [jekyll-redirect-from](https://github.com/jekyll/jekyll-redirect-from). + +## Features + +By adding a `redirect_from` list of URLs to your YAML frontmatter, this plugin creates client-side redirects for all of them at build time, with Gatsby's [createRedirect](https://www.gatsbyjs.org/docs/actions/#createRedirect) used under the hood. + +By combining this plugin with [gatsby-plugin-meta-redirect](https://github.com/getchalk/gatsby-plugin-meta-redirect) you get simple [server-side redirects](#server-side-redirects) out of your `redirect_from` lists. + +## Usage + +First, install the plugin from your project's root: + +```bash +cd yourproject/ +npm i gatsby-redirect-from gatsby-plugin-meta-redirect +``` + +Then add it to your `gatsby-config.js` file under `plugins`: + +```js +plugins: [ + 'gatsby-redirect-from', + 'gatsby-plugin-meta-redirect' // make sure this is always the last one +] +``` + +That's it for the configuration. + +Finally, use the key `redirect_from` followed by a list in your Markdown file's YAML frontmatter: + +```yaml +--- +title: Aperture File Types +redirect_from: + - /new-goodies-aperture-file-types-icons/ + - /goodie-updated-aperture-file-types-v11/ + - /aperture-file-types-v12-released/ + - /2008/04/aperture-file-types/ + # note: forward slashes are required +--- + +``` + +## Default Query + +Plugin assumes the default setup from [gatsby-starter-blog](https://github.com/gatsbyjs/gatsby-starter-blog), with Markdown files processed by [gatsby-transformer-remark](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark), and adding a field `slug` for each markdown node. Resulting in the availability of a `allMarkdownRemark` query. Head over to gatsby-starter-blog's [gatsby-node.js](https://github.com/gatsbyjs/gatsby-starter-blog/blob/master/gatsby-node.js#L57) file to see how this is done. + +Optionally, you can pass a different query to this [plugin's configuration](#options). + +## Server-Side Redirects + +Gatsby's `createRedirect` only creates client-side redirects, so further integration is needed to get server redirects. Which is highly dependent on your hosting, if you want to have the proper HTML status codes like `301`, Apache needs `.htaccess` rules for that, nginx needs `rewrite` rules, S3 needs `RoutingRules`, Vercel needs entries in a `vercel.json`, and so on. + +One simple way, as suggested by default in installation, is to use [gatsby-plugin-meta-redirect](https://github.com/getchalk/gatsby-plugin-meta-redirect) to generate static HTML files with a `` tag for every `createRedirect` call. So it works out of the box with this plugin without further adjustments. + +This way is the most compatible way of handling redirects, working with pretty much every hosting provider. Only catch: it's only for usability, no SEO-friendly `301` redirect is set anywhere. + +## Options + +Plugin does not require to be configured but some additional customization options are available: + +| Option | Default | Description | +| ------ | ------------------- | ------------------------------------------------------------------------------------------------ | +| query | `allMarkdownRemark` | Modify the query being used to get the frontmatter data. E.g. if you use MDX, set `allMdx` here. | + +Add options to the plugins's configuration object in `gatsby-config.js` like so: + +```js +plugins: [ + { + resolve: 'gatsby-redirect-from', + options: { + query: 'allMdx' + } + }, + 'gatsby-plugin-meta-redirect' // make sure this is always the last one +] +``` + +## Check out & contribute + +Head over to GitHub for more documentation, take a peek into the code, or to report some bugs. + +

+ GitHub +

diff --git a/src/components/atoms/Changelog.module.scss b/src/components/atoms/Changelog.module.scss index 70b94acc..fceaabb1 100644 --- a/src/components/atoms/Changelog.module.scss +++ b/src/components/atoms/Changelog.module.scss @@ -6,7 +6,7 @@ } .content { - padding-top: $spacer * 2; + padding-top: $spacer; padding-left: $spacer / 2; margin-left: $spacer / 2; border-left: 1px solid $brand-grey-dimmed; @@ -60,6 +60,10 @@ ul { font-size: $font-size-small; margin-left: $spacer / 8; + + li { + margin-bottom: $spacer / 8; + } } } @@ -67,7 +71,6 @@ font-size: $font-size-mini; font-family: $font-family-base; font-weight: $font-weight-base; - padding-top: $spacer / 2; padding-bottom: $spacer / 2; &, diff --git a/src/components/atoms/Changelog.tsx b/src/components/atoms/Changelog.tsx index ae664006..3963d9f0 100644 --- a/src/components/atoms/Changelog.tsx +++ b/src/components/atoms/Changelog.tsx @@ -35,7 +35,6 @@ export function PureChangelog({ Changelog
- {changelogHtml}

sourced from{' '} @@ -44,6 +43,7 @@ export function PureChangelog({

+ {changelogHtml}
) diff --git a/src/styles/global.scss b/src/styles/global.scss index 5078c000..05ffad06 100644 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -360,6 +360,33 @@ blockquote { } } +table { + border-spacing: 0; + border-collapse: collapse; + display: block; + margin-bottom: $spacer; + border-top: 1px solid $brand-grey-dimmed; + border-bottom: 1px solid $brand-grey-dimmed; + + th { + border-bottom: 1px solid $brand-grey-dimmed; + } + + th, + td { + padding: $spacer / 2; + word-wrap: normal; + word-break: normal; + } + + :global(.dark) & { + &, + th { + border-color: $brand-grey; + } + } +} + // Selection /////////////////////////////////////