const utils = { parseQuery: queryString => { if (queryString.indexOf("?") === -1) return {}; queryString = queryString.split("?")[1]; const query = {}; for (let part of queryString.split("&")) { const keyValue = part.split("="); query[keyValue[0]] = keyValue[1] ? keyValue[1] : null; } return query; }, percent: (count, total) => { const percent = Math.floor((count / total) * 10000) / 100; if (!percent) { return 0; } return percent; }, saveBlobAsFile: (blob, filename) => { const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.style.display = "none"; document.body.appendChild(a); a.href = url; a.download = filename; a.click(); document.body.removeChild(a); }, millisToTimeString(totalMilliseconds) { let milliseconds = (totalMilliseconds % 1000) + ""; milliseconds = milliseconds.padStart(3, "0"); let seconds = (Math.floor(totalMilliseconds / 1000) % 60) + ""; seconds = seconds.padStart(2, "0"); let minutes = (Math.floor(totalMilliseconds / 60000) % 60) + ""; minutes = minutes.padStart(2, "0"); let hours = Math.floor(totalMilliseconds / 3600000) + ""; hours = hours.padStart(2, "0"); return `${hours}:${minutes}:${seconds}`; }, getBrowserIcon(browser) { switch (browser.toLowerCase()) { case "firefox": return "fab fa-firefox"; case "edge": return "fab fa-edge"; case "chrome": case "chromium": return "fab fa-chrome"; case "safari": case "webkit": return "fab fa-safari"; } }, copyObject(object) { return JSON.parse(JSON.stringify(object)); } };