kth-node-cortina-block
Fetch Cortina blocks and optionally cache using Redis.
Installation
npm install kth-node-cortina-block
Usage
A basic NodeJS example is located under /examples/
.
const cortina = require('kth-node-cortina-block')
const options = {
/* see below for options */
}
// somewhere else, usually in an express controller
cortina(options)
.then(function (blocks) {
// blocks should be used in the layout/view
// each block contains HTML,
// meaning it should not be escaped in the view
// blocks is a plain object with the following properties:
// title, image, footer, search, language, analytics
res.render('page', { blocks: blocks })
})
.catch(function (err) {
log.error({ err: err }, 'failed to get cortina blocks')
// either display the error:
res.render('error', { err: err })
// or render page without blocks:
res.render('page', { blocks: {} })
})
Options
-
url
is required. Should point to the Cortina block API endpoint. -
headers
is optional, pass headers used when fetching Cortina blocks. -
debug
is optional, defaults tofalse
. Enables logging of Redis errors. -
version
is optional, defaults tohead
. Change if needed. -
language
is optional, defaults toen
. -
redisKey
is optional, defaults toCortinaBlock_
. Used as a prefix for the Redis cache. Thelanguage
setting will be appended. -
redisExpire
is optional, defaults to600
(10 minutes). Sets expiration time in seconds for blocks stored in Redis. -
redis
is optional. Set to a Redis client instance when you want to enable Redis caching. Basically requires an object withget
andset
functions. -
blocks
is optional. It's a plain object containing Cortina block IDs. The following IDs are default and can be overridden.-
title
defaults to1.260060
. -
image
defaults to1.77257
. -
footer
defaults to1.202278
. -
search
defaults to1.77262
. -
language
optional object with language block IDs.-
en
defaults to1.77273
. -
sv
defaults to1.272446
._
-
-
analytics
defaults to1.464751
. -
gtmAnalytics
defaults to1.714097
. -
gtmNoscript
defaults to1.714099
.
You can also add application specific blocks to the options obejct like this:
blocks: { placesSearch: '1.672888' }
-
Run tests
Clone this repository, run npm install
followed by npm test
.
New version
Run the npm version <version>
command. See https://docs.npmjs.com/cli/version
for more details.
Prepare helper
A helper to modify paths in the blocks HTML for logo, site link/name, and locale link. The resulting blocks object should not be cached (i.e. called this after getting the blocks from the cache/API), because the locale URL changes with the request URL.
Usage
const cortina = require('kth-cortina-block')
function prepare(blocks, req, config) {
return cortina.prepare(blocks, {
urls: {
request: req.url,
app: config.full.hostUrl + config.full.proxyPrefixPath.uri,
},
// more options below
})
}
Options
-
blocks
is required. You get this from the main call tocortina
. -
config
is required. A plain object with the following properties:-
siteName
is optional. Set this to override the site link text. -
localeText
is optional. Set this to override the locale link text. -
urls
is required. A plain object with the following properties:-
prod
is optional, defaults to//www.kth.se
. The production URL. -
request
is required. Usually the expressreq.url
value. -
app
is optional, defaults to an empty string. Usually the host URL and the proxy prefix path. -
siteUrl
is optional, overides default url on the site name only.
-
-
selectors
is optional, defaults to a plain object with the following properties:-
logo
is optional, defaults to.imageWrapper img
. -
siteName
is optional, defaults to.siteName a
. -
localeLink
is optional, defaults to.block.link a.localeLink
.
-
-
Returned blocks
title: "\n\n\n <h1 class=\"bloc…logy</a>\n </h1>\n\n\n",
megaMenu: "\n\n\n\n <nav class=\"b…\n </nav>\n\n \n\n",
secondaryMenu: "\n\n\n <div class=\"blo… </ul>\n </div>\n\n\n",
image: "\n\n\n <figure class=\"… \n </figure>\n\n\n",
footer: "\n\n\n <div class=\"blo… </div>\n </div>\n\n\n",
search: "\n\n\n <div class=\"blo…aded=!0);</script>\n\n\n",
language: "\n\n\n <a class=\"block…KTH på svenska</a>\n\n\n",
analytics: "\n\n\n \n <!-- conte…r\n};</script>\n \n\n\n",
gtmAnalytics: "\n\n\n <!-- Begin JavaS…entId-1_714097 -->\n\n\n",
gtmNoscript: "\n\n\n <!-- Begin HTML …entId-1_714099 -->\n\n\n"