feat(courses): Add view helpers
This commit is contained in:
committed by
Benedikt Rötsch
parent
c650dd3f1c
commit
500b103c03
8
app.js
8
app.js
@@ -1,6 +1,7 @@
|
|||||||
require('dotenv').config({ path: 'variables.env' })
|
require('dotenv').config({ path: 'variables.env' })
|
||||||
const express = require('express')
|
const express = require('express')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const helpers = require('./helpers')
|
||||||
// const favicon = require('serve-favicon')
|
// const favicon = require('serve-favicon')
|
||||||
const logger = require('morgan')
|
const logger = require('morgan')
|
||||||
const cookieParser = require('cookie-parser')
|
const cookieParser = require('cookie-parser')
|
||||||
@@ -27,6 +28,12 @@ app.use(bodyParser.urlencoded({ extended: false }))
|
|||||||
app.use(cookieParser())
|
app.use(cookieParser())
|
||||||
app.use(express.static(path.join(__dirname, 'public')))
|
app.use(express.static(path.join(__dirname, 'public')))
|
||||||
|
|
||||||
|
// Pass custo helpers to all our templates
|
||||||
|
app.use(function (req, res, next) {
|
||||||
|
res.locals.helpers = helpers
|
||||||
|
next()
|
||||||
|
})
|
||||||
|
|
||||||
app.use('/', index)
|
app.use('/', index)
|
||||||
app.use('/courses', courses)
|
app.use('/courses', courses)
|
||||||
app.use('/categories', categories)
|
app.use('/categories', categories)
|
||||||
@@ -52,6 +59,7 @@ app.use(function (err, req, res, next) {
|
|||||||
res.render('error')
|
res.render('error')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// app.use()
|
||||||
// init the contentful client
|
// init the contentful client
|
||||||
initClient()
|
initClient()
|
||||||
|
|
||||||
|
|||||||
17
helpers.js
Normal file
17
helpers.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
const marked = require('marked')
|
||||||
|
|
||||||
|
// Parse markdown text
|
||||||
|
exports.markdown = (content) => {
|
||||||
|
return marked(removeIvalidDataURL(content), {sanitize: true})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dump is a handy debugging function we can use to sort of "console.log" our data
|
||||||
|
exports.dump = (obj) => JSON.stringify(obj, null, 2)
|
||||||
|
|
||||||
|
// Evil users might try to add base64 url data to execute js
|
||||||
|
// so we should take care of that
|
||||||
|
function removeIvalidDataURL (content) {
|
||||||
|
let regex = /data:\S+;base64\S*/gm
|
||||||
|
return content.replace(regex, '#')
|
||||||
|
}
|
||||||
|
|
||||||
@@ -17,6 +17,8 @@
|
|||||||
"debug": "~2.2.0",
|
"debug": "~2.2.0",
|
||||||
"dotenv": "^4.0.0",
|
"dotenv": "^4.0.0",
|
||||||
"express": "~4.14.0",
|
"express": "~4.14.0",
|
||||||
|
"jstransformer-markdown-it": "^2.0.0",
|
||||||
|
"marked": "^0.3.6",
|
||||||
"morgan": "~1.7.0",
|
"morgan": "~1.7.0",
|
||||||
"normalize.css": "^7.0.0",
|
"normalize.css": "^7.0.0",
|
||||||
"pug": "~2.0.0-beta6",
|
"pug": "~2.0.0-beta6",
|
||||||
|
|||||||
@@ -16,6 +16,6 @@ block content
|
|||||||
|
|
||||||
if lesson
|
if lesson
|
||||||
h2= lesson.fields.title
|
h2= lesson.fields.title
|
||||||
p= lesson.fields.description
|
p !{helpers.markdown(lesson.fields.description)}
|
||||||
else
|
else
|
||||||
p= course.fields.description
|
p !{helpers.markdown(course.fields.description)}
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ mixin copyModule(module)
|
|||||||
.module__copy
|
.module__copy
|
||||||
h1.module__copy__title #{module.fields.title}
|
h1.module__copy__title #{module.fields.title}
|
||||||
h3.module__copy__headline #{module.fields.headline}
|
h3.module__copy__headline #{module.fields.headline}
|
||||||
div.module__copy__copy #{module.fields.copy}
|
div.module__copy__copy !{helpers.markdown(module.fields.copy)}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ mixin courseCard(course = {fields: {title: '', description: '', categories: [],
|
|||||||
.course-card__title
|
.course-card__title
|
||||||
h2= course.fields.title
|
h2= course.fields.title
|
||||||
.course-card__description
|
.course-card__description
|
||||||
p= course.fields.shortDescription
|
p !{helpers.markdown(course.fields.shortDescription)}
|
||||||
.course-card__link
|
.course-card__link
|
||||||
a(href=`/courses/${course.fields.slug}`) view course
|
a(href=`/courses/${course.fields.slug}`) view course
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
mixin lesson(lesson)
|
mixin lesson(lesson)
|
||||||
.lesson
|
.lesson
|
||||||
h1.lesson__tilte #{lesson.fields.title}
|
h1.lesson__tilte #{lesson.fields.title}
|
||||||
div.lesson__shortDescription #{lesson.fields.shortDescription}
|
div.lesson__shortDescription !{helpers.markdown(lesson.fields.shortDescription)}
|
||||||
img.lesson__image(src=`${lesson.fields.image.fields.file.url}` alt=`${lesson.fields.image.fields.title}`)
|
img.lesson__image(src=`${lesson.fields.image.fields.file.url}` alt=`${lesson.fields.image.fields.title}`)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user