22 lines
1.3 KiB
JavaScript
22 lines
1.3 KiB
JavaScript
|
import {fmt, revive, persist, labelInput, labelSelect} from '/js/util.js';
|
||
|
export default {
|
||
|
id:'bandwidth', name:'Bandwidth / Bytes Converter', about:'Convert bits↔bytes and SI↔IEC units',
|
||
|
render(root){
|
||
|
const key='calc_bandwidth_v1';
|
||
|
const s = revive(key,{value:100, unit:'Mbps'});
|
||
|
const units = ['bps','Kbps','Mbps','Gbps','Tbps','B/s','KB/s','MB/s','GB/s','TB/s','KiB/s','MiB/s','GiB/s','TiB/s'];
|
||
|
const factors = {'bps':1,'Kbps':1e3,'Mbps':1e6,'Gbps':1e9,'Tbps':1e12,'B/s':8,'KB/s':8e3,'MB/s':8e6,'GB/s':8e9,'TB/s':8e12,'KiB/s':8*1024,'MiB/s':8*1024**2,'GiB/s':8*1024**3,'TiB/s':8*1024**4};
|
||
|
const ui = document.createElement('div');
|
||
|
ui.append(labelInput('Value','number','value', s.value,{step:'0.000001',min:'0'}), labelSelect('Unit','unit', s.unit, units.map(u=>[u,u])));
|
||
|
const out = document.createElement('div'); out.className='result'; ui.append(out);
|
||
|
function calc(){
|
||
|
const v = +ui.querySelector('[name=value]').value||0;
|
||
|
const unit = ui.querySelector('[name=unit]').value;
|
||
|
const bps = v * factors[unit];
|
||
|
out.innerHTML = units.map(u=>`<div><strong>${u}</strong>: ${fmt.format(bps / factors[u])}</div>`).join('');
|
||
|
persist(key,{value:v, unit});
|
||
|
}
|
||
|
ui.addEventListener('input', calc); calc(); root.append(ui);
|
||
|
}
|
||
|
}
|