This commit is contained in:
whilb 2025-08-16 17:54:12 -07:00
commit 97f9a95415
21 changed files with 2963 additions and 0 deletions

View file

@ -0,0 +1,21 @@
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);
}
}