var pollChart = (function () { var _canvas; var _dataitems = []; var _itemTemplate = '
{0}
'; function incrementData(key) { if (isNaN(parseInt(key, 10))) { for (var i = 0; i < _dataitems.length; i++) { if (_dataitems[i].key === key) { _dataitems[i].value = _dataitems[i].value + 1; break; } } } else { _dataitems[key].value = _dataitems[key].value + 1; } } function updateData(key, value) { if (isNaN(parseInt(key, 10))) { for (var i = 0; i < _dataitems.length; i++) { if (_dataitems[i].key === key) { _dataitems[i].value = value; break; } } } else { _dataitems[key].value = value; } } function animate() { var maxVal = 0; for (var i = 0; i < _dataitems.length; i++) { if (_dataitems[i].value > maxVal) { maxVal = _dataitems[i].value; } } var range = Math.floor(maxVal / 0.9); for (var i = 0; i < _dataitems.length; i++) { var barFill = _dataitems[i].chartItm.querySelector('.bar-fill'); barFill.style.width = Math.floor(_dataitems[i].value / range * 100) + '%'; barFill.title = _dataitems[i].value + ' vote' + (_dataitems[i].value === 1 ? '' : 's') + ' for ' + _dataitems[i].description; barFill.innerHTML = _dataitems[i].value + ' vote' + (_dataitems[i].value === 1 ? '' : 's'); } } function init(canvas, data) { _canvas = canvas; for (var i = 0; i < data.length; i++) { var itm = document.createElement('div'); itm.innerHTML = _itemTemplate.replace('{0}', data[i].description); itm.classList.add('item-wrap'); itm.classList.add(data[i].key); canvas.appendChild(itm); _dataitems.push({ key: data[i].key, description: data[i].description, value: data[i].value, chartItm: itm }); } } function destroy() { while (_canvas.firstChild) { _canvas.removeChild(_canvas.firstChild); } _canvas = null; _dataitems = []; } return { dataitems: _dataitems, init: init, destroy: destroy, updateData: updateData, incrementData: incrementData, animate: animate }; }).call(); var chartData = [ { key: 'harrypotter', description: 'Harry Potter', value: 4 }, { key: 'hobbit', description: 'The Hobbit', value: 3 }, { key: 'neverendingstory', description: 'The Neverending Story', value: 6 }, { key: 'avatar', description: 'Avatar', value: 1 }, { key: 'narnia', description: 'Chronicles of Narnia', value: 2 }, { key: 'labyrinth', description: 'Labyrinth', value: 5 } ]; pollChart.init(document.getElementById('chart'), chartData); setTimeout(function() { pollChart.animate(); }, 300); setInterval(function() { pollChart.incrementData(Math.floor(Math.random() * 6)); pollChart.animate(); }, 2000);