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=>`
${u}: ${fmt.format(bps / factors[u])}
`).join(''); persist(key,{value:v, unit}); } ui.addEventListener('input', calc); calc(); root.append(ui); } }