forked from Chaospott/site
		
	added heatmap
This commit is contained in:
		@@ -130,3 +130,8 @@ border-left-color: #111111;
 | 
				
			|||||||
    display: none;
 | 
					    display: none;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rect.bordered {
 | 
				
			||||||
 | 
					  stroke: #D2D4BC;
 | 
				
			||||||
 | 
					  stroke-width:1px;   
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								js/d3.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								js/d3.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										128
									
								
								status.html
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								status.html
									
									
									
									
									
								
							@@ -1,7 +1,8 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
layout: default
 | 
					layout: default
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					<script src="js/moment.js"></script>
 | 
				
			||||||
 | 
					<script src="js/d3.min.js"></script>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
    var timeFormat = '%Y-%m-%d %H:%M:%S';
 | 
					    var timeFormat = '%Y-%m-%d %H:%M:%S';
 | 
				
			||||||
    function toHHMMSS (sec_num) {
 | 
					    function toHHMMSS (sec_num) {
 | 
				
			||||||
@@ -45,6 +46,38 @@ layout: default
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
 | 
					      //DA FOO!!
 | 
				
			||||||
 | 
					      //needs to be refactored! soon!
 | 
				
			||||||
 | 
					      //smells like the shit this one guy took that forced british airways to fly back home.
 | 
				
			||||||
 | 
					      var hourStart = moment.unix(data[0].value.lastchange)
 | 
				
			||||||
 | 
					      var openTimeArrayIndex = 0;
 | 
				
			||||||
 | 
					      var hourArray = [];
 | 
				
			||||||
 | 
					      while(hourStart < moment()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(hourArray[hourStart.weekday()] === undefined)
 | 
				
			||||||
 | 
					            hourArray[hourStart.weekday()] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(hourArray[hourStart.weekday()][hourStart.hour()] === undefined)
 | 
				
			||||||
 | 
					          hourArray[hourStart.weekday()][hourStart.hour()] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(moment.unix(openTimeArray[openTimeArrayIndex][1]) < hourStart && moment.unix(openTimeArray[openTimeArrayIndex][2]) > hourStart) {    
 | 
				
			||||||
 | 
					          hourArray[hourStart.weekday()][hourStart.hour()]++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(moment.unix(openTimeArray[openTimeArrayIndex][2]) < hourStart && openTimeArray.length > openTimeArrayIndex + 1)
 | 
				
			||||||
 | 
					            openTimeArrayIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        hourStart.add(1, 'hour');
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      hourObjectArray = [];
 | 
				
			||||||
 | 
					      for(i=0;i<hourArray.length;i++) {
 | 
				
			||||||
 | 
					          for(j=0;j<hourArray[i].length;j++) {
 | 
				
			||||||
 | 
					            hourObjectArray[hourObjectArray.length] = {day:i,hour:j,value:hourArray[i][j]};
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      //end DA FOO!!
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
      var timeComplete = Math.floor(Date.now() / 1000) - data[0].value.lastchange;
 | 
					      var timeComplete = Math.floor(Date.now() / 1000) - data[0].value.lastchange;
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      percentOpen = Math.round((overallTrue * 100) / timeComplete);
 | 
					      percentOpen = Math.round((overallTrue * 100) / timeComplete);
 | 
				
			||||||
@@ -79,6 +112,87 @@ layout: default
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
          $( "#median_time_closed td:last" ).html(toHHMMSS((closedTimeArray[(closedTimeArray.length / 2) - 1][0] + closedTimeArray[(closedTimeArray.length / 2) + 1][0]) / 2) + "h");
 | 
					          $( "#median_time_closed td:last" ).html(toHHMMSS((closedTimeArray[(closedTimeArray.length / 2) - 1][0] + closedTimeArray[(closedTimeArray.length / 2) + 1][0]) / 2) + "h");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      //graph
 | 
				
			||||||
 | 
					      var margin = { top: 50, right: 0, bottom: 100, left: 30 },
 | 
				
			||||||
 | 
					      width = 960 - margin.left - margin.right,
 | 
				
			||||||
 | 
					      height = 430 - margin.top - margin.bottom,
 | 
				
			||||||
 | 
					      gridSize = Math.floor(width / 24),
 | 
				
			||||||
 | 
					      legendElementWidth = gridSize*2,
 | 
				
			||||||
 | 
					      buckets = 9,
 | 
				
			||||||
 | 
					      colors = ["#D9534E","#D47551","#D09453","#CCB054","#C6C856","#A8C458","#8CC059","#72BC5A","#5CB85C"],
 | 
				
			||||||
 | 
					      days = [ "Su","Mo", "Tu", "We", "Th", "Fr", "Sa"],
 | 
				
			||||||
 | 
					      times = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      function showGraph (data) {
 | 
				
			||||||
 | 
					            var colorScale = d3.scale.quantile()
 | 
				
			||||||
 | 
					                .domain([0, buckets - 1, d3.max(data, function (d) { return d.value; })])
 | 
				
			||||||
 | 
					                .range(colors);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var svg = d3.select("#chart").append("svg")
 | 
				
			||||||
 | 
					                .attr("width", width + margin.left + margin.right)
 | 
				
			||||||
 | 
					                .attr("height", height + margin.top + margin.bottom)
 | 
				
			||||||
 | 
					                .append("g")
 | 
				
			||||||
 | 
					                .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var dayLabels = svg.selectAll(".dayLabel")
 | 
				
			||||||
 | 
					                .data(days)
 | 
				
			||||||
 | 
					                .enter().append("text")
 | 
				
			||||||
 | 
					                  .text(function (d) { return d; })
 | 
				
			||||||
 | 
					                  .attr("x", 0)
 | 
				
			||||||
 | 
					                  .attr("y", function (d, i) { return i * gridSize; })
 | 
				
			||||||
 | 
					                  .style("text-anchor", "end")
 | 
				
			||||||
 | 
					                  .attr("transform", "translate(-6," + gridSize / 1.5 + ")")
 | 
				
			||||||
 | 
					                  .attr("class", function (d, i) { return ((i >= 0 && i <= 4) ? "dayLabel mono axis axis-workweek" : "dayLabel mono axis"); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var timeLabels = svg.selectAll(".timeLabel")
 | 
				
			||||||
 | 
					                .data(times)
 | 
				
			||||||
 | 
					                .enter().append("text")
 | 
				
			||||||
 | 
					                  .text(function(d) { return d; })
 | 
				
			||||||
 | 
					                  .attr("x", function(d, i) { return i * gridSize; })
 | 
				
			||||||
 | 
					                  .attr("y", 0)
 | 
				
			||||||
 | 
					                  .style("text-anchor", "middle")
 | 
				
			||||||
 | 
					                  .attr("transform", "translate(" + gridSize / 2 + ", -6)")
 | 
				
			||||||
 | 
					                  .attr("class", function(d, i) { return ((i >= 7 && i <= 16) ? "timeLabel mono axis axis-worktime" : "timeLabel mono axis"); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var heatMap = svg.selectAll(".hour")
 | 
				
			||||||
 | 
					                .data(data)
 | 
				
			||||||
 | 
					                .enter().append("rect")
 | 
				
			||||||
 | 
					                .attr("x", function(d) { return ((d.hour - 1) * gridSize) + 40; })
 | 
				
			||||||
 | 
					                .attr("y", function(d) { return ((d.day - 1) * gridSize) + 40; })
 | 
				
			||||||
 | 
					                .attr("rx", 4)
 | 
				
			||||||
 | 
					                .attr("ry", 4)
 | 
				
			||||||
 | 
					                .attr("class", "hour bordered")
 | 
				
			||||||
 | 
					                .attr("width", gridSize)
 | 
				
			||||||
 | 
					                .attr("height", gridSize)
 | 
				
			||||||
 | 
					                .style("fill", colors[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            heatMap.transition().duration(1000)
 | 
				
			||||||
 | 
					                .style("fill", function(d) { return colorScale(d.value); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            heatMap.append("title").text(function(d) { return d.value; });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var legend = svg.selectAll(".legend")
 | 
				
			||||||
 | 
					                .data([0].concat(colorScale.quantiles()), function(d) { return d; })
 | 
				
			||||||
 | 
					                .enter().append("g")
 | 
				
			||||||
 | 
					                .attr("class", "legend");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            legend.append("rect")
 | 
				
			||||||
 | 
					              .attr("x", function(d, i) { return legendElementWidth * i; })
 | 
				
			||||||
 | 
					              .attr("y", height)
 | 
				
			||||||
 | 
					              .attr("width", legendElementWidth)
 | 
				
			||||||
 | 
					              .attr("height", gridSize / 2)
 | 
				
			||||||
 | 
					              .style("fill", function(d, i) { return colors[i]; });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            legend.append("text")
 | 
				
			||||||
 | 
					              .attr("class", "mono")
 | 
				
			||||||
 | 
					              .text(function(d) { return "≥ " + Math.round(d); })
 | 
				
			||||||
 | 
					              .attr("x", function(d, i) { return legendElementWidth * i; })
 | 
				
			||||||
 | 
					              .attr("y", height + gridSize);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        showGraph(hourObjectArray);
 | 
				
			||||||
 | 
					        //end graph
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
@@ -224,4 +338,16 @@ layout: default
 | 
				
			|||||||
      </table>
 | 
					      </table>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 | 
					  <div class="row">
 | 
				
			||||||
 | 
					    <div class="alert alert-warning" role="alert">
 | 
				
			||||||
 | 
					      <b>
 | 
				
			||||||
 | 
					        Menschen treffen oder Kontakt vermeiden?
 | 
				
			||||||
 | 
					      </b>
 | 
				
			||||||
 | 
					      Hier Zeiten zu denen wahrscheinlich Menschen dasein werden...
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="col-md-10 col-md-offset-1">
 | 
				
			||||||
 | 
					      <div id="chart">
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user