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};