1
0
mirror of https://github.com/kremalicious/blog.git synced 2025-02-14 21:10:25 +01:00
This commit is contained in:
Matthias Kretschmann 2018-09-13 00:46:40 +02:00
parent c271ab750e
commit ae9030ef6d
Signed by: m
GPG Key ID: 606EEEF3C479A91F
2 changed files with 61 additions and 48 deletions

View File

@ -9,59 +9,68 @@ const Fraction = require('fraction.js')
const meta = yaml.load(fs.readFileSync('./content/meta.yml', 'utf8')) const meta = yaml.load(fs.readFileSync('./content/meta.yml', 'utf8'))
const { itemsPerPage } = meta const { itemsPerPage } = meta
// Create slug & date for posts from file path values
exports.onCreateNode = ({ node, actions, getNode }) => { exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions const { createNodeField } = actions
// Markdown files
if (node.internal.type === 'MarkdownRemark') { if (node.internal.type === 'MarkdownRemark') {
const fileNode = getNode(node.parent) createMarkdownNodeFields(node, createNodeField, getNode)
const parsedFilePath = path.parse(fileNode.relativePath)
const slugOriginal = createFilePath({ node, getNode })
// slug
let slug
if (parsedFilePath.name === 'index') {
slug = `/${parsedFilePath.dir.substring(11)}` // remove date from file dir
} else {
slug = `/${slugOriginal.substring(12)}` // remove first slash & date from file path
}
createNodeField({
node,
name: 'slug',
value: slug
})
// date
let date
if (node.frontmatter.date) {
date = `${node.frontmatter.date}`
} else {
date = `${slugOriginal.substring(1, 10)}` // grab date from file path
}
createNodeField({
node,
name: 'date',
value: date
})
} }
// exif // Image files
if (node.internal.mediaType === 'image/jpeg') { if (node.internal.mediaType === 'image/jpeg') {
fastExif readAndCreateExifFields(node, createNodeField)
.read(node.absolutePath, true)
.then(exifData => {
if (!exifData) return
generateExif(exifData, createNodeField, node)
})
.catch(() => null) // just silently fail when exif can't be extracted
} }
} }
const generateExif = (exifData, createNodeField, node) => { // Create slug & date for posts from file path values
const createMarkdownNodeFields = (node, createNodeField, getNode) => {
const fileNode = getNode(node.parent)
const parsedFilePath = path.parse(fileNode.relativePath)
const slugOriginal = createFilePath({ node, getNode })
// slug
let slug
if (parsedFilePath.name === 'index') {
slug = `/${parsedFilePath.dir.substring(11)}` // remove date from file dir
} else {
slug = `/${slugOriginal.substring(12)}` // remove first slash & date from file path
}
createNodeField({
node,
name: 'slug',
value: slug
})
// date
let date
if (node.frontmatter.date) {
date = `${node.frontmatter.date}`
} else {
date = `${slugOriginal.substring(1, 10)}` // grab date from file path
}
createNodeField({
node,
name: 'date',
value: date
})
}
const readAndCreateExifFields = (node, createNodeField) => {
fastExif
.read(node.absolutePath, true)
.then(exifData => {
if (!exifData) return
createExifFields(exifData, createNodeField, node)
})
.catch(() => null) // just silently fail when exif can't be extracted
}
const createExifFields = (exifData, createNodeField, node) => {
const { Model } = exifData.image const { Model } = exifData.image
const { const {
ISO, ISO,

View File

@ -9,17 +9,21 @@ import Rss from '../svg/Rss'
import Jsonfeed from '../svg/Jsonfeed' import Jsonfeed from '../svg/Jsonfeed'
const NetworkIcon = ({ link }) => { const NetworkIcon = ({ link }) => {
let Icon
if (link.includes('twitter')) { if (link.includes('twitter')) {
return <Twitter className={styles.twitter} /> Icon = <Twitter className={styles.twitter} />
} else if (link.includes('github')) { } else if (link.includes('github')) {
return <Github className={styles.github} /> Icon = <Github className={styles.github} />
} else if (link.includes('facebook')) { } else if (link.includes('facebook')) {
return <Facebook className={styles.facebook} /> Icon = <Facebook className={styles.facebook} />
} else if (link.includes('feed.xml')) { } else if (link.includes('feed.xml')) {
return <Rss className={styles.rss} /> Icon = <Rss className={styles.rss} />
} else if (link.includes('feed.json')) { } else if (link.includes('feed.json')) {
return <Jsonfeed className={styles.json} /> Icon = <Jsonfeed className={styles.json} />
} }
return Icon
} }
const IconLinks = ({ links }) => ( const IconLinks = ({ links }) => (