import hosts from './hosts' import { backupDB } from './backupDB'; function fetchDB(cb) { let raw_db; fetch(hosts.db, { method: 'GET' }).then(res => { return res.json() }).then(json => { raw_db = parse(json) return fetch(hosts.comments, { method: 'GET', }) }).then(res => { return res.json() }).then(json => { raw_db.comments = json.reverse() cb(raw_db) }).catch((err) => { console.warn(err) }) } function backup() { return parse(backupDB) } function parse(db) { let { page, ...parsed } = db parsed.page = {} parsed.timeline = parsed.timeline .filter((el) => ! el.disabled) .sort((a,b) => a.__index { parsed.page[el.id] = el }) parseKeywords(parsed) parsed.comments = [] return parsed } function parseKeywords(db){ const counts = {} db.about = db.about[0] db.drone = db.drone[0] db.stream = db.stream[0] db.timeline.forEach((event) => { const dedupe = {} event.keywords = event.keywords.replace(/\n/, ' ').split('#') .map((t) => (t || '').trim().toLowerCase()) .filter((t) => !!t.length) .map((t) => { if (t in dedupe) return dedupe[t] = 1 const caps = capitalize(t) counts[caps] = counts[caps] || 0 counts[caps] += 1 return caps }) }) db.timeline.forEach((event) => { event.keywords = event.keywords.filter( (t) => counts[t] > 1 ) }) } const shortWords = makeLookup('of and to') const allcaps = makeLookup('usa us cia fbi nsa ii nasa uav cctv gchq') function makeLookup(s) { const lookup = {} s.split(' ').forEach( (t) => lookup[t] = true ) return lookup } function capitalize(s) { return s.replace(/-/,' ').split(' ').map(capitalizeWord).join(' ') } function capitalizeWord(s) { if (allcaps[s]) return s.toUpperCase() if (shortWords[s]) return s return s.charAt(0).toUpperCase() + s.slice(1) } export default { fetch: fetchDB, backup, hosts }