$(document).ready(function () { let dataset = $('#dataset'); request('files').then(results => { dataset.empty(); for (const result of results) { dataset.append($("") .attr("value", result.uuid) .text(result.name + " (" + result.date.date.day + "." + result.date.date.month + " " + result.date.time.hour + ":" + result.date.time.minute + ")")); } dataset.formSelect(); }); updateCache(); }); /** * update all charts with correct values for dataset */ function updateCache() { let dataset = $('#dataset'); let selected = $('#dataset :selected'); if (typeof selected !== 'undefined' && selected.index() !== -1) { updateWeekOverviewChart(selected.val()); updateShoppingTimesChart(selected.val()); } else { //requesting files, getting values from html does not work... //if no selection is provided, select newest file request('files').then(results => { let uuid = results[results.length - 1].uuid; dataset.val(uuid); updateWeekOverviewChart(uuid); updateShoppingTimesChart(uuid); dataset.formSelect(); }); } } /** * request json data * @param url base url * @param id dataset id * @returns {Promise} */ function request(url, id) { return new Promise(((resolve) => { if (typeof id !== 'undefined') { requestInternal(url + '?id=' + id).then(function (data) { resolve(data); }); } else { requestInternal(url).then(function (data) { resolve(data); }); } })); } /** * only for use inside this file, javascript has no better way * @param url url * @returns {Promise} */ function requestInternal(url) { return new Promise(((resolve) => { $.ajax({ url: url, dataType: 'json' }).done(function (results) { resolve(results); }); })); }