Skip to content

Commit

Permalink
[v2] Merge in master (#4114)
Browse files Browse the repository at this point in the history
* Revert "Update gatsby-browser.js (#3694)"

This reverts commit 644d081.

* Add 'page.layout' param to 'createPage' docs (#3717)

* Publish

 - gatsby-plugin-no-sourcemaps@1.0.0

* Add missing (official) plugins & little fixes (#3718)

* Add missing (official) plugins & little fixes

As talked about in:
#3708

Fingers crossed that I didn't mess up the alphabetical order :P
(I actually changed the order a little bit)

* Add gatsby-source-graphcms

* fix(transformer-remark): resolve htmlAst correctly (#3719)

closes #3711

* Added my new websites to showcase (#3729)

* Adjust default link header value in netlify plugin readme (#3723)

* Change "primatives" to "primitives" in GraphQL docs (#3716)

* [gatsby-transformer-remark] Reparse `raw` nodes in `htmlAst` (#3731)

Preprocessing via `gatsby-remark-*` transformations introduces `raw`
nodes into the AST. Adding this step fully enables the client to render
the AST as React components, finishing the work started in #3596.

* Publish

 - gatsby-plugin-netlify@1.0.16
 - gatsby-plugin-no-sourcemaps@1.0.1
 - gatsby-transformer-remark@1.7.30
 - gatsby@1.9.170

* fix(gatsby-link): correct dependency declaration (#3707)

* fix(gatsby-link): correct dependency declaration

The code depends on `react-router-dom`, and therefore it should be declared as a
direct dependency, not a dev one. Also, it needs `@types/react-router-dom` for
index.d.ts.

* chore(gatsby-link): declare gatsby v1 as a peer dependency

* Publish

 - gatsby-link@1.6.35
 - gatsby@1.9.171

* If someone uses a private repo git address accessed over ssh use that otherwise use normal git address (#3735)

* Publish

 - gatsby-cli@1.1.32
 - gatsby@1.9.172

* Update CONTRIBUTING.md (#3737)

incorrect usage of "it's"

* Add freeCodeCamp source (#3739)

* Add Hack Club to projects list (#3748)

* Link title not particularly accurate

* Fix link syntax (#3749)

* add basic documentation about publicURL field on File node (#3752)

* add basic documentation about copying files from File nodes to build directory

* A few copy edits

* Format

* Format

* [www] Fix link to "Adding Markdown Pages" in List docs (#3747)

* [www] Add "gatsby-plugin-fela" to list of community plugins

* Semi-Colons (#3764)

* Remove mention of not-written part 5 of the tutorial

* [www] Add ERC dEX website to showcase (#3766)

* make ComponentRenderer shouldUpdateComponent return true when props c… (#3516)

* make ComponentRenderer shouldUpdateComponent return true when props change

* use shallow compare

* remove console log

* semi-colons (#3765)

* [gatsby] Report an error when layout file is missing (#3762)

* [gatsby] Report an error when layout file is missing

* Update pages-writer.js

* format

* Publish

 - gatsby-plugin-no-sourcemaps@1.0.2
 - gatsby-plugin-typography@1.7.13
 - gatsby-source-drupal@2.0.17
 - gatsby-source-filesystem@1.5.16
 - gatsby-source-wordpress@2.0.52
 - gatsby@1.9.173

* [gatsby-plugin-netlify] create rewrite rules for pages that use matchPath (#3211)

* [gatsby-plugin-netlify] create rewrite rules for pages that use matchPath

* Update README.md

* Add a no-color option to disable the colors (#3755)

* disable boolean-negation in yargs

* add no-color option

* [www] Add gatsby-source-unsplash to list of community plugins (#3768)

* format

* Publish

 - gatsby-cli@1.1.33
 - gatsby-plugin-netlify@1.0.17
 - gatsby@1.9.174

* Add setTimeout before calling onRouteUpdate to ensure React has written to DOM before plugins run code (#3772)

* Improve errors for invalid data passed to createPage fixes #3771 (#3773)

* Fix not scrolling to top on PUSH fixes #3770 #3249 (#3775)

* [examples/using-remark]: Custom React components in Markdown files (#3732)

* Publish

 - gatsby-plugin-google-analytics@1.0.17
 - gatsby-plugin-twitter@1.0.16
 - gatsby-react-router-scroll@1.0.9
 - gatsby@1.9.175

* [www] Prevent search shortcut from breaking other input elements (#3777)

* Edits from Ben's feedback

* Logos

* Delete React_logo_wordmark.png

* Delete contentful_logo_with_tagline.png

* logos

* Added react and contentful logos

* Update index.md

* Delete React-logo.png

* Delete contentful-logo.png

* logos smaller

* updated intro

* Update index.md

* [www] Add gatsby-plugin-sentry to list of community plugins (#3788)

* [www] Add gatsby-plugin-meta-redirect to list of community plugins (#3798)

* Form currently refreshes the page on pressing enter (#3779)

* Added some notes on how the contentful source plugin interacts with contentful's content models. (#3794)

* More hot reloading fixes (#3769)

* use createPage singleton in dev-404-page

closes #3551

* write to a temp file and rename

decrease the chance of reading from an incomplete file

cc #3094 #3201

* change dev-404-page to implement createPagesStatefully

* update the jest snapshot

* Validate starterPath isn't a dot fixes #3789 (#3810)

* [gatsby] Pass location state to history (#3802)

* Pass full location object to history

* Update navigateTo param to be more precise

* Pass location to navigateTo in gatsby-link

* Update navigateTo types

* Fix issue that Gatsby can't sometimes find layout and page files on Windows (#3796)

* Fix issue with missing layouts on Windows

* Fix issue with missing pages on Windows

* Publish

 - gatsby-cli@1.1.34
 - gatsby-link@1.6.36
 - gatsby-source-contentful@1.3.35
 - gatsby@1.9.176

* Add iContract blog to readme (#3805)

* [gatsby-plugin-less] Extend less-plugin with support for `modifyVars` (#3801)

* [gatsby-plugin-less] Extend less-plugin with support for `modifyVars`

The less plugin did its job, but when I was going to use it with a
library I experienced that it was lacking the ability to modify
less-variables. This made it hard to customize less libraries.

By letting the user provide a `options` in `gatsby-config.js`, the
plugin can overwrite variables defined in the less stylesheet and hence
makes it a breeze to customize libraries.

The user has two options to include vars: either a object defined
directly in the `gatsby-config.js` or define a file which exports an
object that will be used as the options.

* Update README.md

* format

* Publish

 - gatsby-plugin-less@1.1.1
 - gatsby-source-contentful@1.3.36
 - gatsby@1.9.177

* Fix a typo in the gatsby-plugin-less README (#3815)

* Call done() from dev-404-page during production builds so build doesn't stall (#3827)

* Publish

 - gatsby-plugin-less@1.1.2
 - gatsby@1.9.178

* Update README.md (#3828)

* Added logos (#3781)

* Added logos

Not sure how to adjust the sizes here. I made them smaller on my computer but not sure if it worked

* Reduce React and Contentful logo width to 350px

* Log error in createPath (#3814)

Fix conditional to show error when path or component are missing in the createPath function

* add warning about query that is not getting executed if it's exported from file that is page/template or layout (#3786)

* Update README.md (#3821)

add module.exports to How to use

* Update README.md

* Added Hampton starter (#3826)

* [www] add search input to home page (#3662)

* Experiment adding search input to home page

* Prettier

* Comment unused imports

* Display social icons when viewport is wide enough

* Use alternate colours at Hd breakpoint on home page

* Add name of file above code snippet (#3835)

* [www] Fix typo in styleshout link (#3839)

* Add "Dona Rita" website to Showcase (incl. source) (#3838)

* check markdown images, ensure parent is File before referencing dir (#3831)

* check markdown images, ensure parent is File before referencing dir

* add check for parent

* [www] Fix typo in docs/building-apps-with-gatsby.md (#3863)

* Bump scroll-behavior dependency to fix ios swipe jank (#3866)

* Publish

 - gatsby-plugin-less@1.1.3
 - gatsby-react-router-scroll@1.0.10
 - gatsby-remark-copy-linked-files@1.5.26
 - gatsby-source-drupal@2.0.18
 - gatsby-source-filesystem@1.5.17
 - gatsby-source-wordpress@2.0.53
 - gatsby@1.9.179

* Fix positioning of search results at mobile breakpoint on homepage (#3867)

* [www] Add tutorial to awesome list (#3855)

This is the first part of a german tutorial series about Gatsby. This part is about the basic creation of a blog. In the next parts I'll cover more advanced features :)

* [www] Update Netlify URL in Starter List (#3847)

* Add gatsby-wordpress-starter (#3848)

* exclude offline plugin app shell from sitemap (#3844)

* [gatsby-source-contentful] Add support to prefer WebP images (#3832)

* Extend contentful resolutions and sizes to include webp src and srcSet

* Add new contentful fragments

* Add fragments to gatsby-image README

* Add example for using webp to use-contentful site

* Display image examples in a grid

* Update docs for adding custom JavaScript to home.js (#3869)

* Blog post headless CMS (#3846)

* Blog post headless CMS

A couple things I'm not sure about:

- Running sites offline paragraph. Check for accuracy pls!

- Better quote from Deane that anyone has in mind?

- Can cut down assessment of headless CMSs to omit obscure complaints...

* Edits to wording and sprinkling in GatsbyJS 

Please check paragraph about running sites offline in India! I feel like there's potential there but maybe I'm off base

* Update index.md

* don't try to extract queries from directories with names ending in .js(x) or .ts (#3861)

* Format

* [gatsby-source-filesystem] don't try to process same remote file multiple times, cache promises and return them on subsequent calls (#3859)

* Experimenting (#3843)

* Update README.md (#3822)

add module.exports to How to use

* Format

* Publish

 - gatsby-image@1.0.35
 - gatsby-plugin-less@1.1.4
 - gatsby-plugin-sitemap@1.2.12
 - gatsby-source-contentful@1.3.37
 - gatsby-source-drupal@2.0.19
 - gatsby-source-filesystem@1.5.18
 - gatsby-source-wordpress@2.0.54
 - gatsby-transformer-sharp@1.6.18
 - gatsby@1.9.180

* Use HTTPS over git:// when cloning starters (#3820)

`git://` (which is what `hostInfo.git(...)` gets you) uses unencrypted transport isn't recommended as a way to clone GitHub repositories (https://help.github.com/articles/which-remote-url-should-i-use/).  This change uses HTTPS instead.

* Add gatsby-transformer-screenshot (#3526)

* Add gatsby-plugin-screenshot

* Rename to gatsby-transformer-screenshot

* Rename

* Fix prepublish error

* Expand on documentation

* Run format-packages

* Use API Gateway

* Use official deployed Lambda

* Update README.md

* Format

* Publish

 - gatsby-cli@1.1.35
 - gatsby-transformer-screenshot@1.0.1
 - gatsby@1.9.181

* [gatsby-plugin-feed] Fix missing colon in Readme (#3872)

* Revert "Use HTTPS over git:// when cloning starters (#3820)" (#3876)

This reverts commit 8261ac3.

* Publish

 - gatsby-cli@1.1.36
 - gatsby-plugin-feed@1.3.17
 - gatsby@1.9.182

* use simple https to clone starters (#3875)

* Publish

 - gatsby-cli@1.1.37
 - gatsby@1.9.183

* [www] Add gatsby-starter-simple-landing (#3877)

* bigger photo

* Update index.md

* add www.aslezak.com to showcase (#3878)

* Added new blog, new author and new avatar (#3879)

* Added new blog, new author and new avatar

* Fix links

* Spelling issue corrected, wp file extension changed and quotes corrected

* format blog post

* Update index.md (#3883)

* Add community source plugin to docs (#3884)

* [www] Fix small typo (#3891)

* Document all options for gatsby-remark-images fixes #3882 (#3894)

* Document all options for gatsby-remark-images fixes #3882

* remove

* Edits to wording

* [www] Add `PostLink` component example to docs/adding-a-list-of-markdown-blog-posts/ (#3887)

* [www] Add `PostLink` component example to docs/adding-a-list-of-markdown-blog-posts/

Ref. #3886

* Add headline for `PostLink` component

* Add possessive adjective

* Make code blocks jsx

* Add anchors to h1's in docs (#3892)

* Add anchors to h1's in docs

* Manually add some anchors

* exclude Netlify CMS styles in build-css phase (#3895)

* Fix markdown table syntax in README (#3897)

* Publish

 - gatsby-plugin-netlify-cms@1.0.6
 - gatsby-remark-images@1.5.42
 - gatsby@1.9.184

* Fix typo (#3899)

* update prismjs-language-dependencies.js (#3898)

* Publish

 - gatsby-remark-embed-snippet@1.0.7
 - gatsby-remark-prismjs@1.2.13

* Update snapshots and packages and format w/ new Prettier (#3902)

* Update snapshots and packages and format w/ new Prettier

* Update snapshot in embed package

* [gatsby-transformer-remark] Add `pathPrefix` to relative links (#3823)

* [gatsby-transformer-remark] Add `pathPrefix` to relative links
Ensure markdown relative links include `pathPrefix`.
Fixes #3316

* [gatsby-transformer-remark] add minor comment to `withPathPrefix`

* [gatsby-transformer-remark] add `pathPrefix` to `cacheKey` functions

* [gatsby-transformer-remark] remove `node.url.startsWith(pathPrefix)` condition for `withPathPrefix` logic

* Use "npm-run-all" to run scripts (#3797)

* Use "npm-run-all" to run scripts

[npm-run-all](https://github.com/mysticatea/npm-run-all) is a cross-browser approach to running npm tasks in series (`-s`) or parallel (`-p`). Rather than using a platform specific method to run scripts (e.g. `&&`), npm-run-all will work on all platforms and supports using Yarn if running with Yarn. I made a guess as to whether certain scripts should be run in series or parallel but feel free to change if my choices aren't optimal.

* Add yarn.lock and fix some scripts.

* Move npm-run-all to dev dep.

* Fix bootstrap script.

* [www] Starters: Fix case according to vendor name definition (#3903)

* http://getbootstrap.com/
* http://postcss.org/
* https://sass-lang.com/
* https://bootswatch.com/

* Publish

 - gatsby-remark-embed-snippet@1.0.8
 - gatsby-remark-images@1.5.43
 - gatsby-remark-prismjs@1.2.14
 - gatsby-transformer-remark@1.7.31

* add info about org-mode transformer plugin (#3907)

I created this transformer plugin similar to the offical remark one, that parses org-mode files.

* [www] add gatsby-orga starter (#3908)

* update odayaka.net to showcase (#3909)

update odayaka.net to showcase

* [www] Add ventura-digital.de to Showcase (#3916)

* Minor edits for absolute beginners

After doing this tutorial as a complete beginner myself, I thought a couple of lines could be made even more newby-friendly.

* Update tutorial.js (#3927)

* ✨ Support filtering on linked nodes (#3691)

* ✨ Support filtering on linked nodes

The filtering is done by extracting all the related nodes using `extractFieldExample`. The example values are then cached to save some time. (As of this patch, caching is not tested automatically)

Further linking are disabled to avoid cyclic dependencies (input fields only).

TODO: Filtering on nodes linked by mappings and File

Note: If linking is done via array of IDs, only the structure of the first item is extracted. I'll be happy to add union support if someone can show me how to `$in` filter on an array of object.

Related #3613 #3190

* ✅ Test filtering on linked nodes

* Publish

 - gatsby@1.9.185

* Set default NODE_ENV for `gatsby develop` (#3928)

* Fix broken links (#3930)

* Blog Post - Jam Out Your Blog (#3911)

* Blog Post - Jam Out Your Blog

Vlad Pasculescu’s blog post on using Gatsby with Netify and Prose.io

Signed-off-by: vladpasculescu <vlad@vladpasculescu.com>

* Updated Blog Post for Edits

Edited Jam Out Blog Post for suggested moderator edits.

* Update index.md

* Publish

 - gatsby-cli@1.1.38
 - gatsby@1.9.186

* fix(dev-404-page): route to 404 fails when using plugin-remove-trailing-slashes (#3522)

* fix(dev-404-page): route to 404 fails when using plugin-remove-trailing-slashes

Fixes: #3521

* refactor(dev-404-page): use RegExp.test() as we don't need to return anything

* fix(dev-404-page): route to 404 fails when using plugin-remove-trailing-slashes

updating other occurrence of 404 page check as well

* Automatic file validation for components in src/pages (#3881)

* yarn.lock

* add page validation and fix breaking createPage action tests

* Improve error messages for invalid pages

* Field inferring changes and cleanup (#3688)

* remove not needed edge case for infering array of objects to improve code readability

* don't lose field args and resolve function when infering array (fixes date format options not available in arrays of dates)

* move infering date field to seperate file to improve code readability

* don't recreate date field definition for every date field - we can reuse same object

* create dedicated Date graphql scalar (based on string scalar) for date fields

* pass fieldName to resolver when filtering on types with custom resolvers (date type fields now rely on fieldname info being passed)

* use already constructed nextselector instead of rebuilding it again

* move infering file field to separate file to improve code readability

* create file type field object just once and reuse it

* move trying to infer Files from string paths to inferGraphQLType function where rest of value based inferring is done

* add tests for inferring File from string paths

* add tests for inferring date type from string, array of strings and filtering date fields, move date related test to seperate date test suite

* Publish

 - gatsby@1.9.187

* Return a never to be resolved promise to prevent development server from exiting early fixes #3932 (#3933)

* Publish

 - gatsby-cli@1.1.39
 - gatsby@1.9.188

* format

* Add Cardiogram to README (#3934)

* Fix code highlight in tutorial (#3935)

* small wording change

* [api-ssr-docs] Import `Helmet` not `helmet` (#3940)

* [www] Tutorial: Small wording changes for clarification (#3926)

gatsby-config.js needs to be created (before edited). Also, since the user will be changing windows to stop the process it might be useful to remind them where they were before.

* [docs] Fix small typo (#3946)

* test "exports.default" when validating page component (#3941)

* Publish

 - gatsby@1.9.189

* update environment variables docs to explain how to implement dotenv (#3944)

* [www] Add dedicated „How to File an Issue“ page (#3945)

* move „Filing an Issue“ and „Special Note on Issues“ from the „How to Contribute“ to the new „How to File an Issue“ page
* add an intro paragraph to the new page linking to the GitHub Gatsby issue tracker
* add a paragraph to the new page informing about personal support requests, pointing to Stack Overflow, Reactiflux Discord
* add link to the new page to
  * the docs sidebar’s „Contributing“ section
  * the GitHub issue template
  * the „Community“ page
  * the list of ways to contribute on the „How to Contribute“ page
* link „Triaging GitHub issues“ on the „How to Contribute“ page

* Don't check if React is imported as can import component from other page and never write JSX (#3949)

/cc @bodia-uz

* Publish

 - gatsby@1.9.190

* Add LaserTime Clinic website to Readme (#3951)

* webpack commonsChunkPlugin isframework tester fix for windows dev (#3952)

* Publish

 - gatsby@1.9.191

* type inferring - handle array of Date objects (#3955)

* inferring types: handle array of Date objects

* add tests for inferring arrays of Date objects

* Publish

 - gatsby@1.9.192

* Document how to create custom fragments (#3914)

* Document how to create custom fragments

* Fix ordering

* Add example component exporting a fragment

* Tweak language

* Update index.md (#3957)

* update showcase with Gatsby Manor (#3959)

Gatsby Manor makes themes for GatsbyJS.

* Adds new starter to docs :) (#3971)

* Fix error (#3985)

Talked to Ross Whitehouse, the author, via Medium private message to confirm the errors. Gotten permission to submit PR for the edit.

* Add note about plugin options (#3987)

* Add container as a styled div to styled-components doc (#3988)

* Add Dockerfile to start GraphiQL using www's data (#3992)

* fix: prevent invalid graphql field names from being created (#3994)

* fix: prevent invalid graphql field names from being created

Note: This will currently transform (for example) `/*` into `_` so I'm not quite sure what the best course of action is to replace that

Fixes #3487; Fixes #2925

* chore: revert yarn lock change

* test: simplify tests

* fix: dasherize after leading underscore

* feat(gatsby-plugin-google-analytics): add head option (#3995)

Add head option to configure whether scrip tag should be put in the
body (by default, same as previously) or inside of the head.
closes #2894

* Add browserAPIs and ssrAPIs to loaded plugin info (#3989)

* Add browserAPIs and ssrAPIs to loaded plugin info

* Output correct error message for each bad export

* Use lodash for Node 6 compatibility

* Publish

 - gatsby-plugin-google-analytics@1.0.18
 - gatsby@1.9.193

* add package json metadata for better display on npmjs.org (#3981)

* chore: add package json metadata (git url, issues, etc.)

* chore: update plop template

* chore: move bin/files up in package.json

* chore: fix unescaped email(s)

* Run 'fixpack' on all package.jsons

* Validate when creating a page that the page component exists (#3997)

* Validate when creating a page that the page component exists

* Don't check for component paths during testing as it breaks tests

* Publish

 - gatsby-1-config-css-modules@1.0.9
 - gatsby-cli@1.1.40
 - gatsby-dev-cli@1.2.11
 - gatsby-image@1.0.36
 - gatsby-link@1.6.37
 - gatsby-module-loader@1.0.10
 - gatsby-plugin-aphrodite@1.0.7
 - gatsby-plugin-canonical-urls@1.0.13
 - gatsby-plugin-catch-links@1.0.16
 - gatsby-plugin-coffeescript@1.4.10
 - gatsby-plugin-create-client-paths@1.0.5
 - gatsby-plugin-cxs@1.0.7
 - gatsby-plugin-emotion@1.1.12
 - gatsby-plugin-feed@1.3.18
 - gatsby-plugin-glamor@1.6.12
 - gatsby-plugin-glamorous@1.0.7
 - gatsby-plugin-google-analytics@1.0.19
 - gatsby-plugin-google-tagmanager@1.0.14
 - gatsby-plugin-jss@1.5.11
 - gatsby-plugin-less@1.1.5
 - gatsby-plugin-lodash@1.0.9
 - gatsby-plugin-manifest@1.0.14
 - gatsby-plugin-netlify-cms@1.0.7
 - gatsby-plugin-netlify@1.0.18
 - gatsby-plugin-no-sourcemaps@1.0.3
 - gatsby-plugin-nprogress@1.0.12
 - gatsby-plugin-offline@1.0.14
 - gatsby-plugin-postcss-sass@1.0.17
 - gatsby-plugin-preact@1.0.16
 - gatsby-plugin-react-css-modules@1.0.13
 - gatsby-plugin-react-helmet@2.0.5
 - gatsby-plugin-react-next@1.0.9
 - gatsby-plugin-remove-trailing-slashes@1.0.5
 - gatsby-plugin-sass@1.0.17
 - gatsby-plugin-sharp@1.6.28
 - gatsby-plugin-sitemap@1.2.13
 - gatsby-plugin-styled-components@2.0.6
 - gatsby-plugin-styled-jsx@2.0.3
 - gatsby-plugin-styletron@1.0.12
 - gatsby-plugin-stylus@1.1.15
 - gatsby-plugin-twitter@1.0.17
 - gatsby-plugin-typescript@1.4.16
 - gatsby-plugin-typography@1.7.14
 - gatsby-react-router-scroll@1.0.11
 - gatsby-remark-autolink-headers@1.4.12
 - gatsby-remark-code-repls@1.0.9
 - gatsby-remark-copy-linked-files@1.5.27
 - gatsby-remark-custom-blocks@1.0.3
 - gatsby-remark-embed-snippet@1.0.9
 - gatsby-remark-images@1.5.44
 - gatsby-remark-katex@1.0.11
 - gatsby-remark-prismjs@1.2.15
 - gatsby-remark-responsive-iframe@1.4.17
 - gatsby-remark-smartypants@1.4.11
 - gatsby-source-contentful@1.3.38
 - gatsby-source-drupal@2.0.20
 - gatsby-source-faker@1.0.2
 - gatsby-source-filesystem@1.5.19
 - gatsby-source-hacker-news@1.0.10
 - gatsby-source-lever@1.0.8
 - gatsby-source-medium@1.0.12
 - gatsby-source-mongodb@1.5.14
 - gatsby-source-wordpress-com@1.0.6
 - gatsby-source-wordpress@2.0.55
 - gatsby-transformer-csv@1.3.8
 - gatsby-transformer-documentationjs@1.4.9
 - gatsby-transformer-docx@1.0.6
 - gatsby-transformer-excel@1.0.4
 - gatsby-transformer-hjson@1.0.3
 - gatsby-transformer-javascript-static-exports@1.3.9
 - gatsby-transformer-json@1.0.15
 - gatsby-transformer-pdf@1.0.6
 - gatsby-transformer-pdfimages@1.0.5
 - gatsby-transformer-react-docgen@1.0.13
 - gatsby-transformer-remark@1.7.32
 - gatsby-transformer-screenshot@1.0.2
 - gatsby-transformer-sharp@1.6.19
 - gatsby-transformer-toml@1.1.8
 - gatsby-transformer-xml@1.0.12
 - gatsby-transformer-yaml@1.5.15
 - gatsby@1.9.194
 - graphql-skip-limit@1.0.10

* [gatsby-transformer-react-docgen] Add note on PropTypes (#4008)

* Update adding-tags-and-categories-to-blog-posts.md (#3999)

Changed per a conversation with Kyle about a better way to do this. Relates to #3976

* [gatsby-remark-katex] Upgrade remark-math to latest (#4005)

* update remark-math to latest version to fix an issue where equations surrounded by `$$` with new lines are not displayed in KaTeX' `displayMode`
* update broken spec
* add spec for display math node
* [using-remark] fix "Math Equations in Display Mode" example

* Add note about using Custom Domain with Github Pages (#4006)

* Update how-gatsby-works-with-github-pages.md

* Update how-gatsby-works-with-github-pages.md

* Update how-gatsby-works-with-github-pages.md

* [docs] Add Gatsby Manor blog post (#3968)

Show the community Gatsby Manor.

* don't use internal-only path when requiring promise polyfill (#4012)

see: zloirock/core-js#138 (comment)

* Fix tracking parent nodes when loading redux state from cache (#4013)

fixes #2929

* Publish

 - gatsby-remark-katex@1.0.12
 - gatsby-transformer-react-docgen@1.0.14
 - gatsby@1.9.195

* Add info about gatsby-plugin-sharp (#4019)

* Add info about gatsby-plugin-sharp

* Update README.md

* update contributing documentation to mention that npm run watch can be resource intensive, and suggest watching select packages at a time (#4020)

* [gatsby-image] Allow specifying HTML tag for gatsby-image wrapping elements (#4022)

* Allow specifying which html tag will be used for gatsby-image wrappers

* Update gatsby-image README.md to include new Tag prop

* Fix plugin loader checks (#4023)

* Add browser and SSR APIs to the plugin API whitelist

* Add registerServiceWorker to the list of allowed browser APIs

* Publish

 - gatsby-image@1.0.37
 - gatsby@1.9.196

* Fix tracking nodes with filtering/running sift (#4024)

* Track Node that contains inline objects/arrays instead of its parent. This doesn't break finding topmost ancestor node as we already trying to get walk along parent hierarchy.

Rename tracking functions and jsdocs to provide some basic context for these functions

* Fix tracking nodes with filtering/running sift. Before we filter nodes we create copies of nodes with appended fields added by plugins (by setFieldsOnGraphQLNodeType) if they are filtered on. These copies weren't tracked.

* fix: add info message if gatsby-config.js could have been typo'd (#4017)

* fix: add info message if gatsby-config.js could have been typo'd

* chore: move preferDefault back to where it was

* refactor: tweak error logic a bit

* chore: tweak versions for yarn.lock compat

* refactor: address PR comments

* fix: fail with error

* format

* Fix lint errors

* fix: ensure graphql key is a valid graphql key value (#4000)

* fix: ensure graphql key is a valid graphql key value

* chore: update comment

* Improve the warning for when someone includes a graphql query in a non-page component (#4026)

* Publish

 - gatsby@1.9.197

* add gatsby-transformer-javascript-frontmatter, closes #3795 (#3947)

* initial commit

* update name in package.json

* start converting example site

* fix gql error on js articles

* rename intial defined `let`

* clear out unused deps

* begin updating new layout components

* fix all HOC

* update example readme

* Format

* Update README.md

* Catch require error for hot-reloading gatsby-config.js fixes #3990 (#4039)

* Publish

 - gatsby-source-mongodb@1.5.15
 - gatsby-source-wordpress@2.0.56
 - gatsby-transformer-javascript-frontmatter@1.0.1
 - gatsby-transformer-javascript-static-exports@1.3.10
 - gatsby@1.9.198

* Don't exit on errors as during development, empty/incomplete page components are common fixes #4027 (#4040)

* Don't exit on errors as during development, empty/incomplete page components are common fixes #4027

* Fix other points of death

* Ok, do die here

* Remove component query from store when a user deletes it fixes #4032 (#4041)

* Publish

 - gatsby@1.9.199

* add portfolio site to the readme showcase (#4043)

* Add documentation for using boundActionCreators fixes #4029 (#4042)

* Add documentation for using boundActionCreators

* Update bound-action-creators.js

* Fix

* node tracking - add tests (#4045)

* move node tracking code to separate dedicated file

* Add jsdoc for findRootNode

* add tests for node tracking

* Update README.md

* Add links to the end of the tutorial (#4051)

* [www] Fix tutorial sidebar links active state, update deps (#4059)

* Bump deps, add react-helmet for gatsby-plugin-react-helmet v2

* Fix warning

„Warning: Received `false` for non-boolean attribute `className`. If this is expected, cast the value to a string.“

* Update preload href

* Rewire sidebar section and link styles, fix #4036

* Use babylon to parse out exports from plugin files (#4057)

* Minor typo fix (#4063)

* sort type names when creating union type name to keep union type names more consistent (#4074)

previously this name would change when order of source data change

* Publish

 - gatsby-plugin-styled-components@2.0.7
 - gatsby@1.9.200

* Update minimum Node.js versions (#4075)

* support tiff images and don't get stuck indefinitely when used, add basic error checking (#4076)

* Remove .travis.yml file from www directory as it's never been used (#4082)

* [www] Tutorial: Highlight closing tag (#3925)

* Highlight closing tag

There are two additions to the code, however only the opening div is highlighted and not its closing tag.

* Made changes suggested by Yisela

@yisela, I changed this! It took a while for me to figure out, which means that most beginners would also have trouble figuring it out, haha. Thanks for noticing and helping Gatsby improve!!!

* Revert "define webpack loader.exclude with array for extensibility" (#4046)

This reverts commit 50b0a47.

* Add documentation for mapping in gatsby-config (#4054)

* Add documentation for mapping

* Fix glitch in pasted code

* Update gatsby-config.md

* format

* Update gatsby-config.md

* Update gatsby-config.md

* Add new Tools-section and mention Gatsby-Docker (#4085)

As suggested here: https://twitter.com/gatsbyjs/status/964531323606986752

* Remove ReasonML site (#4084)

* Added gatsby-source-dribbble plugin (#4086)

Added gatsby-source-dribbble plugin to community plugins

* Adds add'l docs to gatsby-source-filesystem (#4060)

* Adds add'l docs to gatsby-source-filesystem

* Update README.md

* Format

* [docs] Add A Bright Future For The Web blog post (#4073)

* Blogpost (#4083)

* Blogpost

Hope this is good to go. I feel like it's kind of boring and abstract. Hoped to have more examples or stories or screenshots but don't know enough to add more!

* Update index.md

Removed some content which felt a bit extraneous + corrected a few descriptions of React

* Add portfolio of Preston Richey to README showcase (#4087)

* gatsby.org -> gatsbyjs.org (#4088)

* gatsby.org -> gatsbyjs.org

* Update index.md

* fix broken `path` dependency (#4090)

Following the guide I had an error with the `path`.

It seems that requiring it at the top of the file solves the issue: `const path = require("path");`

Is there something else I was missing? 

Cheers

* Remove tiff option from gatsby-plugin-sharp as it's converting all images to tiff (#4091)

* Publish

 - gatsby-plugin-sharp@1.6.29
 - gatsby-remark-images@1.5.45
 - gatsby-source-drupal@2.0.21
 - gatsby-source-filesystem@1.5.20
 - gatsby-source-wordpress@2.0.57
 - gatsby@1.9.201

* [www] Fix quotes, fixes „Invalid date“ of latest blog post (#4092)

* [www] Fix quotes, fixes „Invalid date“ of latest blog post

* Fix typo

* Auto-deploy GraphQL docker image (#4079)

* Push image to docker hub when master is tagged like `gatsby@`

* Build image on any commit to master (that isn't a PR merge)

* Restore tiff option but without force option defaulting to true (#4094)

* Publish

 - gatsby-plugin-sharp@1.6.30
 - gatsby-remark-images@1.5.46

* Add Beach Hut Poole to Site Showcase (#4106)

* Add gatsby-starter-redux to gatsby-starters (#4098)

* Catch and exit if someone mistakenly puts their gatsby-config.js in the src directory fixes #2674 (#4101)

* Publish

 - gatsby@1.9.202
  • Loading branch information
KyleAMathews committed Feb 17, 2018
1 parent 70b87be commit 52519aa
Show file tree
Hide file tree
Showing 29 changed files with 542 additions and 273 deletions.
48 changes: 34 additions & 14 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,40 @@
language: node_js
node_js:
- "6"
- "8"
sudo: required

services:
- docker

os:
- linux

os: [linux]
dist: trusty
sudo: required
cache:
yarn: true

before_install:
- curl -o- -L https://yarnpkg.com/install.sh | bash
- export PATH=$HOME/.yarn/bin:$PATH
jobs:
include:
- stage: build and test
if: type = pull_request
language: node_js
node_js:
- '6'
- '8'
cache:
yarn: true
before_install:
- curl -o- -L https://yarnpkg.com/install.sh | bash
- export PATH=$HOME/.yarn/bin:$PATH
install:
- yarn run bootstrap
script:
- yarn test

- stage: www graphql docker image build and push
if: (NOT type = pull_request) AND branch = master
env:
- DOCKER_USER=mikeallanson
- secure: J8daWiar248dPWwrutZd83CeSif/+rMjB9hSOjq0pQDNj7QcOKjUwLsv6yMDJAcQCAAyobwRQTNYANGXmvQsi5ZppZe/P/enDPD/ZEPz3XkvxYYbXC7TNKVp8bnvYTWu6qO9ljkMsKGttsqaz+MyTx2MjV9pJhkmw2rfQ5iVn/80bORaCCMDcSB2ud/jLN+AVBFNMDUVEL9RnAXTq+CyQmSLvlvmJNCu9CXnb/Kt+IcbqswTjre/V2lVkzcXEvUYd0F9la3bsGVVQ9vBd3IumSIGnSOxD91DLUOeuh5K7FJxPoqqwM+bCn4zZWtQMOGpPDoYYllVejFHC16g/FBa6uC455OvqeS6fSCRXr9bqDxDLPhn7IyDAuG2jXps++sbd2RA8eXq8IGA4AqtTf4smiIXbOu3p3d2n9ww4Z/NgRpLHYRFcVwjG92okVN4by7n1+kr7wGx+alCkHTMDrLkkeZ0AEJphaxAH+TxP+SvCFY1z/OyNM0YzICrLXjf2w60Xz4wE563yUM8OLFm4GbeM33eQYRErTLADG9JtGDev+L5tS/Vo8+KGkL3creY7f9BgsNyfxbQbv84X7f+vSPlzl6u8V9EuVA80+5hE7artRtM+BxiT5pGM1983+QK2CPv4EptMYRa0EjlVbxyrfVYF22lsAqqgVApZGGneUxB0cQ= # DOCKER_PASS
before_install:
- chmod +x scripts/www-graphql-docker-push.sh
script:
- ./scripts/www-graphql-docker-push.sh

install:
- yarn run bootstrap

script:
- yarn test
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ Websites built with Gatsby:
* [Formidable](https://formidable.com/)
* [openFDA](https://open.fda.gov/)
([source](https://github.com/FDA/open.fda.gov))
* [ReasonML Docs](https://reasonml.github.io/)
([source](https://github.com/reasonml/reasonml.github.io))
* [Bricolage.io](https://www.bricolage.io/)
([source](https://github.com/KyleAMathews/blog))
* [Hack Club](https://hackclub.com/)
Expand Down Expand Up @@ -159,6 +157,8 @@ Websites built with Gatsby:
* [LaserTime Clinic](https://lasertime.ru) ([source](https://github.com/oleglegun/lasertime))
* [Gatsby Manor - themes for GatsbyJS](https://gatsbymanor.com)
* [Darren Britton's Portfolio](https://darrenbritton.com) ([source](https://github.com/darrenbritton/darrenbritton.github.io))
* [Portfolio / Blog of Preston Richey](https://prestonrichey.com/) ([source](https://github.com/prichey/prestonrichey.com))
* [Beach Hut Poole](https://www.beachhutpoole.co.uk/)

## Docs

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ author: "Steven Natera"
---

I am proud to announce [Gatsby Manor](https://www.gatsbymanor.com/), a gallery
of themes for [Gatsby](https://www.Gatsby.org/). After 5 months of
of themes for Gatsby. After 5 months of
development, Gatsby Manor is now in public beta. Check out our
[themes](https://www.gatsbymanor.com/themes) then use our [getting started](https://www.gatsbymanor.com/docs/quick-start/getting-started) guide to
kickstart your Gatsby project.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 38 additions & 0 deletions docs/blog/2018-02-16-bright-future-for-the-web/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: Gatsby And The JAMstack - A Bright Future For The Web
date: "2018-02-16"
image: "bright-future.jpg"
author: "Ryan Wiemer"
---

_This article was originally published on
[Medium](https://medium.com/@ryanwiemer/gatsby-and-the-jam-stack-91e31508f364)
on January 31, 2018._

Recently I relaunched my wife’s photography portfolio, [KNW Photography](https://www.knw.io/), using a combination of Gatsby, [Contentful](https://www.contentful.com/) and [Netlify](https://www.netlify.com/). This particular group of tools represents a new and exciting web development architecture known as the [JAMstack](https://jamstack.org/) (Javascript, APIs and Markup). In this post I will be sharing my personal thoughts on each of these new tools and why together they represent the “holy grail” of the static website world.

## Why Other Static Site Generators Didn’t Work For Me

In case you hadn’t noticed the web moves at an insane speed. With new frameworks and tools being introduced almost daily it can be intimidating even for the most experienced developers. Perhaps you have jumped on the bandwagon too early only to regret it later. Or maybe you have given up on new tools and are happy to settle with outdated …err I mean... trusted solutions. 😉 Admittedly it’s a balancing act but I believe that in order to stay relevant we need to evolve with the web while ensuring that selected tools are robust enough to last.

It was for those reasons that I was hesitant to pull the trigger on a static site generator. I feared that picking the wrong one would result in wasted time either immediately or later down the road. While static site generators have existed in some form for a while, see [Hugo](https://gohugo.io/), [Jekyll](https://jekyllrb.com/) and [Middleman](https://middlemanapp.com/), they have mostly been used by developers or code-savvy bloggers. Although these tools offer benefits such as greater speed, better security and simpler code what most of them lack in my opinion is a good solution for non technical users to update website content. Asking a non developer to edit a markdown file and commit it to GitHub is simply not realistic for most clients. Some businesses were even started to fill this niche such as [Siteleaf](https://www.siteleaf.com/) and [Forestry](https://forestry.io/) which provide a CMS for static sites built with Jekyll. Although those solutions solve part of the problem they felt too limiting for my taste and creating anything other than a simple blog is like fitting a square peg into a round hole.

## Gatsby And The Road To Success

![Road To Success](road-to-success.jpg)

One day after airing my grievances about the current state of static site generators on Slack a fellow developer recommend that I check out Gatsby. Gatsby is yet another static site generator but what really set it apart for me was how it was built with [React](https://reactjs.org/) and emphasized a rich plugin system. This was a big plus for me as I was itching to learn more about React and the plugin system alleviated some initial pain that I would have had dealing with mundane tasks. Out of the box you get a fantastic development environment with live reloading that required almost no configuration. With Gatsby specific plugins and React components it can handle pretty much anything you throw at it.

Next came integrating the statically generated site with data stored in a CMS. Again Gatsby was well suited for this and I was able to easily integrate with Contentful via the [gatsby-source-contentful](https://www.gatsbyjs.org/packages/gatsby-source-contentful/) plugin. Contentful is an example of a headless CMS, meaning that is is not tied to any particular technology or language. Contentful allows you to store content using a pleasant user interface and it can then output the data via an API. Best of all Contentful puts you in the driver seat and lets you define your own content model however you see fit. Think [WordPress Advanced Custom Fields](https://www.advancedcustomfields.com/) on steroids. With the content stored in Contentful Gatsby then uses the Contenful API along with the awesome power of [GraphQL](http://graphql.org/) to query data at build time. Cool stuff!

The final piece of the puzzle was determining where to host the website. I had recently experimented with Netlify on a somewhat [pointless website for my dog](https://www.doggoforhire.com/) and I was impressed by its ease of use and how they offered a fully featured developer tier for free. In no time I was able to get my Gatsby powered website up and running on Netlify. Then with the help of webhooks I was able to have Contentful tell Netlify to “rebuild” the website whenever a new post was published. Finally with Netlify’s form handling functionality I hooked up a contact form all without a single line of backend code or even a database.

## The Final Product

![Final Product](final-product.jpg)

After a little over a month of tinkering on the design during nights and weekends I had a fully functional website ready to be launched. During this process I learned a fair bit of how to code with React and the Gatsby community seemed genuinely nice and happy to help me to learn. The final product was a website that felt like it belonged in 2018 while still allowing my wife to easily update content with no assistance. Not only that the website was immensely faster than the previous WordPress version, served over HTTPS, utilized a CDN and cost me $0 dollars a month thanks to the extremely generous free tiers offered by Netlify and Contentful. 😍

If you are currently on the fence about static site generators or the JAMstack in general there has never been a better time to jump in. In my humble opinion with these tools it has finally reached the level of maturity to not just be feasible for client work but actually pretty darn amazing.

For those interested the source code for the website I built is available on GitHub: https://github.com/ryanwiemer/knw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
54 changes: 54 additions & 0 deletions docs/blog/2018-2-16-how-to-build-a-website-with-react/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: How to Build a Website with React
date: "2018-02-16"
author: Shannon Soper
---

# What is React?

React is a fantastic and wildly popular tool for building websites and apps, and it creates a world where JavaScript and HTML live in happy harmony in the same files and efficiently renders your ever-changing data to the browser.

## Declarative

With React, you can create reusable components that will always render the same data in the same way, which wasn't always the case pre-React. Let’s say you’re a huge Olympics fan and you build a React website for tracking scores. Users who visit your site won’t need to wait for the entire tree to deconstruct and reconstruct when they click a button on your site or when the newest data on the half-pipe is available. React components will efficiently update to accommodate the changing data.

## Reactive

React uses a virtual tree reconciliation method to _react_ to changes in input data. Whenever any data changes, instead of rebuilding the whole DOM tree (which would be slow) — it decides what changed in its virtual DOM and then makes the smallest number of DOM changes necessary.

Almost all frameworks nowadays (e.g. Angular, Vue, etc.) are approaching similar mechanisms. The virtual tree is in contrast to something like vanilla JS or jQuery where you are setting/updating DOM nodes directly.

## Easy to add to the rest of your stack

Switching your site(s) to new technologies optimally involves incrementally transferring your site over, page by page, to the new technology. This is difficult to do with some new frontend technologies which want to control the entire page. These technologies are like your friend who wants to take over every social event they get invited to.

React is not picky; it is happy to be used in only parts of your site, so you can incrementally refactor your code in React. It's more like an easy-going friend who is happy to help with just part of the party you're throwing. It plays nicely with others!

## Component-Based

React components and subcomponents tend to come from breaking your website down into the smallest bits possible, using the [single responsibility principle](https://en.wikipedia.org/wiki/Single_responsibility_principle).

For example, in a To-Do list, the hierarchy of components would include:

* Whole list
* Title
* add a to-do line
* to-do line
* subtasks within to-dos
* show completed to-dos button

![To-Do List](to-do-list.png)

The [Reactjs.org website recommends](https://reactjs.org/docs/thinking-in-react.html) that you work with your designer(s) when creating a hierarchy of React components and subcomponents, because the designers probably already have names for each small piece of the design, and you can make sure your components have the same names.

React components work just like other functions in any programming language because we call components with some input (called “property” in React) and spit out an output (a chunk of UI in React). Also, components are reusable and can contain other components. All these things are the same as other functions in other programming languages.

## Using React with Gatsby

GatsbyJS is a great way to build websites with React and actually solves some unique problems by making the following things more straightforward:

* _Pulling in data:_ In Gatsby, GraphQL and plugins help you use data from nearly any source (including both traditional CMSs and headless CMSs. Some people I’ve talked to recently even built their Gatsby sites with Google sheets as the data source.
* _Creating pages and routes:_ Gatsby also gives you an intuitive interface for creating pages and routes. So intuitive, in fact, that when I talked to a coworker, I said, “I remember creating pages and links to those pages from other pages, but I don’t remember creating any routes in Gatsby.” They responded, “Yeah, Gatsby took care of that for you.”
* _Solving performance problems:_ Gatsby sites rarely have performance problems due to Gatsby’s way of loading static files.

Gatsby combines the awesomeness of React with all the friendly helpfulness you’d hope for in a modern PWA framework. Happy coding, and let us know how it goes by joining us on [Twitter](https://twitter.com/gatsbyjs) and [Github](https://github.com/gatsbyjs/gatsby)!
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions docs/blog/author.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,7 @@
bio: Founder of Gatsby Manor. Site Reliability Engineer. Open source addict. Writer at Hackernoon.
avatar: avatars/steven-natera.jpg
twitter: "@stevennatera"
- id: Ryan Wiemer
bio: Oakland based account manager that enjoys working on web and interactive projects - https://www.ryanwiemer.com
avatar: avatars/ryan-wiemer.jpg
twitter: "@ryanwiemer"
Binary file added docs/blog/avatars/ryan-wiemer.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
167 changes: 85 additions & 82 deletions docs/docs/adding-tags-and-categories-to-blog-posts.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,61 +104,80 @@ const Tags = ({ pathContext, data }) => {
<Link to="/tags">All tags</Link>
</div>
);
};
==== BASE ====
}
```

Tags.propTypes = {
pathContext: PropTypes.shape({
tag: PropTypes.string.isRequired,
}),
data: PropTypes.shape({
allMarkdownRemark: PropTypes.shape({
totalCount: PropTypes.number.isRequired,
edges: PropTypes.arrayOf(
PropTypes.shape({
node: PropTypes.shape({
frontmatter: PropTypes.shape({
path: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
}),
}),
}).isRequired,
),
}),
}),
};
Now we'll instruct Gatsby to create the tag pages. In the site's `gatsby-node.js` file we'll call the the [`createPages`](/docs/node-apis/#createPages) API to make a page for every tag.

export default Tags;
First create a function called `createTagPages`:

export const pageQuery = graphql`
query TagPage($tag: String) {
allMarkdownRemark(
limit: 2000
sort: { fields: [frontmatter___date], order: DESC }
filter: { frontmatter: { tags: { in: [$tag] } } }
) {
totalCount
edges {
node {
frontmatter {
title
path
}
}
}
}
}
`;
```
```javascript
const path = require("path");

**Note**: `propTypes` are included in this example to help you ensure you're getting all the data you need in the component, and to help serve as a guide while destructuring / using those props.
const createTagPages = (createPage, edges) => {
// Tell it to use our tags template.
const tagTemplate = path.resolve(`src/templates/tags.js`);
// Create an empty object to store the posts.
const posts = {};
console.log("creating posts");
==== BASE ====

## Modify `gatsby-node.js` to render pages using that template
==== BASE ====
// Loop through all nodes (our markdown posts) and add the tags to our post object.
==== BASE ====

Now we've got a template. Great! I'll assume you followed the tutorial for [Adding Markdown Pages](/docs/adding-tags-and-categories-to-blog-posts/) and provide a sample `createPages` that generates post pages as well as tag pages. In the site's `gatsby-node.js` file, include `lodash` (`const _ = require('lodash')`) and then make sure your [`createPages`](/docs/node-apis/#createPages) looks something like this:
==== BASE ====
edges.forEach(({ node }) => {
if (node.frontmatter.tags) {
node.frontmatter.tags.forEach(tag => {
if (!posts[tag]) {
posts[tag] = [];
==== BASE ====
}
==== BASE ====
posts[tag].push(node);
});
==== BASE ====
}
==== BASE ====
});
==== BASE ====

==== BASE ====
// Create the tags page with the list of tags from our posts object.
createPage({
path: "/tags",
component: tagTemplate,
context: {
posts,
},
});
==== BASE ====

==== BASE ====
// For each of the tags in the post object, create a tag page.

Object.keys(posts).forEach(tagName => {
const post = posts[tagName];
createPage({
path: `/tags/${tagName}`,
component: tagTemplate,
context: {
posts,
post,
tag: tagName,
},
});
});
};
```

```js
exports.createPages = ({ boundActionCreators, graphql }) => {
const { createPage } = boundActionCreators;
const path = require("path");

exports.createPages = ({ actions, graphql }) => {
const { createPage } = actions;

const blogPostTemplate = path.resolve('src/templates/blog.js');
const tagTemplate = path.resolve('src/templates/tags.js');
Expand All @@ -177,42 +196,26 @@ exports.createPages = ({ boundActionCreators, graphql }) => {
}
}
}
==== BASE ====
}
}
`).then(result => {
if (result.errors) {
return Promise.reject(result.errors);
}

const posts = result.data.allMarkdownRemark.edges;

// Create post detail pages
posts.forEach(({ node }) => {
createPage({
path: node.frontmatter.path,
component: blogPostTemplate,
});
});

// Tag pages:
let tags = [];
// Iterate through each post, putting all found tags into `tags`
_.each(posts, 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 => {
createPage({
path: `/tags/${_.kebabCase(tag)}/`,
component: tagTemplate,
context: {
tag,
},
==== BASE ====
`).then(result => {
console.log(result);
const posts = result.data.allMarkdownRemark.edges;

// call createTagPages with the result of posts
createTagPages(createPage, posts);

// this is the original code used to create the pages from markdown posts
result.data.allMarkdownRemark.edges.map(({ node }) => {
createPage({
path: node.fields.slug,
component: path.resolve(`./src/templates/blog-post.js`),
context: {
slug: node.fields.slug,
},
});
==== BASE ====
});
});
});
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/api-specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Plugins can extend Gatsby in many ways:
with URLs derived from their file names).
* Modifying webpack config (e.g. for styling options, adding support for other
compile-to-js languages)
* Adding things to the rendered HTML (e.g. meta tags, analytics JS snippits like
* Adding things to the rendered HTML (e.g. meta tags, analytics JS snippets like
Google Analytics)
* Writing out things to build directory based on site data (e.g. service worker,
sitemap, RSS feed)
Expand Down
Loading

0 comments on commit 52519aa

Please sign in to comment.