import hosts from './hosts' import { backupDB } from './backupDB'; function fetchDB(cb) { let raw_db; fetch('/db.json', { method: 'GET' }).then(res => { if (res.status !== 200) { return null } return res.json() }).then(json => { if (json) { raw_db = parse(json) } cb(raw_db) // return fetch(hosts.comments, { // method: 'GET', // }) // }).then(res => { // if (res.status !== 200) { // return null // } // return res.json() // }).then(json => { // if (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 { const el = page[key] parsed.page[el.id] = el }) parseKeywords(parsed) parsed.comments = 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 }