var marked = require('marked'); var fs = require('fs'); var hljs = require('highlight.js'); var TOS = fs.readFileSync('resources/TOS.md', 'utf-8'); var pageTemplate = fs.readFileSync('resources/template.html', 'utf-8'); var footerTemplate = fs.readFileSync('resources/footer.html', 'utf-8'); var editTemplate = fs.readFileSync('resources/edit.html', 'utf-8'); var header = fs.readFileSync(process.env.HEADER || '/dev/null', 'utf-8'); var deriveTitle = text => text .split(/[\n\r]/)[0].slice(0,25) .replace(/[`~!@#\$%^&\*_|\+=\?;:'",.<>\{\}\\\/]/g, ''); var renderPage = (id, title, content, footer, blackList) => pageTemplate .replace('%HEADER%', blackList && blackList.has(id) ? header : '') .replace('%TITLE%', title) .replace('%CONTENT%', content.replace(//gi, '').replace(//gi, '')) .replace('%FOOTER%', footer || ''); marked.setOptions({ langPrefix: 'hljs lang-', highlight: code => hljs.highlightAuto(code).value, }); module.exports.renderPage = renderPage; module.exports.renderStats = note => renderPage(note.id, deriveTitle(note.text), `

Statistics

Published${note.published}
Edited${note.edited || 'N/A'}
Views${note.views}
`); module.exports.renderTOS = () => renderPage('tos', 'Terms of Service', marked(TOS)); module.exports.renderNote = (note, blackList) => renderPage(note.id, deriveTitle(note.text), marked(note.text), footerTemplate.replace(/%LINK%/g, note.id), blackList); module.exports.newNotePage = session => editTemplate .replace('%ACTION%', 'POST') .replace('%SESSION%', session) .replace('%CONTENT%', 'Loading...'); module.exports.editNotePage = (session, note) => editTemplate .replace('%ACTION%', 'UPDATE') .replace('%SESSION%', session) .replace('%ID%', note.id) .replace('%CONTENT%', escape$(note.text)); var escape$ = s => s.split('').map(chr => chr == '$' ? '$$' : chr).join('');