All Projects → cedricdelpoux → Gatsby Source Google Docs

cedricdelpoux / Gatsby Source Google Docs

Licence: mit
Gatsby plugin to use Google Docs as a data source

Programming Languages

javascript
184084 projects - #8 most used programming language

Labels

Projects that are alternatives of or similar to Gatsby Source Google Docs

Gatsby V2 Tutorial Starter
Gatsby V2 Starter - product of step by step tutorial
Stars: ✭ 139 (-12.03%)
Mutual labels:  gatsby
Gatsby All In
🗃⚛️A GatsbyJs starter that includes the most popular js libraries, already pre-configured and ready for use.
Stars: ✭ 149 (-5.7%)
Mutual labels:  gatsby
Gatsby Serif Theme
Serif is a beautiful small business theme for Gatsby.
Stars: ✭ 153 (-3.16%)
Mutual labels:  gatsby
Gatsby Starter Delog
A blog for designers and developer, built with Gatsby and Netlfiy CMS. Live demo https://delog-w3layouts.netlify.com/
Stars: ✭ 145 (-8.23%)
Mutual labels:  gatsby
Stateofjs 2019
State of JS 2019 survey report website
Stars: ✭ 145 (-8.23%)
Mutual labels:  gatsby
Smooth Doc
Ready to use documentation theme for Gatsby.
Stars: ✭ 151 (-4.43%)
Mutual labels:  gatsby
Gatsby Starter Try Ghost
Publish flaring fast blogs with Gatsby and Ghost
Stars: ✭ 137 (-13.29%)
Mutual labels:  gatsby
Gine Blog
Blog = Gatsby + React + Material-UI + Notion + Netlify
Stars: ✭ 156 (-1.27%)
Mutual labels:  gatsby
Gatsby Source Ghost
Source plugin for pulling data into Gatsby.js from the Ghost Public API.
Stars: ✭ 144 (-8.86%)
Mutual labels:  gatsby
Gatsby Wpgraphql Blog Example
Demo showing how to use WPGraphQL as the source for Gatsby Sites
Stars: ✭ 152 (-3.8%)
Mutual labels:  gatsby
Gatsby Plugin Typegen
High-performance TypeScript/Flow code generation for GatsbyJS queries.
Stars: ✭ 144 (-8.86%)
Mutual labels:  gatsby
Gatsby Source Prismic Graphql
Gatsby source plugin for Prismic GraphQL
Stars: ✭ 144 (-8.86%)
Mutual labels:  gatsby
Gatsby Starter Netlify Cms
Example gatsby + netlify cms project
Stars: ✭ 1,932 (+1122.78%)
Mutual labels:  gatsby
Gatsby Theme Intro
Personal branding theme for developers
Stars: ✭ 142 (-10.13%)
Mutual labels:  gatsby
Gatsby Remark Oembed
A GatsbyJS Plugin that transforms oembed links into its corresponding embed code.
Stars: ✭ 154 (-2.53%)
Mutual labels:  gatsby
Gatsby London
A free, open source, image-concentric starter for GatsbyJS
Stars: ✭ 137 (-13.29%)
Mutual labels:  gatsby
Spacy Course
👩‍🏫 Advanced NLP with spaCy: A free online course
Stars: ✭ 1,920 (+1115.19%)
Mutual labels:  gatsby
Actions Gh Pages
GitHub Actions for GitHub Pages 🚀 Deploy static files and publish your site easily. Static-Site-Generators-friendly.
Stars: ✭ 2,576 (+1530.38%)
Mutual labels:  gatsby
Gatsby Plugin Algolia
A plugin to push to Algolia based on graphQl queries
Stars: ✭ 154 (-2.53%)
Mutual labels:  gatsby
Gatsby Absurd
An absurd Gatsby starter
Stars: ✭ 153 (-3.16%)
Mutual labels:  gatsby

gatsby-source-google-docs


gatsby-source-google-docs


