var graphinator; (function (graphinator) { graphinator.initilize = function () { if ($ == null) { var msg = 'JQuery is not defined. Please reference JQuery for graphinator to function properly'; alert(msg); throw msg; } }; graphinator.buildDummyTable = function (rows, elementId) { var fakeDataArray = []; for (var i = 0; i <= rows; i++) { var fakeData = { String: Guid.newGuid(), Number: i, RandomNumber: Math.floor((Math.random() * 1000) + 1) }; fakeDataArray.push(fakeData); } return new HtmlTable(elementId, fakeDataArray).toHtmlString(); }; graphinator.graphinate = function (tableId, imgSrc) { var colCount = $('table#' + tableId + ' tr:first').children().length; for (var i = 0; i < colCount; i++) { var max = 0; var min = 0; $('#' + tableId + ' tr').each(function (index, row) { var val = $(row).children()[i].innerHTML; var cleanVal = cleanValue(val); if (isNumber(cleanVal) === true) { var valNum = parseInt(cleanVal); if (isNaN(valNum) === false) { if (valNum > max) max = valNum; if (valNum < min) min = valNum; } } }); $('#' + tableId + ' tr').each(function (index, row) { var val = $(row).children()[i].innerHTML; var cleanVal = cleanValue(val); if (isNumber(cleanVal) === true) { var valNum = parseInt(cleanVal); if (isNaN(valNum) === false) { var spread = max - min; var relative = valNum - min; if (spread !== 0) { var working = (relative / spread) * 100; var hundredBasedValue = parseInt(working.toFixed(2)); $(row).children()[i].innerHTML = val + builBarElement(hundredBasedValue, imgSrc); } } } }); } var g = $('.graphinator'); g.css('width', '0%'); var width = 0; var intervalFunc = function () { g.css('width', (width + '%')); width++; if (width === 100) { window.clearInterval(intr); } }; var intr = setInterval(intervalFunc, 5); }; var isNumber = function (o) { return !isNaN(o - 0) && o !== null && o.replace(/^\s\s*/, '') !== "" && o !== false; }; var cleanValue = function (input) { var result = input.replace('%', '').replace('$', '').replace(',', ''); return result; }; var builBarElement = function (percent, imgSrc) { var result = '<br/><div class="graphinator" style="width:0%">'; result += '<img src="' + imgSrc + '" style="width:' + percent + '%;height:10px;" ></div>'; result += '</div>'; return result; }; })(graphinator || (graphinator = {})); var HtmlTable = (function () { function HtmlTable(id, rows) { this.id = ''; this.rows = []; this.id = id; this.rows = rows; } HtmlTable.prototype.toHtmlString = function () { var result = ''; result += '<table id=' + this.id + ' border="1">'; var isHeaderRow = true; $.each(this.rows, function (index, item) { result += '<tr>'; if (isHeaderRow) { $.each(item, function (indx, itm) { result += '<th>'; result += indx; result += '</th>'; }); isHeaderRow = false; } else { $.each(item, function (indx, itm) { result += '<td>'; result += itm; result += '</td>'; }); } result += '</tr>'; }); result += '</table>'; return result; }; return HtmlTable; })(); var Guid; (function (Guid) { var s4 = function () { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); }; var guid = function () { return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); }; Guid.newGuid = function () { return guid(); }; })(Guid || (Guid = {}));
<h1>Graphinator Proof of Concept</h1> <button id="btnBuildTestTable">Build Test Table</button> <button id="btnGraphinate">Graphinate This Table</button> <div id="content"> </div> <script> $(function () { graphinator.initilize(); $('#btnBuildTestTable').click(function () { $('#content').html(graphinator.buildDummyTable(10, 'myTestTable')); }); $('#btnGraphinate').click(function () { graphinator.graphinate('myTestTable',"http://dev6.blob.core.windows.net/dev6pub/conditionalBack.jpg"); }); }); </script>