Got counting working

This commit is contained in:
Corbin Crutchley
2020-03-24 17:38:18 -07:00
parent c6d64a44ee
commit 54af3d01e0
9 changed files with 2643 additions and 1268 deletions

View File

@@ -62,7 +62,6 @@ module.exports = {
resolve: `gatsby-transformer-remark`, resolve: `gatsby-transformer-remark`,
options: { options: {
plugins: [ plugins: [
`count-inline-code`,
{ {
resolve: `gatsby-remark-images`, resolve: `gatsby-remark-images`,
options: { options: {
@@ -117,6 +116,7 @@ module.exports = {
] ]
} }
}, },
`count-inline-code`,
`gatsby-transformer-sharp`, `gatsby-transformer-sharp`,
`gatsby-plugin-sharp`, `gatsby-plugin-sharp`,
{ {

3771
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -21,39 +21,40 @@
] ]
}, },
"dependencies": { "dependencies": {
"@textlint/markdown-to-ast": "^6.1.7",
"@types/react-paginate": "^6.2.1", "@types/react-paginate": "^6.2.1",
"batteries-not-included": "0.0.2", "batteries-not-included": "0.0.2",
"classnames": "^2.2.6", "classnames": "^2.2.6",
"css-loader": "^3.4.0", "css-loader": "^3.4.0",
"disqus-react": "^1.0.7", "disqus-react": "^1.0.7",
"gatsby": "^2.19.43", "gatsby": "^2.20.4",
"gatsby-image": "^2.2.43", "gatsby-image": "^2.3.1",
"gatsby-plugin-feed": "^2.3.28", "gatsby-plugin-feed": "^2.4.1",
"gatsby-plugin-google-analytics": "^2.1.37", "gatsby-plugin-google-analytics": "^2.2.1",
"gatsby-plugin-lunr": "^1.5.2", "gatsby-plugin-lunr": "^1.5.2",
"gatsby-plugin-manifest": "^2.2.47", "gatsby-plugin-manifest": "^2.3.2",
"gatsby-plugin-offline": "^3.0.40", "gatsby-plugin-offline": "^3.1.1",
"gatsby-plugin-prefetch-google-fonts": "^1.4.3", "gatsby-plugin-prefetch-google-fonts": "^1.4.3",
"gatsby-plugin-react-helmet": "^3.1.23", "gatsby-plugin-react-helmet": "^3.2.1",
"gatsby-plugin-react-svg": "^3.0.0", "gatsby-plugin-react-svg": "^3.0.0",
"gatsby-plugin-robots-txt": "^1.5.0", "gatsby-plugin-robots-txt": "^1.5.0",
"gatsby-plugin-sass": "^2.1.30", "gatsby-plugin-sass": "^2.2.1",
"gatsby-plugin-sharp": "^2.4.12", "gatsby-plugin-sharp": "^2.5.3",
"gatsby-plugin-sitemap": "^2.2.29", "gatsby-plugin-sitemap": "^2.3.1",
"gatsby-plugin-transition-link": "^1.18.0", "gatsby-plugin-transition-link": "^1.18.0",
"gatsby-plugin-typescript": "^2.2.3", "gatsby-plugin-typescript": "^2.3.1",
"gatsby-remark-autolink-headers": "^2.1.25", "gatsby-remark-autolink-headers": "^2.2.1",
"gatsby-remark-copy-linked-files": "^2.1.39", "gatsby-remark-copy-linked-files": "^2.2.1",
"gatsby-remark-external-links": "0.0.4", "gatsby-remark-external-links": "0.0.4",
"gatsby-remark-images": "^3.1.49", "gatsby-remark-images": "^3.2.1",
"gatsby-remark-images-medium-zoom": "^1.4.0", "gatsby-remark-images-medium-zoom": "^1.4.0",
"gatsby-remark-prismjs": "^3.3.35", "gatsby-remark-prismjs": "^3.4.1",
"gatsby-remark-responsive-iframe": "^2.2.33", "gatsby-remark-responsive-iframe": "^2.3.1",
"gatsby-remark-video": "^1.2.5", "gatsby-remark-video": "^1.2.5",
"gatsby-source-filesystem": "^2.1.55", "gatsby-source-filesystem": "^2.2.2",
"gatsby-transformer-json": "^2.2.27", "gatsby-transformer-json": "^2.3.1",
"gatsby-transformer-remark": "^2.6.58", "gatsby-transformer-remark": "^2.7.1",
"gatsby-transformer-sharp": "^2.3.18", "gatsby-transformer-sharp": "^2.4.2",
"medium-zoom": "^1.0.5", "medium-zoom": "^1.0.5",
"node-sass": "^4.13.0", "node-sass": "^4.13.0",
"prismjs": "^1.17.1", "prismjs": "^1.17.1",
@@ -87,7 +88,7 @@
"@typescript-eslint/parser": "^2.21.0", "@typescript-eslint/parser": "^2.21.0",
"babel-jest": "^25.1.0", "babel-jest": "^25.1.0",
"babel-loader": "^8.0.6", "babel-loader": "^8.0.6",
"babel-preset-gatsby": "^0.2.26", "babel-preset-gatsby": "^0.3.1",
"eslint": "^6.8.0", "eslint": "^6.8.0",
"eslint-config-prettier": "^6.10.0", "eslint-config-prettier": "^6.10.0",
"eslint-plugin-prettier": "^3.1.2", "eslint-plugin-prettier": "^3.1.2",
@@ -122,6 +123,7 @@
"scripts": { "scripts": {
"build": "gatsby build", "build": "gatsby build",
"develop": "gatsby develop", "develop": "gatsby develop",
"debug": "gatsby clean && node --nolazy --inspect-brk --max-old-space-size=2000 ./node_modules/gatsby/dist/bin/gatsby.js develop",
"format": "run-s format:**", "format": "run-s format:**",
"format:ts": "eslint --fix ./src/**/*.{ts,tsx}", "format:ts": "eslint --fix ./src/**/*.{ts,tsx}",
"format:css": "stylelint --syntax=scss --fix \"./src/**/*.scss\"", "format:css": "stylelint --syntax=scss --fix \"./src/**/*.scss\"",

View File

@@ -1,3 +1,15 @@
/**
* While I would much MUCH rather utilize the existing AST manipulation from
* the remarked plugin, we've hit a bit of a snag. The problem is explained here:
* https://github.com/gatsbyjs/gatsby/issues/22287
*
* Once this issue is resolved/workedaround, we can move back to the code that
* was previously confirmed working here:
* https://github.com/unicorn-utterances/unicorn-utterances/tree/c6d64a44ee8a4e7d6cad1dbd2d01bc9a6ad78241/plugins/count-inline-code
*/
const flatFilter = require("unist-util-flat-filter");
const parse = require("@textlint/markdown-to-ast").parse;
exports.createSchemaCustomization = ({ actions }) => { exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions; const { createTypes } = actions;
const typeDefs = ` const typeDefs = `
@@ -7,3 +19,28 @@ exports.createSchemaCustomization = ({ actions }) => {
`; `;
createTypes(typeDefs); createTypes(typeDefs);
}; };
exports.sourceNodes = ({ getNodesByType, actions }) => {
const postNodes = getNodesByType(`MarkdownRemark`);
const { createNodeField } = actions;
postNodes.forEach(postNode => {
const markdownAST = parse(postNode.rawMarkdownBody);
const inlineCodeAST = flatFilter(markdownAST, node => node.type === "Code");
let inlineWords = 0;
if (inlineCodeAST && inlineCodeAST.children) {
inlineWords = inlineCodeAST.children
// Prevent grabbing from https://github.com/nullhook/gatsby-remark-video
.filter(child => !child.value.startsWith("video:"))
.reduce((numberOfInline, inlineCodeNode) => {
const { value } = inlineCodeNode;
const words = value.split(/\b/g);
return numberOfInline + words.length;
}, 0);
}
createNodeField({
name: `inlineCount`,
node: postNode,
value: inlineWords
});
});
};

View File

@@ -1,28 +0,0 @@
const flatFilter = require("unist-util-flat-filter");
const addInlineCount = ({ markdownAST, actions, markdownNode, ...props }) => {
const { createNodeField } = actions;
const inlineCodeAST = flatFilter(
markdownAST,
node => node.type === "inlineCode"
);
let inlineWords = 0;
if (inlineCodeAST && inlineCodeAST.children) {
inlineWords = inlineCodeAST.children.reduce(
(numberOfInline, inlineCodeNode) => {
const { value } = inlineCodeNode;
const words = value.split(/\b/g);
return numberOfInline + words.length;
},
0
);
}
createNodeField({
name: `inlineCount`,
node: markdownNode,
value: inlineWords
});
};
module.exports = addInlineCount;

View File

@@ -1,23 +0,0 @@
{
"name": "count-inline-code",
"version": "0.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"unist-util-flat-filter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unist-util-flat-filter/-/unist-util-flat-filter-1.0.0.tgz",
"integrity": "sha512-zjTmbMgyL1V7iUCnFaGLms9HtGbqK4d3YINqzu+wiMbau93GdiDGtJiB8lMhAyxAaxIAK2rOCeBCldF0FUreKQ==",
"requires": {
"unist-util-is": "^4.0.0"
},
"dependencies": {
"unist-util-is": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.1.tgz",
"integrity": "sha512-7NYjErP4LJtkEptPR22wO5RsCPnHZZrop7t2SoQzjvpFedCFer4WW8ujj9GI5DkUX7yVcffXLjoURf6h2QUv6Q=="
}
}
}
}
}

View File

@@ -1,5 +1,5 @@
{ {
"name": "count-inline-code", "name": "count-inline-code-2",
"version": "0.0.1", "version": "0.0.1",
"description": "", "description": "",
"main": "index.js", "main": "index.js",

View File

@@ -17,6 +17,8 @@ const BlogPostTemplateChild = (props: BlogPostTemplateProps) => {
const siteData = props.data.site.siteMetadata; const siteData = props.data.site.siteMetadata;
const slug = post.fields.slug; const slug = post.fields.slug;
console.log(post.fields);
const { currentTheme } = useContext(ThemeContext); const { currentTheme } = useContext(ThemeContext);
const [disqusConfig, setDisqusConfig] = useState({ const [disqusConfig, setDisqusConfig] = useState({

View File

@@ -35,6 +35,8 @@ const BlogProfile = (props: BlogProfileProps) => {
const unicornData = slugData.unicornsJson; const unicornData = slugData.unicornsJson;
const posts = slugData.allMarkdownRemark.edges; const posts = slugData.allMarkdownRemark.edges;
debugger;
const wordCount = useMemo(() => { const wordCount = useMemo(() => {
return posts.reduce( return posts.reduce(
(prev, post) => (prev, post) =>