Skip to content

Commit

Permalink
Merge branch 'master' into prop-types
Browse files Browse the repository at this point in the history
  • Loading branch information
AustinGreen authored Mar 23, 2018
2 parents 7e82411 + 6b929b7 commit 01f846e
Show file tree
Hide file tree
Showing 12 changed files with 205 additions and 3 deletions.
31 changes: 30 additions & 1 deletion gatsby-node.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const _ = require('lodash')
const path = require('path')
const { createFilePath } = require('gatsby-source-filesystem')

Expand All @@ -14,6 +15,7 @@ exports.createPages = ({ boundActionCreators, graphql }) => {
slug
}
frontmatter {
tags
templateKey
}
}
Expand All @@ -26,10 +28,13 @@ exports.createPages = ({ boundActionCreators, graphql }) => {
return Promise.reject(result.errors)
}

result.data.allMarkdownRemark.edges.forEach(edge => {
const posts = result.data.allMarkdownRemark.edges

posts.forEach(edge => {
const id = edge.node.id
createPage({
path: edge.node.fields.slug,
tags: edge.node.frontmatter.tags,
component: path.resolve(
`src/templates/${String(edge.node.frontmatter.templateKey)}.js`
),
Expand All @@ -39,6 +44,30 @@ exports.createPages = ({ boundActionCreators, graphql }) => {
},
})
})

// Tag pages:
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)
}
})
// Eliminate duplicate tags
tags = _.uniq(tags)

// Make tag pages
tags.forEach(tag => {
const tagPath = `/tags/${_.kebabCase(tag)}/`

createPage({
path: tagPath,
component: path.resolve(`src/templates/tags.js`),
context: {
tag,
},
})
})
})
}

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
"gatsby-source-filesystem": "^1.5.23",
"gatsby-transformer-remark": "^1.7.33",
"gatsby-transformer-sharp": "^1.6.21",
"lodash": "^4.17.5",
"lodash-webpack-plugin": "^0.11.4",
"prop-types": "^15.6.0",
"react": "^16.2.0",
"react-helmet": "^5.2.0"
Expand Down
1 change: 1 addition & 0 deletions src/cms/preview-templates/BlogPostPreview.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const BlogPostPreview = ({ entry, widgetFor }) => (
<BlogPostTemplate
content={widgetFor('body')}
description={entry.getIn(['data', 'description'])}
tags={entry.getIn(['data', 'tags'])}
title={entry.getIn(['data', 'title'])}
/>
)
Expand Down
15 changes: 15 additions & 0 deletions src/layouts/all.sass
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ $kaldi-red-invert: #fff
$primary: $kaldi-red
$primary-invert: $kaldi-red-invert

.content .taglist
list-style: none
margin-bottom: 0
margin-left: 0
margin-right: 1.5rem
margin-top: 1.5rem
display: flex
flex-wrap: wrap
justify-content: left
align-items: center
li
padding: 0 2rem 1rem 0
margin-bottom: 1.5rem
margin-top: 0

// Helper Classes
.full-width-image-container
width: 100vw
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ templateKey: blog-post
title: Making sense of the SCAA’s new Flavor Wheel
date: 2016-12-17T15:04:10.000Z
description: The Coffee Taster’s Flavor Wheel, the official resource used by coffee tasters, has been revised for the first time this year.
tags:
- flavor
- tasting
---

![flavor wheel](/img/flavor_wheel.jpg)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ templateKey: blog-post
title: A beginners’ guide to brewing with Chemex
date: 2017-01-04T15:04:10.000Z
description: Brewing with a Chemex probably seems like a complicated, time-consuming ordeal, but once you get used to the process, it becomes a soothing ritual that's worth the effort every time.
tags:
- brewing
- chemex
---
![chemex](/img/chemex.jpg)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ date: 2017-01-04T15:04:10.000Z
description: >-
We’re proud to announce that we’ll be offering a small batch of Jamaica Blue
Mountain coffee beans in our store next week.
tags:
- jamaica
- green beans
- flavor
- tasting
---

We expect the shipment of a limited quantity of green beans next Monday. We’ll be offering the roasted beans from Tuesday, but quantities are limited, so be quick.
Expand Down
49 changes: 49 additions & 0 deletions src/pages/tags/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import React from 'react'
import { kebabCase } from 'lodash'
import Helmet from 'react-helmet'
import Link from 'gatsby-link'

const TagsPage = ({
data: { allMarkdownRemark: { group }, site: { siteMetadata: { title } } },
}) => (
<section className="section">
<Helmet title={`Tags | ${title}`} />
<div className="container content">
<div className="columns">
<div
className="column is-10 is-offset-1"
style={{ marginBottom: '6rem' }}
>
<h1 className="title is-size-2 is-bold-light">Tags</h1>
<ul className="taglist">
{group.map(tag => (
<li key={tag.fieldValue}>
<Link to={`/tags/${kebabCase(tag.fieldValue)}/`}>
{tag.fieldValue} ({tag.totalCount})
</Link>
</li>
))}
</ul>
</div>
</div>
</div>
</section>
)