Npm Build Status Coverage Downloads PRs welcome MIT license Paypal


gatsby-source-google-docs is a Gatsby plugin to use Google Docs as a data source.

Why use Google Docs to write your content ?
  • 🖋 Best online WYSIWYG editor
  • 🖥 Desktop web app
  • 📱 Mobile app
  • 🛩 Offline redaction
  • 🔥 No need for external CMS
  • ✅ No more content in your source code

Features

  • Google Docs formatting options (headings, bullets, tables, images...)
  • MDX support to use <ReactComponents /> in your documents
  • Gatsby v3 & v2 support
  • gatsby-plugin-image and gatsby-image support
  • Code blocs support
  • Gatsby Cloud support
  • Slug generation from Google Drive tree
  • Crosslinks between pages
  • Related content
  • Custom metadata to enhance documents

Documentation

To preview what you can do, please checkout the documentation website.

💯 100% content of the website is from Google Docs. Please suggest edits to improve it.

Installation

Download gatsby-source-google-docs and gatsby-transformer-remark (or gatsby-plugin-mdx for advanced usage)

yarn add gatsby-source-google-docs gatsby-transformer-remark
  • gatsby-source-google-docs transform Google Docs to Markdown
  • gatsby-transformer-remark transform Markdown to HTML
  • gatsby-plugin-mdx transform Markdown to MDX

Token generation

The package needs 3 .env variables.

Preview variables
GOOGLE_OAUTH_CLIENT_ID=2...m.apps.googleusercontent.com
GOOGLE_OAUTH_CLIENT_SECRET=Q...axL
GOOGLE_DOCS_TOKEN={"access_token":"ya...J0","refresh_token":"1..mE","scope":"https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/documents.readonly","token_type":"Bearer","expiry_date":1598284554759}

gatsby-source-google-docs expose a script to generate it.

  • Open a terminal at the root of your project
  • Type the following command
gatsby-source-google-docs-token

Usage

Organize your documents

Go to your Google Drive, create a folder and put some documents inside it.

 🗂 Root folder `template: page`
     🗂 en `locale: en` `skip: true`
         📝 Home `template: home`
         📝 About
         🗂 Posts `template: post`
             🗂 Drafts `exclude: true`
                 📝 Draft 1
             📝 My year 2020 `date: 2021-01-01`
             📝 Post 2 `slug: /custom/slug` `template: special-post`
     🗂 fr `locale: fr`
         📝 Accueil `template: home`

🤡 How to enhance documents with metadata?
  • Fill the document (or folder) description field in Google Drive with a YAML object
locale: fr
template: post
category: Category Name
tags: [tag1, tag2]
slug: /custom-slug
date: 2019-01-01

There are special metadata

  • For folders:
    • exclude: true: Exclude the folder and its documents
    • skip: true: Remove the folder from slug but keep its documents
  • For documents:
    • index:true: Use document as the folder index
    • page: false: Prevent page creation when createPages option is set to true
  • Spread metadata into the tree using folders metadata.

⬆️ For the tree example above:

  • Every node will have template: page defined as default excepts if you redefine it later.
  • You need to create 3 different templates: page (default), home, post. Checkout the example template
  • "en" folder will be removed from slug because of skip: true
  • Exclude folders and documents using exclude: true. Perfect to keep drafts documents. One you want to publish a page, juste move the document one level up.

⬆️ For the tree example above:

  • Documents under Drafts will be exclude because of exclude: true.
  • Every metadata will be available in GoogleDocs nodes and you can use everywhere in you Gatsby site

🌄 How to add cover?

Add an image in your Google Document first page header

🍞 How to add slug and breadcrumb?

slug and breadcrumb fields add automatically generated using the folders tree structure and transformed using kebab-case.

⬆️ For the tree example above: The GoogleDocs node for document My year 2020

