"use strict" class Utils { static convert_any(from, to, val){ let val_in_b = 0; switch(from){ case "kbps": val_in_b = val * 1000; break; case "mbps": val_in_b = val * 1000 * 1000; break; case "bps": default: val_in_b=val; } switch(to){ case "kbps": return val_in_b / 1000; case "mbps": return val_in_b / 1000 / 1000; case "bps": default: return val_in_b } } static set_cookie(name, value, days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } document.cookie = `${name}=${value}${expires}; path=/; secure; samesite=strict`; } static get_cookie(name) { name = name + "="; var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var c = cookies[i]; while (c.charAt(0) == ' '){c = c.substring(1, c.length);} if (c.indexOf(name) == 0){return c.substring(name.length, c.length);} } return null; } static get_query_param(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); } static roundNumber(num) { let decimalPlace = 10 let roundedNum = Math.round(num * decimalPlace) / decimalPlace return roundedNum.toFixed(1) } static getPerformanceStats(history, key) { let result = {} let half = 2 let histList = history.map((test)=>{return Number(test[key])}) histList.sort((a,b)=>(a-b)) result[key+"Max"] = Math.max(...histList) result[key+"Min"] = Math.min(...histList) result[key+"Median"] = histList[Math.floor(history.length / half)] if (history.length % half === 0) { let secondNum = histList[Math.floor(history.length / half) - 1] result[key+"Median"] = (result[key+"Median"] + secondNum) / half } return result } static loadScript(path, callback) { const script = document.createElement("script") script.src = path script.async = true script.onload = () => { console.log("loaded " + path) callback() } document.body.appendChild(script) } static writeLocalStorage(valueName,addObject) { localStorage.setItem(valueName, JSON.stringify(addObject)); } static readLocalStorage(valueName) { let retrievedObject = localStorage.getItem(valueName); return JSON.parse(retrievedObject) } static removeLocalStorage(valueName) { localStorage.removeItem(valueName) return true } static appendLocalStorage(objectName,newObject,maxRecords) { let value = this.readLocalStorage(objectName) || [] if (maxRecords && value.length >= maxRecords) {value.shift()} value.push(newObject) this.writeLocalStorage(objectName, value) } } Utils.version = '0.0.1' Utils.convert = { bps_to_mbps: (v)=>{return Utils.convert_any("bps", "mbps", v)}, kbps_to_bps: (v)=>{return Utils.convert_any("kbps", "bps", v)}, kbps_to_mbps: (v)=>{return Utils.convert_any("kbps", "mbps", v)}, bps_to_kbps: (v)=>{return Utils.convert_any("bps", "kbps", v)}, mbps_to_kbps: (v)=>{return Utils.convert_any("mbps", "kbps", v)}, mbps_to_bps: (v)=>{return Utils.convert_any("mbps", "bps", v)}, }