const MamiPingIndicator = function(initialStrength) {
const bars = [];
const html =
;
for(let i = 1; i <= 3; ++i)
bars.push(html.appendChild());
let interval;
const setStrength = strength => {
if(typeof strength !== 'number')
throw 'strength must be a number';
if(strength < 0) {
if(interval === undefined) {
const cyclesMax = bars.length * 2;
let cycles = -1;
const updateCycle = () => {
let curCycle = ++cycles % cyclesMax;
if(curCycle > bars.length)
curCycle = cyclesMax - curCycle;
for(const i in bars)
bars[i].classList.toggle('ping-bar-on', curCycle === (parseInt(i) + 1));
};
interval = setInterval(updateCycle, 200);
updateCycle();
}
} else {
if(interval !== undefined) {
clearInterval(interval);
interval = undefined;
}
for(const i in bars)
bars[i].classList.toggle('ping-bar-on', i < strength);
}
html.classList.toggle('ping-state-good', strength > 1);
html.classList.toggle('ping-state-warn', strength == 1);
html.classList.toggle('ping-state-poor', strength < 1);
};
if(typeof initialStrength !== 'number')
initialStrength = bars.length;
setStrength(initialStrength);
return {
getElement: () => html,
setStrength: setStrength,
};
};