summaryrefslogtreecommitdiff
path: root/client/src/lib/db/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/lib/db/index.js')
-rw-r--r--client/src/lib/db/index.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/client/src/lib/db/index.js b/client/src/lib/db/index.js
new file mode 100644
index 0000000..3fc6397
--- /dev/null
+++ b/client/src/lib/db/index.js
@@ -0,0 +1,85 @@
+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<b.__index?-1:a.__index===b.__index?0:1)
+ Object.values(page).forEach((el) => {
+ 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 }