blob: 5e36d341c1ad8c92557ec83538f3e9992b33fe55 (
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
117
118
119
120
121
122
123
124
125
126
127
128
|
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 appendMap from './map'
function appendReactApplet(el, payload) {
ReactDOM.render(
<AppContainer>
<Provider store={store}>
<Applet payload={payload} />
</Provider>
</AppContainer>, el
)
}
function fetchDataset(payload) {
if (payload.command === 'face_analysis') return new Promise(resolve => resolve())
if (payload.dataset === 'info') return new Promise(resolve => resolve())
const url = "https://megapixels.nyc3.digitaloceanspaces.com/v1/citations/verified/" + payload.dataset + ".json"
return fetch(url, { mode: 'cors' }).then(r => r.json())
}
function appendApplets(applets) {
applets.forEach(([el, payload]) => {
el.parentNode.classList.add(payload.cmd)
switch (payload.cmd) {
case 'citations':
case 'load_file':
el.parentNode.classList.add('wide')
appendReactApplet(el, payload)
el.classList.add('loaded')
break
case 'map':
el.parentNode.classList.add('wide')
appendMap(el, payload)
el.classList.add('loaded')
break
default:
appendReactApplet(el, payload)
el.classList.add('loaded')
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 = payload.dataset || null
let url = null
let opt = null
payload.cmd = cmd
payload.partz = cmdPartz
if (payload.cmd === 'load_file') {
payload.url = 'https://nyc3.digitaloceanspaces.com/megapixels/v1' + cmdPartz.shift()
return [el, payload]
}
if (payload.partz.length) {
opt = payload.partz.shift().trim()
if (opt.indexOf('http') === 0) {
dataset = null
url = opt
} else if (opt.indexOf('assets') === 0) {
dataset = null
// console.log(url)
} else {
dataset = opt
url = null
}
}
if ((('datasets' in payload) && !dataset && !url) || window.location.pathname.match('datasets')) {
const path = window.location.pathname.split('/').filter(s => !!s)
if (path.length > 1) {
dataset = path.pop()
if (dataset === 'index.html') {
dataset = path.pop()
}
// console.log('dataset from path:', dataset)
} else {
// console.log('not on a dataset page')
return [el, payload]
}
}
payload.dataset = dataset
payload.url = url
console.log(payload)
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()
|