diff options
| author | adamhrv <adam@ahprojects.com> | 2018-12-16 19:38:54 +0100 |
|---|---|---|
| committer | adamhrv <adam@ahprojects.com> | 2018-12-16 19:38:54 +0100 |
| commit | 23e9fef5dce8b0b15dd94713816b9d7d45f12356 (patch) | |
| tree | 3ca9ffe3adce76318450991bfc613073470b604c /client/index.js | |
| parent | 759027d5fbfd6665082f72a3ceaeef68c2d2142e (diff) | |
| parent | 6431d06048791763f3644b3a0457cc9c4f1df6d3 (diff) | |
Merge branch 'master' of github.com:adamhrv/megapixels_dev
Diffstat (limited to 'client/index.js')
| -rw-r--r-- | client/index.js | 119 |
1 files changed, 108 insertions, 11 deletions
diff --git a/client/index.js b/client/index.js index eddc5fb2..86bc8979 100644 --- a/client/index.js +++ b/client/index.js @@ -3,17 +3,114 @@ import ReactDOM from 'react-dom' import { AppContainer } from 'react-hot-loader' import { Provider } from 'react-redux' -import App from './app' +import { toArray } from './util' +import Applet from './applet' +import { store } from './store' +import appendTable from './tables' +import appendMap from './map' -import { store, history } from './store' +function appendReactApplet(el, payload) { + ReactDOM.render( + <AppContainer> + <Provider store={store}> + <Applet command={payload} /> + </Provider> + </AppContainer>, el + ) +} -const container = document.createElement('div') -document.body.appendChild(container) -ReactDOM.render( - <AppContainer> - <Provider store={store}> - <App history={history} /> - </Provider> - </AppContainer>, container -) +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() |
