 0d774cd24a
			
		
	
	
		0d774cd24a
		
			
		
	
	
	
	
		
			
			Inline @rocketseat theme for Gatsby
because we need a lot of changes.
Fix bad GitHub edit url, next/prev links,
    external links without target="_blank".
		
	
			
		
			
				
	
	
		
			253 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			253 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require(`path`);
 | |
| const { createFilePath } = require(`gatsby-source-filesystem`);
 | |
| const fs = require(`fs`);
 | |
| 
 | |
| const {
 | |
|   normalizeBasePath,
 | |
|   resolveLink,
 | |
| } = require(`./src/@rocketseat/gatsby-theme-docs-core/util/url`);
 | |
| const withDefault = require(`./src/@rocketseat/gatsby-theme-docs-core/util/with-default`);
 | |
| 
 | |
| exports.createPages = ({ graphql, actions: { createPage }, reporter }) => {
 | |
|   reporter.success(`onCreateDocs`);
 | |
| 
 | |
|   const siteConfig = require(`./src/config/site.js`);
 | |
|   const { basePath, baseDir, docsPath, githubUrl } = withDefault(siteConfig);
 | |
| 
 | |
|   const docsTemplate = require.resolve(
 | |
|     `./src/@rocketseat/gatsby-theme-docs/src/templates/docs-query.js`
 | |
|   );
 | |
|   const homeTemplate = require.resolve(
 | |
|     `./src/@rocketseat/gatsby-theme-docs/src/templates/homepage-query.js`
 | |
|   );
 | |
| 
 | |
|   return graphql(
 | |
|     `
 | |
|       {
 | |
|         files: allFile(filter: { extension: { in: ["md", "mdx"] } }) {
 | |
|           edges {
 | |
|             node {
 | |
|               id
 | |
|               relativePath
 | |
|               childMdx {
 | |
|                 frontmatter {
 | |
|                   next
 | |
|                 }
 | |
|                 fields {
 | |
|                   slug
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|         sidebar: allSidebarItems {
 | |
|           edges {
 | |
|             node {
 | |
|               label
 | |
|               link
 | |
|               items {
 | |
|                 label
 | |
|                 link
 | |
|               }
 | |
|               id
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     `
 | |
|   ).then((result) => {
 | |
|     if (result.errors) {
 | |
|       reporter.panic(
 | |
|         `docs: there was an error loading the docs folder!`,
 | |
|         result.errors
 | |
|       );
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     createPage({
 | |
|       path: basePath,
 | |
|       component: homeTemplate,
 | |
|     });
 | |
| 
 | |
|     // Generate prev/next items based on sidebar.yml file
 | |
|     const sidebar = result.data.sidebar.edges;
 | |
|     const listOfItems = [];
 | |
| 
 | |
|     sidebar.forEach(({ node: { label, link, items } }) => {
 | |
|       if (Array.isArray(items)) {
 | |
|         items.forEach((item) => {
 | |
|           listOfItems.push({
 | |
|             label: item.label,
 | |
|             link: resolveLink(item.link, basePath),
 | |
|           });
 | |
|         });
 | |
|       } else {
 | |
|         listOfItems.push({
 | |
|           label,
 | |
|           link: resolveLink(link, basePath),
 | |
|         });
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     // Generate docs pages
 | |
|     const docs = result.data.files.edges;
 | |
|     docs.forEach((doc) => {
 | |
|       const {
 | |
|         childMdx: {
 | |
|           frontmatter: { next },
 | |
|           fields: { slug },
 | |
|         },
 | |
|         relativePath,
 | |
|       } = doc.node;
 | |
| 
 | |
|       const githubEditUrl =
 | |
|         githubUrl &&
 | |
|         `${githubUrl}/tree/master/${baseDir}/${docsPath}/${relativePath}`;
 | |
| 
 | |
|       const currentPageIndex = listOfItems.findIndex(
 | |
|         (page) => page.link === slug
 | |
|       );
 | |
| 
 | |
|       const prevItem = listOfItems[currentPageIndex - 1];
 | |
|       const nextItem = next
 | |
|         ? listOfItems.find((item) => item.link === next)
 | |
|         : listOfItems[currentPageIndex + 1];
 | |
| 
 | |
|       createPage({
 | |
|         path: slug,
 | |
|         component: docsTemplate,
 | |
|         context: {
 | |
|           slug,
 | |
|           prev: prevItem,
 | |
|           next: nextItem,
 | |
|           githubEditUrl,
 | |
|         },
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     reporter.success(`docs pages created`);
 | |
|   });
 | |
| };
 | |
| 
 | |
| exports.createSchemaCustomization = ({ actions }) => {
 | |
|   actions.createTypes(`
 | |
|     type MdxFrontmatter @dontInfer {
 | |
|       title: String!
 | |
|       description: String
 | |
|       image: String
 | |
|       disableTableOfContents: Boolean
 | |
|       next: String
 | |
|     }
 | |
|   `);
 | |
| 
 | |
|   actions.createTypes(`
 | |
|     type SidebarItems implements Node {
 | |
|       label: String!
 | |
|       link: String
 | |
|       items: [SidebarItemsItems]
 | |
|     }
 | |
| 
 | |
|     type SidebarItemsItems {
 | |
|       label: String
 | |
|       link: String
 | |
|     }
 | |
|   `);
 | |
| };
 | |
| 
 | |
| exports.onPreBootstrap = ({ store, reporter }, themeOptions) => {
 | |
|   const { configPath, docsPath } = withDefault(themeOptions);
 | |
|   const { program } = store.getState();
 | |
| 
 | |
|   const dirs = [
 | |
|     path.join(program.directory, configPath),
 | |
|     path.join(program.directory, docsPath),
 | |
|   ];
 | |
| 
 | |
|   dirs.forEach((dir) => {
 | |
|     if (!fs.existsSync(dir)) {
 | |
|       reporter.success(`docs: intialized the ${dir} directory`);
 | |
|       fs.mkdirSync(dir);
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| exports.onCreateNode = (
 | |
|   { node, actions: { createNodeField }, getNode },
 | |
|   themeOptions
 | |
| ) => {
 | |
|   if (node.internal.type !== `Mdx`) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   const { basePath } = withDefault(themeOptions);
 | |
| 
 | |
|   let value = createFilePath({ node, getNode });
 | |
|   if (value === "index") value = "";
 | |
| 
 | |
|   createNodeField({
 | |
|     name: `slug`,
 | |
|     node,
 | |
|     value: normalizeBasePath(basePath, value),
 | |
|   });
 | |
| 
 | |
|   createNodeField({
 | |
|     name: `id`,
 | |
|     node,
 | |
|     value: node.id,
 | |
|   });
 | |
| };
 | |
| 
 | |
| /**
 | |
| [
 | |
|   {
 | |
|     "node": {
 | |
|       "label": "Home",
 | |
|       "link": "/",
 | |
|       "items": null,
 | |
|       "id": "a2913be3-af3c-5fc9-967e-a058e86b20a9"
 | |
|     }
 | |
|   },
 | |
|   {
 | |
|     "node": {
 | |
|       "label": "With dropdown",
 | |
|       "link": null,
 | |
|       "items": [
 | |
|         { "label": "My Example", "link": "/my-example" },
 | |
|         { "label": "Teste 2", "link": "/teste-2" }
 | |
|       ],
 | |
|       "id": "c7d9606c-4bda-5097-a0df-53108e9f4efd"
 | |
|     }
 | |
|   }
 | |
| ]
 | |
| */
 | |
| 
 | |
| // Ler todo o array e salvar em uma objeto chave/valor
 | |
| /**
 | |
|  * {
 | |
|  *    '/': {
 | |
|  *       prev: null,
 | |
|  *       next: {
 | |
|  *          label: 'My example',
 | |
|  *          link: '/my-example'
 | |
|  *       }
 | |
|  *    },
 | |
|  *    '/my-example': {
 | |
|  *       prev: {
 | |
|  *          label: 'Home',
 | |
|  *          link: '/'
 | |
|  *       },
 | |
|  *       next: {
 | |
|  *          label: 'Teste 2',
 | |
|  *          link: '/teste-2'
 | |
|  *       }
 | |
|  *    },
 | |
|  *    '/teste-2': {
 | |
|  *       prev: {
 | |
|  *          label: 'My example',
 | |
|  *          link: '/my-example'
 | |
|  *       },
 | |
|  *       next: null
 | |
|  *    }
 | |
|  * }
 | |
|  */
 |