summaryrefslogtreecommitdiff
path: root/client/index.js
blob: 86bc89795589a2af92cd010890b5cf75d9cc12f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import React from 'react'
import ReactDOM from 'react-dom'
import { AppContainer } from 'react-hot-loader'
import { Provider } from 'react-redux'

import { toArray } from './util'
import Applet from './applet'
import { store } from './store'
import appendTable from './tables'
import appendMap from './map'

function appendReactApplet(el, payload) {
  ReactDOM.render(
    <AppContainer>
      <Provider store={store}>
        <Applet command={payload} />
      </Provider>
    </AppContainer>, el
  )
}


function fetchDataset(payload) {
  const url = "https://megapixels.nyc3.digitaloceanspaces.com/v1/citations/" + payload.dataset + ".json"
  return fetch(url, { mode: 'cors' }).then(r => r.json())
}

function appendApplets(applets) {
  applets.forEach(([el, payload]) => {
    switch (payload.cmd) {
      case 'citations':
      case 'load_file':
        appendTable(el, payload)
        break
      case 'map':
        el.parentNode.classList.add('wide')
        el.classList.add(payload.cmd)
        appendMap(el, payload)
        break
      default:
        appendReactApplet(el, payload)
        break
    }
  })
}

function runApplets() {
  const applets = toArray(document.querySelectorAll('.applet')).map(el => {
    // console.log(el.dataset.payload)
    let payload
    try {
      payload = JSON.parse(el.dataset.payload)
      console.log(payload)
    } catch (e) {
      return null
    }
    let cmdPartz = payload.command.split(" ")
    let cmd = cmdPartz.shift()
    let dataset = null
    let url = null
    let opt = null
    payload.cmd = cmd
    payload.partz = cmdPartz
    if (payload.partz.length) {
      opt = payload.partz.shift().trim()
      if (opt.indexOf('http') === 0) {
        dataset = null
        url = opt
      } else if (opt.indexOf('assets') === 0) {
        url = 'https://nyc3.digitaloceanspaces.com/megapixels/v1' + window.location.pathname + opt
        dataset = null
        // console.log(url)
      } else {
        dataset = opt
        url = null
      }
    }
    if (!dataset && !url) {
      const path = window.location.pathname.split('/').filter(s => !!s)
      if (path.length) {
        dataset = path[path.length - 1]
        // console.log('dataset from path:', dataset)
      } else {
        console.log('couldnt determine citations dataset')
        return null
      }
    }
    payload.dataset = dataset
    payload.url = url
    return [el, payload]
  }).filter(a => !!a)
  const withDataset = applets.map(a => a[1].dataset ? a[1] : null).filter(a => !!a)
  if (withDataset.length) {
    fetchDataset(withDataset[0]).then(data => {
      withDataset.forEach(dataset => dataset.data = data)
      appendApplets(applets)
    })
  } else {
    appendApplets(applets)
  }
}

function main() {
  const paras = document.querySelectorAll('section p')
  if (paras.length) {
    paras[0].classList.add('first_paragraph')
  }
  toArray(document.querySelectorAll('header .links a')).forEach(tag => {
    if (window.location.href.match(tag.href)) {
      tag.classList.add('active')
    }
  })
  runApplets()
}

main()