litebb/helpers.js

1const config = require("./config/config"); 2 3const siteName = config.siteName; 4const cacheBustId = config.startedOn; 5 6// markdown to html conversion is done 7// with showdown and then passing the html 8// generated to xss 9const showdown = require("showdown"); 10const xss = require("xss"); 11const converter = new showdown.Converter(); 12// prevent a # foo from becoming <h1 id="foo">foo</h1> 13converter.setOption("noHeaderId", true); 14// # foo -> <h3 id="foo">foo</h3> 15converter.setOption("headerLevelStart", 3); 16 17const convertMdToHTML = (content) => { 18 let html = converter.makeHtml(content); 19 html = xss(html); 20 return html; 21}; 22 23// https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript 24const makeRandomId = (length) => { 25 let result = ""; 26 const characters = 27 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 28 const charactersLength = characters.length; 29 for (let i = 0; i < length; i++) { 30 result += characters.charAt(Math.floor(Math.random() * charactersLength)); 31 } 32 return result; 33}; 34 35const makeSlug = (name) => { 36 const id = makeRandomId(5).toLowerCase(); 37 const urlName = name.replace(/\W+/g, " ").toLowerCase().replace(/ /g, "-"); 38 39 return `${urlName}-${id}`; 40}; 41 42const displayDateTime = (d) => { 43 const dateUTC = new Date(d).toUTCString(); 44 const dateUTC_splits = dateUTC.split(" "); 45 // [ "Sat,", "25", "Apr", "2020", "06:52:01", "GMT" ] 46 const hm_splits = dateUTC_splits[4].split(":"); 47 hm_splits.pop(); // 01 gone 48 const hm = hm_splits.join(":"); 49 50 return `${dateUTC_splits[1]} ${dateUTC_splits[2]} ${dateUTC_splits[3]}, ${hm} ${dateUTC_splits[5]}`; 51}; 52 53const displayDate = (d) => { 54 const dateUTC = new Date(d).toUTCString(); 55 const dateUTC_splits = dateUTC.split(" "); 56 // [ "Sat,", "25", "Apr", "2020", "06:52:01", "GMT" ] 57 return `${dateUTC_splits[1]} ${dateUTC_splits[2]} ${dateUTC_splits[3]}`; 58}; 59 60const truncateTitleString = (title) => { 61 if (title.length <= 12) { 62 return title; 63 } 64 let newTitle = title.substr(0, 12).trim(); 65 newTitle += "..."; 66 return newTitle; 67}; 68 69module.exports = { 70 siteName, 71 cacheBustId, 72 makeRandomId, 73 makeSlug, 74 displayDateTime, 75 displayDate, 76 convertMdToHTML, 77 truncateTitleString, 78};