Allow HTML embed, add extra scripts/styles support
parent
d59ef1c589
commit
8a8e247a14
|
@ -1,6 +1,6 @@
|
||||||
const router = require('express').Router()
|
const router = require('express').Router()
|
||||||
const mcache = require('memory-cache')
|
const mcache = require('memory-cache')
|
||||||
const md = require('markdown-it')({ typographer: true })
|
const md = require('markdown-it')({ html: true, typographer: true })
|
||||||
md.use(require('markdown-it-anchor'), {permalink: true, level: 2, permalinkBefore: true, permalinkSymbol: "§"})
|
md.use(require('markdown-it-anchor'), {permalink: true, level: 2, permalinkBefore: true, permalinkSymbol: "§"})
|
||||||
md.use(require('markdown-it-title'), 0)
|
md.use(require('markdown-it-title'), 0)
|
||||||
md.use(require('markdown-it-attrs'))
|
md.use(require('markdown-it-attrs'))
|
||||||
|
@ -26,7 +26,7 @@ module.exports = (plugin, app) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
router.get('*', cache(1), function(req, res) {
|
router.get('*', cache(1), async function(req, res) {
|
||||||
let target = req.path
|
let target = req.path
|
||||||
if (target === "/") { // Root
|
if (target === "/") { // Root
|
||||||
target = '/index'
|
target = '/index'
|
||||||
|
@ -34,17 +34,18 @@ module.exports = (plugin, app) => {
|
||||||
target = target.substring(0, target.length-1)
|
target = target.substring(0, target.length-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
let file = path.join(app.config.srd, target+'.md')
|
let md_file = path.join(app.config.srd, target+'.md')
|
||||||
|
let json_file = path.join(app.config.srd, target+'.json')
|
||||||
|
|
||||||
|
let output = ''
|
||||||
|
let env = {}
|
||||||
|
let title = ''
|
||||||
let crumbs = target.split('/')
|
let crumbs = target.split('/')
|
||||||
|
|
||||||
fs.readFile(file, (err, data) => {
|
// Attempt to read md
|
||||||
if (err) {
|
try {
|
||||||
res.render('index', {content: '404', menu: app.live.menu, location: '404', title: '404', www_name: app.live.conf.www_name, www_copyright: app.live.conf.www_copyright })
|
// Process source data.
|
||||||
return
|
let data = await fs.promises.readFile(md_file)
|
||||||
//throw err
|
|
||||||
}
|
|
||||||
|
|
||||||
// make a local copy of our dictionary and remove the current page, if existing
|
// make a local copy of our dictionary and remove the current page, if existing
|
||||||
let local_dictionary = Object.assign({}, app.live.dictionary)
|
let local_dictionary = Object.assign({}, app.live.dictionary)
|
||||||
delete local_dictionary[crumbs[crumbs.length-1]]
|
delete local_dictionary[crumbs[crumbs.length-1]]
|
||||||
|
@ -57,9 +58,26 @@ module.exports = (plugin, app) => {
|
||||||
text = data.toString()
|
text = data.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
// render out the md
|
output = md.render(text, env)
|
||||||
let env = {}
|
title = env.title
|
||||||
let rendered = md.render(text, env)
|
} catch(err) {
|
||||||
|
output = '404'
|
||||||
|
title = '404'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for json extra
|
||||||
|
let extra = {
|
||||||
|
scripts: [],
|
||||||
|
styles: [],
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let data = await fs.promises.readFile(json_file)
|
||||||
|
extra = {...extra, ...JSON.parse(data)}
|
||||||
|
} catch(err) {
|
||||||
|
if (err.code !== 'ENOENT') {
|
||||||
|
plugin.error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// build the location
|
// build the location
|
||||||
let loc = '<a href="/">'+app.live.conf['shortname']+'</a>'
|
let loc = '<a href="/">'+app.live.conf['shortname']+'</a>'
|
||||||
|
@ -68,10 +86,16 @@ module.exports = (plugin, app) => {
|
||||||
loc += ' → <a href="'+crumbs.slice(0,i).join('/')+'/'+crumbs[i]+'">'+(i == crumbs.length-1 ? env.title : crumbs[i].replace('-', ' '))+'</a>'
|
loc += ' → <a href="'+crumbs.slice(0,i).join('/')+'/'+crumbs[i]+'">'+(i == crumbs.length-1 ? env.title : crumbs[i].replace('-', ' '))+'</a>'
|
||||||
}
|
}
|
||||||
|
|
||||||
let title = env.title
|
|
||||||
|
|
||||||
// render with the engine
|
// render with the engine
|
||||||
res.render('index', {content: rendered, menu: app.live.menu, location: loc, title: (title != 'index' ? title : ''), www_name: app.live.conf.www_name, www_copyright: app.live.conf.www_copyright })
|
res.render('index', {
|
||||||
|
content: output,
|
||||||
|
menu: app.live.menu,
|
||||||
|
location: loc,
|
||||||
|
title: (title != 'index' ? title : ''),
|
||||||
|
www_name: app.live.conf.www_name,
|
||||||
|
www_copyright: app.live.conf.www_copyright,
|
||||||
|
scripts: extra.scripts,
|
||||||
|
styles: extra.styles,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,13 @@
|
||||||
<title>{{? it.title }} {{=it.title}} - {{?}} {{? it.www_name }} {{=it.www_name}} {{?}}</title>
|
<title>{{? it.title }} {{=it.title}} - {{?}} {{? it.www_name }} {{=it.www_name}} {{?}}</title>
|
||||||
<link rel="icon" type="image/png" href="/favicon.png">
|
<link rel="icon" type="image/png" href="/favicon.png">
|
||||||
<link rel='stylesheet' type='text/css' href='/style.css'>
|
<link rel='stylesheet' type='text/css' href='/style.css'>
|
||||||
|
{{~ it.styles :s}}
|
||||||
|
<link rel='stylesheet' type='text/css' href='{{=s}}'>
|
||||||
|
{{~}}
|
||||||
<script type='text/javascript' src='/candy.js'></script>
|
<script type='text/javascript' src='/candy.js'></script>
|
||||||
|
{{~ it.scripts :s}}
|
||||||
|
<script type='text/javascript' src='{{=s}}'></script>
|
||||||
|
{{~}}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="location">{{=it.location || ''}}</div>
|
<div id="location">{{=it.location || ''}}</div>
|
||||||
|
|
Loading…
Reference in New Issue