function Datasource(element) { this.url = element.dataset.url; this.slots = JSON.parse(element.dataset.slots) || {}; function buildUrl(url, slots) { var parsedUrl = url; Object.keys(slots).forEach(function(slot) { var reg = new RegExp(`\\{\\{${slot}\\}\\}`, "gi"); parsedUrl = parsedUrl.replace(reg, slots[slot]); }); return parsedUrl; } function dataSourceFetch(url) { return fetch(url).then(function(data) { return data.json(); }) .catch(error => console.log(error)) } function run() { var url = buildUrl(this.url, this.slots); dataSourceFetch(url).then(function(data) { emitEvent(element, 'data', [data]); }) } function set(name, value) { this.slots[name] = value; element.dataset.slots = JSON.stringify(this.slots); } this.run = run.bind(this); this.set = set.bind(this); } function parseJSON_SQL(data) { var headers = data.meta.map(function(head) { return head.column; }); var newData = data.data.slice(0); newData.unshift(headers); return newData; } function pivotTable(data) { data.shift(); var header = ['year']; var dataIterator = data.entries(); var prevYear; var result = []; var res; while (!(iteratee = dataIterator.next()).done) { var item = iteratee.value[1]; var year = item[0]; var desc = item[1]; var value = item[2]; var index = header.indexOf(desc); index = index < 0 ? header.push(desc) - 1 : index; if (year != prevYear) { res = [year]; result.push(res); prevYear = year; } res[index] = value; } result.unshift(header); return result; }