diff --git a/app.js b/app.js index db6db70..e310a42 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,6 @@ require('dotenv').config({ path: 'variables.env' }) const express = require('express') +const url = require('url') const path = require('path') const helpers = require('./helpers') // const favicon = require('serve-favicon') @@ -31,6 +32,11 @@ 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 + const qs = url.parse(req.url).query + res.locals.queryString = qs ? `?${qs}` : '' + res.locals.query = req.query + res.locals.currentPath = req.path + console.log(req.path) next() }) diff --git a/routes/courses.js b/routes/courses.js index fe02643..15affad 100644 --- a/routes/courses.js +++ b/routes/courses.js @@ -9,8 +9,8 @@ router.get('/', async function (req, res, next) { let courses = [] let categories = [] try { - courses = await getCourses() - categories = await getCategories() + courses = await getCourses(req.query.locale, req.query.api) + categories = await getCategories(req.query.locale, req.query.api) } catch (e) { console.log('Error ', e) } @@ -23,7 +23,7 @@ router.get('/categories/:category', async function (req, res, next) { let courses = [] let categories = [] try { - courses = await getCoursesByCategory(req.params.category) + courses = await getCoursesByCategory(req.params.category, req.query.locale, req.query.api) categories = await getCategories() } catch (e) { console.log('Error ', e) @@ -33,7 +33,7 @@ router.get('/categories/:category', async function (req, res, next) { /* GET course detail. */ router.get('/:slug', async function (req, res, next) { - let course = await getCourse(req.params.slug) + let course = await getCourse(req.params.slug, req.query.locale, req.query.api) const lessons = course.fields.lessons const lessonIndex = lessons.findIndex((lesson) => lesson.fields.slug === req.params.lslug) const lesson = lessons[lessonIndex] @@ -42,7 +42,7 @@ router.get('/:slug', async function (req, res, next) { /* GET course lesson detail. */ router.get('/:cslug/lessons/:lslug', async function (req, res, next) { - let course = await getCourse(req.params.cslug) + let course = await getCourse(req.params.cslug, req.query.locale, req.query.api) const lessons = course.fields.lessons const lessonIndex = lessons.findIndex((lesson) => lesson.fields.slug === req.params.lslug) const lesson = lessons[lessonIndex] diff --git a/routes/index.js b/routes/index.js index 7c4fbeb..e38428a 100644 --- a/routes/index.js +++ b/routes/index.js @@ -4,7 +4,7 @@ const router = express.Router() /* GET home page. */ router.get('/', async function (req, res, next) { - const landingPage = await getLandingPage() + const landingPage = await getLandingPage(req.query.locale, req.query.api) res.render('index', { title: 'Contentful University', landingPage }) }) diff --git a/services/contentful.js b/services/contentful.js index 1128661..b93bdb9 100644 --- a/services/contentful.js +++ b/services/contentful.js @@ -5,7 +5,7 @@ let cpaClient = null exports.initClient = (config = {space: process.env.CF_SPACE, accessToken: process.env.CF_ACCESS_TOKEN}) => { cdaClient = createClient(config) - cpaClient = createClient({...config, host: 'preview.contentful.com'}) + cpaClient = createClient({space: process.env.CF_SPACE, accessToken: process.env.CF_PREVIEW_ACCESS_TOKEN, host: 'preview.contentful.com'}) } exports.getCourses = (locale = 'en-US', api = `cda`) => { diff --git a/variables.env b/variables.env index 36a882d..801181a 100644 --- a/variables.env +++ b/variables.env @@ -1,4 +1,5 @@ NODE_ENV=development CF_SPACE=82t39nctsu20 CF_ACCESS_TOKEN=8a3a5137487cc1d04203ee1ff206075bc5dd74342f6b53eb302111fe8d2f235e +CF_PREVIEW_ACCESS_TOKEN=03265bbaa6138a24cbe370685b2c9993038ee9b6a3b011f30d5c86f7ea885fb3 PORT=3000 diff --git a/views/course.pug b/views/course.pug index 6d618c0..11fca12 100644 --- a/views/course.pug +++ b/views/course.pug @@ -13,7 +13,7 @@ block content each l in course.fields.lessons if l.fields li - a(href=`/courses/${course.fields.slug}/lessons/${l.fields.slug}`) #{l.fields.title} + a(href=`/courses/${course.fields.slug}/lessons/${l.fields.slug}${queryString}`) #{l.fields.title} section.wrapper-with-sidebar__content h1= course.fields.title @@ -21,7 +21,7 @@ block content +lesson(lesson) if lessonIndex + 1< lessons.length if lessons[lessonIndex + 1].fields - a.cta(href=`/courses/${course.fields.slug}/lessons/${lessons[lessonIndex + 1].fields.slug}`) View next lesson + a.cta(href=`/courses/${course.fields.slug}/lessons/${lessons[lessonIndex + 1].fields.slug}${queryString}`) View next lesson else p !{helpers.markdown(course.fields.description)} - a.cta(href=`/courses/${course.fields.slug}/lessons/${course.fields.lessons[0].fields.slug}`) Start course + a.cta(href=`/courses/${course.fields.slug}/lessons/${course.fields.lessons[0].fields.slug}${queryString}`) Start course diff --git a/views/courses.pug b/views/courses.pug index 177b0d2..de31d6b 100644 --- a/views/courses.pug +++ b/views/courses.pug @@ -12,7 +12,7 @@ block content a.active(href=`/courses`) All courses each category in categories li - a(href=`/courses/categories/${category.sys.id}`) #{category.fields.title} + a(href=`/courses/categories/${category.sys.id}${queryString}`) #{category.fields.title} section.wrapper-with-sidebar__content h1= title .courses.grid-list-small diff --git a/views/layout.pug b/views/layout.pug index a1fc96e..a8e88e0 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -17,23 +17,23 @@ html fieldset label(for='api') API type: select(name='api' onChange='this.form.submit()') - option(value='CDA') Delivery API - option(value='CPA') Preview API + option(value='cda' selected=query.api === 'cda') Delivery API + option(value='cpa' selected=query.api === 'cpa') Preview API fieldset label(for='locale') Language: select(name='locale' onChange='this.form.submit()') - option(value='en-US') English - option(value='de-DE') German + option(value='en-US' selected=query.locale === 'en-US') English + option(value='de-DE' selected=query.locale === 'de-DE') German nav.header__navigation ul li - a.active(href='/') Home + a(href=`/${queryString}` class=(currentPath === '/'? 'active' : '')) Home li - a(href='/courses') Courses + a(href=`/courses${queryString}` class=(currentPath.startsWith('/courses') ? 'active' : '') ) Courses li - a(href='/about') About + a(href=`/about${queryString}` class=(currentPath.startsWith('/about') ? 'active' : '')) About li - a(href='/settings') Settings + a(href=`/settings${queryString}` class=(currentPath.startsWith('/settings') ? 'active' : '')) Settings #main__content block content @@ -45,13 +45,13 @@ html nav.footer__navigation ul li - a.active(href='/') Home + a(href=`/${queryString}` class=(currentPath === '/'? 'active' : '')) Home li - a(href='/courses') Courses + a(href=`/courses${queryString}` class=(currentPath.startsWith('/courses') ? 'active' : '') ) Courses li - a(href='/about') About + a(href=`/about${queryString}` class=(currentPath.startsWith('/about') ? 'active' : '')) About li - a(href='/settings') Settings + a(href=`/settings${queryString}` class=(currentPath.startsWith('/settings') ? 'active' : '')) Settings .footer__apps a(href='#') img(src='/images/app-store-badge.png') diff --git a/views/mixins/_courseCard.pug b/views/mixins/_courseCard.pug index 36bed74..2a6b36e 100644 --- a/views/mixins/_courseCard.pug +++ b/views/mixins/_courseCard.pug @@ -3,10 +3,10 @@ mixin courseCard(course = {fields: {title: '', description: '', categories: [], .course-card__categories if(course.fields.categories) each category in course.fields.categories - a.course-card__category(href=`/courses/categories/${category.sys.id}`) #{category.fields.title} + a.course-card__category(href=`/courses/categories/${category.sys.id}${queryString}`) #{category.fields.title} h2.course-card__title= course.fields.title .course-card__description-wrapper p !{helpers.markdown(course.fields.shortDescription)} .course-card__link-wrapper - a.course-card__link(href=`/courses/${course.fields.slug}`) view course + a.course-card__link(href=`/courses/${course.fields.slug}${queryString}`) view course