window.dateFormats = { data : 'YYYY-MM-DD', html : 'LL' } window.query = s => document.querySelector(s) window.queryP = (e, s) => e.querySelector(s) let currencies = null const abacusDebugEl = query('#abacus-debug') const abacusDebugConsoleEl = queryP(abacusDebugEl, '#abacus-debug_console') function appendText (e, t) { console.info(e, t) const textNode = document.createTextNode(t) e.appendChild(textNode) const brNodes = [0,0].map(() => document.createElement('br')) brNodes.forEach(brNode => e.appendChild(brNode)) } const keys = o => Object.keys(o) window.log = function log (...messages) { abacusDebugConsoleEl.style.visibility = 'visible' console.info(messages) return messages.forEach(m => appendText(abacusDebugConsoleEl, m)) } const mapCurrenciesCache = { } function mapCurrencies ({ date, rates }) { if (mapCurrenciesCache[date]) return mapCurrenciesCache[date] const results = keys(rates).map(countryCode => { const meta = currencies[countryCode] if (!meta) return return { countryCode, value : rates[countryCode], date, entity : meta.ENTITY, currency : meta.Currency, numericCode : meta['Numeric Code'], minorUnit : meta['Minor unit'] } }) return (mapCurrenciesCache[date] = results) } function fetchMoneyJSON (date) { const formattedDate = moment(date).format(window.dateFormats.data) console.info(formattedDate) return d3.csv('currency.csv', function (rr) { currencies = rr.reduce((o, r) => { const code = r['Alphabetic Code'] code !== '' && (o[code] = r) return o }, { }) // http://fixer.io/ fetch(`https://api.fixer.io/${formattedDate}`) .then(r => r.json()) .then(j => log(JSON.stringify(mapCurrencies(j), null, ' '))) .catch(r => log(r)) }) }