diff modules/roundup_cc/graph.html @ 11:7a573ec679a6

added more files, can now display charts a bit
author sean
date Tue, 04 Aug 2015 14:23:53 +0200
parents
children 50f4c64834cb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/roundup_cc/graph.html	Tue Aug 04 14:23:53 2015 +0200
@@ -0,0 +1,408 @@
+<style type = text/css>
+
+	* {
+		font-family: "Sans-serif";
+		font-size: 14px;
+	}
+
+	.svg div{
+			font: 10px;
+			text-align: right;
+			float: left;
+			display: block;
+			padding: 10px;
+			margin: 10px;
+			color: white;
+	}
+
+	.axis path,
+
+	.axis line {
+			fill: none;
+			stroke: lightgrey;
+			/*opacity: 0.7;*/
+			stroke-width: 1px;
+	}
+
+	.y.axis path {
+	  display: none;
+	}
+
+	.line {
+			fill: none;
+			stroke-width: 3px;
+			opacity: 1;
+	}
+
+	.line.critical {
+			stroke: red;
+	}
+
+	.line.critical.legend {
+			fill: red;
+	}
+
+	.line.urgent {
+			stroke: orange;
+	}
+
+	.line.urgent.legend {
+			fill: orange;
+	}
+
+	.line.bug {
+			stroke: violet;
+	}
+
+	.line.bug.legend {
+			fill: violet;
+	}
+
+	.line.feature {
+			stroke: chartreuse;
+			style: stroke-dasharray;
+	}
+
+	.line.feature.legend {
+			fill: chartreuse;
+	}
+
+	.line.wish {
+			stroke: blue;
+	}
+
+	.line.wish.legend {
+			fill: blue;
+	}
+
+	.grid .tick {
+			stroke: lightgrey;
+			/*opacity: 0.7;*/
+	}
+
+	.grid path {
+			stroke-width: 0;
+	}
+
+</style>
+
+<!-- <div id="content" style="display: inline-block"></div> -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js" charset="utf-8"></script>
+<script type="text/javascript">
+
+	// window.onresize = function(){
+	// 	document.getElementsByClassName("chart")[0].innerHTML = "";
+	// 	makeChart();
+	// };
+
+	var critical=[];
+	
+
+	// var critical=[
+	// 		{points: 4},
+	// 		{points: 12},
+	// 		{points: 8},
+	// 		{points: 2}
+	// 	]
+	//
+	// var urgent=[
+	// 		{points: 3},
+	// 		{points: 24},
+	// 		{points: 17},
+	// 		{points: 19}
+	// 	]
+	//
+	// var bug=[
+	// 		{points: 10},
+	// 		{points: 2},
+	// 		{points: 2},
+	// 		{points: 12}
+	// 	]
+	//
+	// var feature=[
+	// 		{points: 4},
+	// 		{points: 21},
+	// 		{points: 12},
+	// 		{points: 4}
+	// 	]
+	//
+	// var wish=[
+	// 		{points: 22},
+	// 		{points: 18},
+	// 		{points: 32},
+	// 		{points: 10}
+	// 	]
+	//
+	//
+	// var timestamp=[
+	// 		{date : new Date('2015-06-30T12:36:47')},
+	// 		{date : new Date('2015-07-01T12:37:26')},
+	// 		{date : new Date('2015-07-02T12:38:26')},
+	// 		{date : new Date('2015-07-03T12:39:26')}
+	// 	]
+
+
+
+	document.addEventListener("DOMContentLoaded", function(event) {
+		makeChart();
+	});
+
+	function assignIssueToDate(issueArray, dateArray){
+		a = [];
+		for (var i = 0; i < issueArray.length; i++) {
+			a.push({points: issueArray[i].points, date : dateArray[i].date});
+		}
+
+		return a;
+	}
+
+	function limitDatesOnXAxis(limit){
+		if (timestamp.length < limit){
+			return timestamp.length;
+		} else {
+			return limit;
+		}
+	}
+
+	function maxInObject( array ){
+		var maxVal = 0;
+		for (var i = 0; i < array.length; i++) {
+			if (maxVal < array[i].points){
+				maxVal = array[i].points;
+			}
+		}
+		return maxVal;
+	}
+
+
+	function getMaxIssues(){
+		maxIssuesOfAllArrays = [];
+		maxIssuesOfAllArrays.push(maxInObject(critical));
+		maxIssuesOfAllArrays.push(maxInObject(urgent));
+		maxIssuesOfAllArrays.push(maxInObject(bug));
+		maxIssuesOfAllArrays.push(maxInObject(feature));
+		maxIssuesOfAllArrays.push(maxInObject(wish));
+
+		return Math.max.apply(Math, maxIssuesOfAllArrays)+1;
+	}
+
+
+	function dayDifference(first, second) {
+		"use strict";
+		var difference = (second - first) / (1000 * 60 * 60 * 24);
+
+		// just to avoid the get thousands of lines... would look ugly.
+		if (difference > 60){
+			difference = 60;
+		}
+
+		return difference;
+	}
+
+
+	// function for the grid lines
+	function makeGrid(direction, orientation, ticknumber) {
+		return d3.svg.axis()
+			.scale(direction)
+			.orient(orientation)
+			.ticks( ticknumber );
+	}
+
+
+	//append a svg_path. pretty generic
+	function draw_line(svg, data_array, css_class, line_object, lineShape){
+		svg.append("path")
+			.datum(assignIssueToDate(data_array, timestamp))
+			.attr("class", css_class)
+			.style("stroke-dasharray", (lineShape))
+			.attr("d", line_object);
+	}
+
+
+	function makeLegend(svg, width){
+
+		var legend_distance = width+40;
+		var top_distance = 20;
+		var distance_steps = 50;
+
+
+		function set_propper_distance(steps){
+			top_distance += steps;
+			return top_distance;
+		}
+
+		function draw_legend_line(svg, width, Ypos, text, issues){
+			svg.append("svg:text")
+				.attr("class", "legend")
+				.attr("x", width-30	)
+				.attr("y", Ypos)
+				.text(text + ":");
+
+			svg.append("svg:text")
+				.attr("class", "legend")
+				.attr("x", width+35	)
+				.attr("y", Ypos)
+				.text(issues);
+
+			svg.append("rect")
+				.attr("class", "line " + text.toLowerCase() + " legend")
+				.attr("x", width-30)
+				.attr("y", Ypos-20)
+				.attr("width", 100)
+				.attr("height", 2);
+		}
+
+		draw_legend_line(svg, legend_distance, set_propper_distance(distance_steps), "Critical", critical[critical.length-1].points);
+		draw_legend_line(svg, legend_distance, set_propper_distance(distance_steps), "Urgent", urgent[urgent.length-1].points);
+		draw_legend_line(svg, legend_distance, set_propper_distance(distance_steps), "Bug", bug[bug.length-1].points);
+		draw_legend_line(svg, legend_distance, set_propper_distance(distance_steps), "Feature", feature[feature.length-1].points);
+		draw_legend_line(svg, legend_distance, set_propper_distance(distance_steps), "Wish", wish[wish.length-1].points);
+	}
+
+
+
+	//draw the chart
+	function makeChart(){
+
+		//declaration
+		var sizeOfSystemBorders = 20;
+		// var margin = {top: 20, right: 100, bottom: 90, left: 60};
+		// var margin = {top: 0, right: 0, bottom: 0, left: 0}
+
+		var width = document.getElementsByClassName("chart")[0].clientWidth;
+		var height = document.getElementsByClassName("chart")[0].clientHeight;
+		// var	width = (document.documentElement.clientWidth-sizeOfSystemBorders) - margin.left - margin.right;
+		// var	height = (document.documentElement.clientHeight-sizeOfSystemBorders) - margin.top - margin.bottom;
+
+		var x = d3.time.scale()
+			.range([0, width]);
+
+		var y = d3.scale.linear()
+			.range([height, 0]);
+
+		var base_line = d3.svg.line()
+			.x(function(d) { return x(d.date); })
+			.y(function(d) { return y(d.points); });
+
+		//lines
+		var criticalLine = base_line;
+		var urgentLine = base_line;
+		var bugLine = base_line;
+		var featureLine = base_line;
+		var wishLine = base_line;
+		var timestampLine = base_line;
+
+
+		//set domain of y axis
+		var yDomain = [	];
+		yDomain[0] = 0;
+		yDomain[1] = getMaxIssues();
+		y.domain(d3.extent(yDomain, function(d){return d; }));
+
+		//set domain of y axis
+		x.domain(d3.extent(timestamp, function(d){return d.date; }));
+
+
+		var xAxis = d3.svg.axis()
+			.scale(x)
+			.orient("bottom")
+			.ticks(limitDatesOnXAxis(10))
+			.tickFormat(d3.time.format("%d.%m"));
+			// .tickFormat(d3.time.format("%d.%m:%H:%M"));
+			// .tickFormat(d3.time.format("%X"));
+			// .tickFormat(d3.time.format.iso);
+
+
+		var yAxis = d3.svg.axis()
+			.scale(y)
+			.orient("left");
+
+
+		var svg = d3.select(".chart")
+			.append("svg")
+			.attr("class", "svg")
+			// .attr("width", width)
+			// .attr("height", height)
+			.attr("width", width-20)
+			.attr("height", height-10)
+			.append("g")
+			// .attr("transform", "translate( +50,+0,+0,+0)");
+			.attr("transform", "translate(40 , 0)");
+
+
+		// creation
+
+
+		// Draw the x Grid lines
+		// svg.append("g")
+		// 	.attr("class", "grid")
+		// 	.attr("transform", "translate(0," + height + ")")
+		// 	.call(makeGrid(x, "bottom", timestamp.length)
+		// 		.tickSize(-height, 0, 0)
+		// 		.tickFormat("")
+		// 	);
+
+
+		// Draw the y Grid lines
+		svg.append("g")
+			.attr("class", "grid")
+			.call(makeGrid(y, "left", function(){return Math.min(getMaxIssues(), 10);}())
+				.tickSize(-width, 0, 0)
+				.tickFormat("")
+			);
+
+
+		// Draw the x-axis
+		svg.append("g")
+			.attr("class", "x axis")
+			// .attr("transform", "translate(0, " + 20-height + ")")
+			.call(xAxis)
+			.selectAll("text")
+			.style("text-anchor", "end")
+			// .attr("dx", "-.5em")
+			// .attr("dy", ".1em")
+			// .attr("transform", function() {
+			// 	return "rotate(-30)";
+			// });
+
+
+		// Draw the y-axis
+		svg.append("g")
+			.attr("class", "y axis")
+			.call(yAxis)
+			.append("text")
+			.attr("transform", "rotate(-90)")
+			.attr("y", 6)
+			.attr("dy", ".71em")
+			.style("text-anchor", "end");
+
+
+		// Text for y-axis
+		// svg.append("text")
+		// 	.attr("transform", "rotate(-90)")
+		// 	.attr("y", 10 - margin.left)
+		// 	.attr("x", 0 - (height / 2))
+		// 	.attr("dy", "1em")
+		// 	.style("text-anchor", "middle")
+		// 	.text("Issues");
+
+
+		//Titel und Legende
+		// svg.append("svg:text")
+		// 	.attr("class", "text")
+		// 	.attr("x", 10)
+		// 	.attr("y", -5)
+		// 	.text("Issues Nach Zeit");
+
+		draw_line(svg, wish, "line wish", wishLine, "0, 0");
+		draw_line(svg, feature, "line feature", featureLine, "3, 3");
+		draw_line(svg, bug, "line bug", bugLine, "7, 7");
+		draw_line(svg, urgent, "line urgent", urgentLine, "13, 13");
+		draw_line(svg, critical, "line critical", criticalLine, "17, 17");
+
+
+		// makeLegend(svg, width);
+	}
+
+
+</script>
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)