export default TagsPage

export const tagPageQuery = graphql`
query TagsQuery {
site {
siteMetadata {
title
}
}
allMarkdownRemark(limit: 1000) {
group(field: frontmatter___tags) {
fieldValue
totalCount
}
}
}
`
19 changes: 18 additions & 1 deletion src/templates/blog-post.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import React from 'react'
import PropTypes from 'prop-types'
import { kebabCase } from 'lodash'
import Helmet from 'react-helmet'
import Link from 'gatsby-link'
import Content, { HTMLContent } from '../components/Content'

export const BlogPostTemplate = ({
content,
contentComponent,
description,
tags,
title,
helmet,
}) => {
Expand All @@ -23,6 +26,18 @@ export const BlogPostTemplate = ({
</h1>
<p>{description}</p>
<PostContent content={content} />
{tags && tags.length ? (
<div style={{ marginTop: `4rem` }}>
<h4>Tags</h4>
<ul className="taglist">
{tags.map(tag => (
<li key={tag + `tag`}>
<Link to={`/tags/${kebabCase(tag)}/`}>{tag}</Link>
</li>
))}
</ul>
</div>
) : null}
</div>
</div>
</div>
Expand All @@ -46,7 +61,8 @@ const BlogPost = ({ data }) => {
content={post.html}
contentComponent={HTMLContent}
description={post.frontmatter.description}
helmet={<Helmet title={`Blog | ${post.frontmatter.title}`} />}
helmet={<Helmet title={`${post.frontmatter.title} | Blog`} />}
tags={post.frontmatter.tags}
title={post.frontmatter.title}
/>
)
Expand All @@ -69,6 +85,7 @@ export const pageQuery = graphql`
date(formatString: "MMMM DD, YYYY")
title
description
tags
}
}
}
Expand Down
71 changes: 71 additions & 0 deletions src/templates/tags.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import React from 'react'
import Helmet from 'react-helmet'
import Link from 'gatsby-link'

class TagRoute extends React.Component {
render() {
const posts = this.props.data.allMarkdownRemark.edges
const postLinks = posts.map(post => (
<li key={post.node.fields.slug}>
<Link to={post.node.fields.slug}>
<h2 className="is-size-2">{post.node.frontmatter.title}</h2>
</Link>
</li>
))
const tag = this.props.pathContext.tag
const title = this.props.data.site.siteMetadata.title
const totalCount = this.props.data.allMarkdownRemark.totalCount
const tagHeader = `${totalCount} post${
totalCount === 1 ? '' : 's'
} tagged with “${tag}”`

return (
<section className="section">
<Helmet title={`${tag} | ${title}`} />
<div className="container content">
<div className="columns">
<div
className="column is-10 is-offset-1"
style={{ marginBottom: '6rem' }}
>
<h3 className="title is-size-4 is-bold-light">{tagHeader}</h3>
<ul className="taglist">{postLinks}</ul>
<p>
<Link to="/tags/">Browse all tags</Link>
</p>
</div>
</div>
</div>
</section>
)
}
}

export default TagRoute

export const tagPageQuery = graphql`
query TagPage($tag: String) {
site {
siteMetadata {
title
}
}
allMarkdownRemark(
limit: 1000
sort: { fields: [frontmatter___date], order: DESC }
filter: { frontmatter: { tags: { in: [$tag] } } }
) {
totalCount
edges {
node {
fields {
slug
}
frontmatter {
title
}
}
}
}
}
`
1 change: 1 addition & 0 deletions static/admin/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ collections:
- {label: "Publish Date", name: "date", widget: "datetime"}
- {label: "Description", name: "description", widget: "text"}
- {label: "Body", name: "body", widget: "markdown"}
- {label: "Tags", name: "tags", widget: "list"}

- name: "pages"
label: "Pages"
Expand Down
8 changes: 7 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5761,6 +5761,12 @@ lodash-id@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/lodash-id/-/lodash-id-0.14.0.tgz#baf48934e543a1b5d6346f8c84698b1a8c803896"

lodash-webpack-plugin@^0.11.4:
version "0.11.4"
resolved "https://registry.yarnpkg.com/lodash-webpack-plugin/-/lodash-webpack-plugin-0.11.4.tgz#6c3ecba3d4b8d24b53940b63542715c5ed3c4ac5"
dependencies:
lodash "^4.17.4"

lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
Expand Down Expand Up @@ -5965,7 +5971,7 @@ [email protected]:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"

lodash@4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.12.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.4:
lodash@4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.12.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, lodash@~4.17.4:
version "4.17.5"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"

Expand Down

0 comments on commit 01f846e

Please sign in to comment.