| <?xml version="1.0"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <xsl:stylesheet |
| version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns:xlink="http://www.w3.org/1999/xlink"> |
| <xsl:variable name="graph_width">500</xsl:variable> |
| <xsl:variable name="graph_height">150</xsl:variable> |
| <xsl:variable name="graph_margin">50</xsl:variable> |
| <xsl:variable name="num_points" select="count(/graph/data/datum)"/> |
| <xsl:variable name="x_scale" select="$graph_width div ($num_points - 1)"/> |
| <xsl:variable name="y_scale" select="$graph_height div 100"/> |
| <xsl:template match="graph"> |
| <svg |
| width="{$graph_margin + $graph_width + $graph_margin}" |
| height="{$graph_margin + $graph_height + $graph_margin}"> |
| <title>Forrest GUMP Graphing</title> |
| <style type="text/css"> |
| text { |
| font-family: 'Verdana'; |
| font-size: 10px; |
| stroke: none; |
| fill: #000088; } |
| .tick { |
| fill:none; |
| stroke: #000088; |
| stroke-width: 1px; } |
| #border { |
| fill: rgb(0,192,0); |
| stroke: #000088; |
| stroke-width: 1px; } |
| #graph-dependancy { |
| fill: rgb(255,255,90); |
| stroke: #000088; |
| stroke-width: 1px; } |
| #graph-failed { |
| fill: rgb(255,0,0); |
| stroke: #000088; |
| stroke-width: 1px; } |
| #horizontalRuler { |
| fill: #000088; } |
| </style> |
| <defs> |
| <line id="week" class="tick" x1="0" y1="0" x2="0" y2="3"/> |
| <line id="month" class="tick" x1="0" y1="0" x2="0" y2="5"/> |
| </defs> |
| <xsl:apply-templates select="data"/> |
| </svg> |
| </xsl:template> |
| <xsl:template match="data"> |
| <g transform="translate({$graph_margin} {$graph_margin})"> |
| <rect id="border" x="0" y="0" width="{$graph_width}" height="{$graph_height}"/> |
| <g id="graph" transform="matrix(1 0 0 -1 0 {$graph_height})"> |
| <!-- Those projects which failed due to a dependancy problem --> |
| <xsl:variable name="dependancy"> |
| <xsl:value-of select="$graph_width"/> |
| <xsl:text>,0 0,0</xsl:text> |
| <xsl:for-each select="datum"> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="(position() - 1) * $x_scale"/> |
| <xsl:text>,</xsl:text> |
| <xsl:value-of select="(@dependancy + @failed) * ($graph_height div (@passed + @dependancy + @failed))"/> |
| </xsl:for-each> |
| </xsl:variable> |
| <polygon id="graph-dependancy" points="{$dependancy}"/> |
| <!-- Those projects which failed to compile --> |
| <xsl:variable name="failed"> |
| <xsl:value-of select="$graph_width"/> |
| <xsl:text>,0 0,0</xsl:text> |
| <xsl:for-each select="datum"> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="(position() - 1) * $x_scale"/> |
| <xsl:text>,</xsl:text> |
| <xsl:value-of select="@failed * ($graph_height div (@passed + @dependancy + @failed))"/> |
| </xsl:for-each> |
| </xsl:variable> |
| <polygon id="graph-failed" points="{$failed}"/> |
| </g> |
| <g id="horizontalRuler"> |
| <g transform="matrix(1 0 0 -1 0 {$graph_height - 2})"> |
| <xsl:for-each select="datum"> |
| <use x="{(position() -1) * $x_scale}" xlink:href="#week"/> |
| </xsl:for-each> |
| </g> |
| <!-- Question: how do we 'translate' weeks into a month? --> |
| </g> |
| </g> |
| </xsl:template> |
| </xsl:stylesheet> |