export default { commatize, privacyDot, shortMonths, verboseDate, carbonDate, hushViews, hushSize, hushNull, courtesyS, getRevision, getAge, tidyURLs, getDomain, } function commatize (n) { var nums = [], i, counter = 0, r = Math.floor if (n > 1024) { n /= 1024 nums.unshift(r((n * 10) % 10)) nums.unshift(".") } do { i = n % 10 n = r(n / 10) if (n && ! (++counter % 3)) { i = ' ' + r(i) } nums.unshift(r(i)) } while (n) return nums.join("") } function privacyDot (p) { if (! p) return "·" else return "·:" } const shortMonths = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ") function verboseDate (dateStr, pad_hours) { const dateObj = new Date(dateStr) let d = dateObj.getDate() let m = dateObj.getMinutes() let h = dateObj.getHours() let meridian if (h == 0) { h = 12 meridian = " am" } else if (h == 12) { meridian = " pm" } else if (h > 12) { h -= 12 meridian = " pm" } else { meridian = " am" } if (d < 10) d = "0" + d if (m < 10) m = "0" + m if (pad_hours && h < 10) h = "0" + h const date = d + '-' + shortMonths[dateObj.getMonth()] + '-' + dateObj.getFullYear() const time = h + ':' + m + meridian return { date, time } } function carbonDate (date, no_bold) { const span = (+new Date() - new Date(date)) / 1000 if (! no_bold && span < 86400) // modified today { color = "new" } else if (span < 604800) // modifed this week { color = "recent" } else if (span < 1209600) // modifed 2 weeks ago { color = "med" } else if (span < 3024000) // modifed 5 weeks ago { color = "old" } else if (span < 12315200) // modifed 6 months ago { color = "older" } else { color = "quiet" } return color } function hushViews (n, bias, no_bold) { const txt = commatize(n) bias = bias || 1 n = n || 0 if (n < 30) { return["quiet", n + " v."] } if (n < 200) { return ["quiet", txt + " v."] } else if (n < 500) { return ["quiet", txt + " v."] } else if (n < 1000) { return ["old", txt + " v."] } else if (n < 5000) { return ["med", txt + " kv."] } else if (nobold || n < 10000) { return ["recent", txt + " kv."] } else { return ["new", txt + " kv."] } } function hushSize (n, bias, nobold) { const txt = commatize(Math.floor(n / 1024)) bias = 1 || bias n = n || 0 if (n < 1024) { return ["quiet", n + " b."] } if (n < 1024*1024) { return ["quiet", txt + " kb."] } else if (n < (20000000/bias)) { return ["quiet", txt + " mb."] } else if (n < (50000000/bias)) { return ["old", txt + " mb."] } else if (n < (80000000/bias)) { return ["med", txt + " mb."] } else if (nobold || n < (170000000/bias)) { return ["recent", txt + " mb."] } else { return ["new", txt + " mb."] } } function hushNull (n, unit, no_bold) { const s = unit ? n + " " + unit + "." : n if (n < 3) { return ["quiet", s] } else if (n < 6) { return ["older", s] } else if (n < 10) { return ["old", s] } else if (n < 16) { return ["med", s] } else if (no_bold || n < 21) { return ["recent", s] } else { return ["new", s] } } function courtesyS (n, s) { return v == 1 ? "" : (s || "s") } const revisionLetters = "z a b c d f g h j k l m n p q r s t v w x y".split(" ") function getRevision (thread) { if (! thread.revision) return "" let rev = thread.revision let n = 0 let digits = "" do { n = rev % 21 rev = Math.floor(rev / 21) digits = revisionLetters[n] + digits } while (rev !== 0) return digits } function getAge (t) { let age = Math.abs( Date.now() - new Date(t)) / 1000 const r = Math.floor let m if (age < 5) { return "now" } if (age < 60) { return r(age) + "s" } age /= 60 if (age < 60) { return r(age) + "m" } m = r(age % 60) age /= 60 if (m > 0 && age < 2) { return r(age) + "h" + m + "m" } if (age < 24) { return r(age) + "h" } age /= 24 if (age < 7) { return r(age) + "d" } age /= 7 if (age < 12) { return r(age) + "w" } age /= 4 if (age < 12) { return r(age) + "m" } age /= 12 return r(age) + "y" } function tidyURLs (s, short_urls) { return s.split("\n").map(function(line){ if (line.indexOf("<") !== -1) { return line } return line.replace(/https?:\/\/[^ ]+/g, function(url){ if (is_image(url)) { return '' } else if (short_urls) { return '[' + get_domain(url) + ']' } else { return '' + url + '' } }) }).join("
\n") } function getDomain(url){ return url.replace(/https?:\/\//,"").replace(/\/.*/,"").replace(/www\./, "") }