JSFiddle - React, Tailwind, and code Playground

by damiantt

HTML

<script type="text/javascript" src="//www.google.com/jsapi"></script>
<script type="text/javascript" src="https://gabelerner.github.io/canvg/rgbcolor.js"></script>
<script type="text/javascript" src="https://gabelerner.github.io/canvg/canvg.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="https://raw.githubusercontent.com/flaviusmatis/simplePagination.js/master/jquery.simplePagination.js"></script>

<input id="generuj" type="button" value="Generuj" onclick="initialDraw();" />
<div id="light-pagination" class="pagination"></div>
<p id="chartNote"></p>
<div id="chart_div_container" style="overflow-x: auto;min-height:0%;">
  <div id="chart_div" style="overflow: visible;min-height:0%;"></div>
</div>
<div id="png">
  <input id="chartToPng" type="button" value="" style="display: none;" />
</div>
<div id="focusedChart"></div>
<div id="table_div"></div>
<div id="tooltipDivHard" class="google-visualization-tooltip" style="left: 20px; top: 20px; display:table;pointer-events: none; border:solid 5px black;background-color:black;opacity:0.8;color:white;visibility: hidden;"></div>

CSS

/**
* CSS themes for simplePagination.js
* Author: Flavius Matis - http://flaviusmatis.github.com/
* URL: https://github.com/flaviusmatis/simplePagination.js
*/

ul.simple-pagination {
  list-style: none;
}

.simple-pagination {
  display: block;
  overflow: hidden;
  padding: 0 5px 5px 0;
  margin: 0;
}

.simple-pagination ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.simple-pagination li {
  list-style: none;
  padding: 0;
  margin: 0;
  float: left;
}

span.ellipse.clickable {
  cursor: pointer;
}

.ellipse input {
  width: 3em;
}


/*------------------------------------*\
	Light Theme Styles
\*------------------------------------*/

.light-theme a,
.light-theme span {
  float: left;
  color: #666;
  font-size: 14px;
  line-height: 24px;
  font-weight: normal;
  text-align: center;
  border: 1px solid #BBB;
  min-width: 14px;
  padding: 0 7px;
  margin: 0 5px 0 0;
  border-radius: 3px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
  background: #efefef;
  /* Old browsers */
  background: -moz-linear-gradient(top, #ffffff 0%, #efefef 100%);
  /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #efefef));
  /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #ffffff 0%, #efefef 100%);
  /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #ffffff 0%, #efefef 100%);
  /* Opera11.10+ */
  background: -ms-linear-gradient(top, #ffffff 0%, #efefef 100%);
  /* IE10+ */
  background: linear-gradient(top, #ffffff 0%, #efefef 100%);
  /* W3C */
}

.light-theme a:hover {
  text-decoration: none;
  background: #FCFCFC;
}

.light-theme .current {
  background: #666;
  color: #FFF;
  border-color: #444;
  box-shadow: 0 1px 0 rgba(255, 255, 255, 1), 0 0 2px rgba(0, 0, 0, 0.3) inset;
  cursor: default;
}

.light-theme .ellipse {
  background: none;
  border: none;
  border-radius: 0;
  box-shadow: none;
  font-weight: bold;
  cursor: default;
}

JavaScript

google.charts.load('current', {
  'packages': ['timeline', 'table']
});

var machinesPerPage = 2;
var machines = [];
var initWidth = $('#chart_div').innerWidth();
var eventsGroups = []; //[startFromRowOfDataAll][rowCounter]
var dataAll;
var colorMap;
var beginDate, endDate;

function toImg() {
  var chartArea = $('#chart_div svg').parent();
  var svg = new XMLSerializer().serializeToString($('#chart_div svg').get(0));
  var doc = document.getElementById('chart_div').ownerDocument;
  var canvas = doc.createElement('canvas');
  canvas.setAttribute('width', chartArea.offsetWidth);
  canvas.setAttribute('height', chartArea.offsetHeight);

  canvas.setAttribute(
    'style',
    'position: absolute; ' +
    'top: ' + (-chartArea.offsetHeight * 2) + 'px;' +
    'left: ' + (-chartArea.offsetWidth * 2) + 'px;');
  doc.body.appendChild(canvas);
  canvg(canvas, svg);
  var imgData = canvas.toDataURL("image/png");
  canvas.parentNode.removeChild(canvas);

  function isIE() {
    var myNav = navigator.userAgent.toLowerCase();
    return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
  }
  var ua = window.navigator.userAgent;
  //Internet Explorer | if | 9-11

  if (isIE() == 9 || isIE() == 8) {
    $('#table_div').empty().append($('<img/>', {
      src: imgData
    }));
  } else if (isIE() == 10 || ua.indexOf("Trident/7.0") > 0) {
    //alert("Shut down this junk! | IE 10");
    var blob = canvas.msToBlob();
    window.navigator.msSaveBlob(blob, 'wykres.png');
  } else {
    //alert("Thank god it's not IE!");
    var download = document.createElement('a');
    download.href = imgData;
    download.download = 'wykres.png';

    function fireEvent(obj, evt) {
      var fireOnThis = obj;
      if (document.createEvent) {
        var evObj = document.createEvent('MouseEvents');
        evObj.initEvent(evt, true, false);
        fireOnThis.dispatchEvent(evObj);
      } else if (document.createEventObject) {
        var evObj =...