{tagHeader}
+-
+ {postLinks}
+
-
+ + + Back to API Reference + ++
+
diff --git a/gatsby-node.js b/gatsby-node.js index 1c73a4e..ff006f3 100755 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,10 +1,10 @@ -const _ = require('lodash') -const path = require('path') -const { createFilePath } = require('gatsby-source-filesystem') -const { fmImagesToRelative } = require('gatsby-remark-relative-images') +const _ = require("lodash"); +const path = require("path"); +const { createFilePath } = require("gatsby-source-filesystem"); +const { fmImagesToRelative } = require("gatsby-remark-relative-images"); exports.createPages = ({ actions, graphql }) => { - const { createPage } = actions + const { createPage } = actions; return graphql(` { @@ -25,14 +25,14 @@ exports.createPages = ({ actions, graphql }) => { } `).then(result => { if (result.errors) { - result.errors.forEach(e => console.error(e.toString())) - return Promise.reject(result.errors) + result.errors.forEach(e => console.error(e.toString())); + return Promise.reject(result.errors); } - const posts = result.data.allMarkdownRemark.edges + const posts = result.data.allMarkdownRemark.edges; posts.forEach(edge => { - const id = edge.node.id + const id = edge.node.id; createPage({ path: edge.node.fields.slug, tags: edge.node.frontmatter.tags, @@ -41,47 +41,47 @@ exports.createPages = ({ actions, graphql }) => { ), // additional data can be passed via context context: { - id, - }, - }) - }) + id + } + }); + }); // Tag pages: - let tags = [] + let tags = []; // Iterate through each post, putting all found tags into `tags` posts.forEach(edge => { if (_.get(edge, `node.frontmatter.tags`)) { - tags = tags.concat(edge.node.frontmatter.tags) + tags = tags.concat(edge.node.frontmatter.tags); } - }) + }); // Eliminate duplicate tags - tags = _.uniq(tags) + tags = _.uniq(tags); // Make tag pages tags.forEach(tag => { - const tagPath = `/tags/${_.kebabCase(tag)}/` + const tagPath = `/tags/${_.kebabCase(tag)}/`; createPage({ path: tagPath, - component: path.resolve(`src/templates/tags.js`), + component: path.resolve(`src/templates/tags-page.js`), context: { - tag, - }, - }) - }) - }) -} + tag + } + }); + }); + }); +}; exports.onCreateNode = ({ node, actions, getNode }) => { - const { createNodeField } = actions - fmImagesToRelative(node) // convert image paths for gatsby images + const { createNodeField } = actions; + fmImagesToRelative(node); // convert image paths for gatsby images if (node.internal.type === `MarkdownRemark`) { - const value = createFilePath({ node, getNode }) + const value = createFilePath({ node, getNode }); createNodeField({ name: `slug`, node, - value, - }) + value + }); } -} +}; diff --git a/src/templates/tags-page.js b/src/templates/tags-page.js new file mode 100755 index 0000000..13b6889 --- /dev/null +++ b/src/templates/tags-page.js @@ -0,0 +1,84 @@ +import React from "react"; +import Helmet from "react-helmet"; +import { Link, graphql } from "gatsby"; +import Layout from "../components/Layout"; +import ModelList from "../components/ModelList"; + +class TagRoute extends React.Component { + render() { + const posts = this.props.data.allMarkdownRemark.edges; + const postLinks = posts.map(post => ( +
- Browse all tags -
-