{
    path: "/en/posts/my-year-2020" // Original Google Drive path
    slug: "/posts/my-year-2020" // `en` is out because of `skip: true`
    breadcrumb: [
        {name: "Posts", slug: "/posts"},
        {name: "My year 2020", slug: "/posts/my-year-2020"},
    ],
    template: "post" ,// src/templates/post.js
    locale: "fr",
    date: "2021-01-01" // Fixed date !
}

The GoogleDocs node for document Post 2 will have a custom slug

{
    path: "/en/posts/post-2"
    slug: "/custom/slug"
    breadcrumb: [
        {name: "Posts", slug: "/posts"},
        {name: "Post 2", slug: "/custom/slug"},
    ],
    template: "special-post",  // src/templates/special-post.js
    locale: "en",
    date: "2020-09-12" // Google Drive document creation date
}

You also can add metadata (locale, date, template, ...) to your documents.

Add the plugin to your gatsby-config.js file

Option Required Type Default Example
folder true String null "1Tn1dCbIc"
createPages false Boolean false true
pageContext false Array [] ["locale"]
demoteHeadings false Boolean true false
imagesOptions false Object null {width: 512}
keepDefaultStyle false Boolean false true
skipCodes false Boolean false true
skipFootnotes false Boolean false true
skipHeadings false Boolean false true
skipImages false Boolean false true
skipLists false Boolean false true
skipQuotes false Boolean false true
skipTables false Boolean false true
debug false Boolean false true
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-google-docs",
            options: {
                // https://drive.google.com/drive/folders/FOLDER_ID
                folder: "FOLDER_ID",
                createPages: true,
            },
        },
        "gatsby-transformer-remark",
        //
        // OR "gatsby-plugin-mdx" for advanced usage using MDX
        //
        // You need some transformations?
        // Checkout https://www.gatsbyjs.com/plugins/?=gatsby-remark
        // And pick-up some plugins
    ],
}

📷 How to use images ?

gatsby-plugin-sharp, gatsby-transformer-sharp and gatsby-remark-images are required if you want to take advantage of gatsby-image blur-up technique.

yarn add gatsby-plugin-sharp gatsby-transformer-sharp gatsby-remark-images
module.exports = {
    plugins: [
        "gatsby-source-google-docs",
        "gatsby-plugin-sharp",
        "gatsby-transformer-sharp",
        {
            resolve: "gatsby-transformer-remark",
            options: {
                plugins: ["gatsby-remark-images"],
            },
        },
    ],
}

⚛️ How to use codes blocks ?

Use Code Blocks Google Docs extension to format your code blocks.

To specify the lang, you need to add a fist line in your code block following the format lang:javascript.

To get Syntax highlighting, I recommend using prismjs but it's not mandatory.

yarn add gatsby-remark-prismjs prismjs

Add the gatsby-remark-prismjs plugin to your gatsby-config.js

module.exports = {
    plugins: [
        "gatsby-source-google-docs",
        {
            resolve: "gatsby-transformer-remark",
            options: {
                plugins: ["gatsby-remark-prismjs"],
            },
        },
    ],
}

Import a prismjs theme in your gatsby-browser.js

require("prismjs/themes/prism.css")

Create templates and pages

Using createPages: true option, pages will be created automatically. You need to create templates and define wich template to use using YAML metadata.

You can set page: false metadata for a document to prevent a page creation

Checkout the example template and adapt it to your needs.

You can use pageContext option if you need extra data into the context of your pages.

How to create pages manualy?

If you prefer to create pages manualy, checkout the createPages API et adapt it to your needs.

Trigger production builds

  • Go to Google Drive example folder
  • Create a copy of Trigger Gatsby Build file using Right Click -> Create a copy
  • Open your copy and update the Build Webhook URL in A2
  • Click the Deploy button to trigger a new build

This method works with any hosting services: Gatsby Cloud, Netlify...

Showcase

You are using gatsby-source-google-docs for your website? Thank you! Please add the link bellow:

Contributing

  • ⇄ Pull/Merge requests and ★ Stars are always welcome.
  • For bugs and feature requests, please create an issue.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].