Widget:StatsGraph: Difference between revisions
Jump to navigation
Jump to search
Removed inline style and turned graph upside down |
m Wrong variable |
||
(11 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<includeonly><div | <includeonly><div class="stats-graph-container"><script> | ||
function calcCoordinate(degree, min, max, val) { | function calcCoordinate(degree, min, max, val) { | ||
Line 27: | Line 27: | ||
} | } | ||
function buildGraph( | function buildGraph(dataComplete) { | ||
var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); | var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); | ||
var svgNS = svg.namespaceURI; | var svgNS = svg.namespaceURI; | ||
Line 33: | Line 33: | ||
svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", svgLinkNS); | svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", svgLinkNS); | ||
svg.setAttribute('viewBox', "0 0 800 800"); | svg.setAttribute('viewBox', "0 0 800 800"); | ||
svg.setAttribute('preserveAspectRatio', " | svg.setAttribute('preserveAspectRatio', "xMidyMid meet"); | ||
svg.setAttribute('width', "300px"); | |||
svg.setAttribute('height', "auto"); | |||
svg.setAttribute('version', "1.1"); | svg.setAttribute('version', "1.1"); | ||
/* This pretty much defines the base net lines */ | /* This pretty much defines the base net lines */ | ||
var defs = document.createElementNS(svgNS, 'defs'); | var defs = document.createElementNS(svgNS, 'defs'); | ||
/* Wedge id has to be unique */ | |||
var wedgeId = "wedge-" + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { | |||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); | |||
return v.toString(16); | |||
}); | |||
var wedge = document.createElementNS(svgNS, 'g'); | var wedge = document.createElementNS(svgNS, 'g'); | ||
wedge.setAttribute('id', | wedge.setAttribute('id', wedgeId); | ||
var directionCount = dataComplete[0].data.length; | var directionCount = dataComplete[0].data.length; | ||
Line 71: | Line 79: | ||
for (var dataIdx=0; dataIdx<directionCount; dataIdx++) { | for (var dataIdx=0; dataIdx<directionCount; dataIdx++) { | ||
var propertyLine = document.createElementNS(svgNS, 'use'); | var propertyLine = document.createElementNS(svgNS, 'use'); | ||
propertyLine.setAttributeNS(svgLinkNS, "href", "# | propertyLine.setAttributeNS(svgLinkNS, "href", "#" + wedgeId); | ||
propertyLine.setAttribute('transform', "rotate(" + (degreeSpacing * dataIdx) + ")"); | propertyLine.setAttribute('transform', "rotate(" + (degreeSpacing * dataIdx) + ")"); | ||
gDrawing.appendChild(propertyLine ); | gDrawing.appendChild(propertyLine ); | ||
Line 79: | Line 87: | ||
var polygonParams = dataComplete[dataIdx]; | var polygonParams = dataComplete[dataIdx]; | ||
var datapresentation = document.createElementNS(svgNS, 'polygon'); | var datapresentation = document.createElementNS(svgNS, 'polygon'); | ||
datapresentation.setAttribute('fill', ' | if ('title' in polygonParams) { | ||
datapresentation.setAttribute(' | var title = document.createElementNS(svgNS, 'title'); | ||
title.appendChild(document.createTextNode(polygonParams.title)); | |||
datapresentation.appendChild(title); | |||
} | |||
if (('fill' in polygonParams) || ('stroke' in polygonParams)) { | |||
if ('fill' in polygonParams) datapresentation.setAttribute('fill', polygonParams.fill); | |||
if ('stroke' in polygonParams) datapresentation.setAttribute('stroke', polygonParams.stroke); | |||
} else { | |||
datapresentation.setAttribute('class', polygonParams.class ? polygonParams.class : "graph-orange"); | |||
} | |||
datapresentation.setAttribute('points', buildPolygonString(polygonParams.data)); | datapresentation.setAttribute('points', buildPolygonString(polygonParams.data)); | ||
gDrawing.appendChild(datapresentation); | gDrawing.appendChild(datapresentation); | ||
for (var labelIdx=0; labelIdx<polygonParams.data.length; labelIdx++) { | for (var labelIdx=0; labelIdx<polygonParams.data.length; labelIdx++) { | ||
var polygonCornerData = polygonParams.data[labelIdx]; | |||
var rotate = (-degreeSpacing * labelIdx * Math.PI) / 180; | |||
var label = document.createElementNS(svgNS, 'text'); | var label = document.createElementNS(svgNS, 'text'); | ||
label.setAttribute('x', -340*Math.sin(rotate)); | label.setAttribute('x', -340*Math.sin(rotate)); | ||
label.setAttribute('y', -340*Math.cos(rotate)); | label.setAttribute('y', -340*Math.cos(rotate)); | ||
label.appendChild(document.createTextNode( | label.setAttribute('title', titleText); | ||
label.appendChild(document.createTextNode(polygonCornerData.label)); | |||
var titleText = "" + polygonCornerData.min + " <= " + polygonCornerData.value + " <= " + polygonCornerData.max; | |||
var title = document.createElementNS(svgNS, 'title'); | |||
title.appendChild(document.createTextNode(titleText)); | |||
label.appendChild(title); | |||
gDrawing.appendChild(label); | gDrawing.appendChild(label); | ||
} | } | ||
Line 96: | Line 123: | ||
svg.appendChild(gDrawing); | svg.appendChild(gDrawing); | ||
document. | var container = document.currentScript.parentNode; | ||
container.appendChild(svg); | |||
} | } | ||
var graphData = JSON.parse(`<!--{$data|escape:'html'}-->`.replace(/"/gi, '"')); | var graphData = JSON.parse(`<!--{$data|escape:'html'}-->`.replace(/"/gi, '"')); | ||
buildGraph( | buildGraph(graphData);</script></div></includeonly><noinclude>{{Documentation}}</noinclude> | ||
Latest revision as of 11:54, 13 December 2019
Widget to create an SVG image containing a radar chart. It is configured with a JSON string.
Parameters
Parameter name | Required? | Default value | Description |
---|---|---|---|
data |
Yes | (n/a) | A JSON String containing all values. Please make sure that
See the testcases for examples how to configure the JSON string. |
Usage
See the template's testcases:
Small graph using default colors | |
---|---|
Wiki code | {{#widget:StatsGraph |data=[ { "data": [ { "label": "RoF", "min": 12, "max": 37, "value": 14 }, { "label": "Acc", "min": 34, "max": 68, "value": 37 }, { "label": "Dmg", "min": 9, "max": 12, "value": 11 } ] } ]}} |
Main version | |
Sandbox version | Error in widget StatsGraph/sandbox: Unable to load template 'wiki:StatsGraph/sandbox'
|
Graph showing two graphs, second graph with different color | |
---|---|
Wiki code | {{#widget:StatsGraph |data=[ { "data": [ { "label": "RoF", "min": 12, "max": 37, "value": 32 }, { "label": "Acc", "min": 12, "max": 37, "value": 32 }, { "label": "Dmg", "min": 12, "max": 37, "value": 32 } ] }, { "fill": "blue", "stroke": "darkblue", "data": [ { "label": "RoF", "min": 12, "max": 37, "value": 34 }, { "label": "Acc", "min": 34, "max": 68, "value": 51 }, { "label": "Dmg", "min": 9, "max": 12, "value": 9 } ] } ]}} |
Main version | |
Sandbox version | Error in widget StatsGraph/sandbox: Unable to load template 'wiki:StatsGraph/sandbox'
|
Graph with more properties | |
---|---|
Wiki code | {{#widget:StatsGraph |data=[ { "data": [ { "label": "RoF", "min": 12, "max": 37, "value": 14 }, { "label": "Acc", "min": 34, "max": 68, "value": 37 }, { "label": "Dmg", "min": 9, "max": 16, "value": 11 }, { "label": "Dmg1", "min": 9, "max": 16, "value": 12 }, { "label": "Dmg2", "min": 9, "max": 16, "value": 13 }, { "label": "Dmg3", "min": 9, "max": 16, "value": 14 } ] } ]}} |
Main version | |
Sandbox version | Error in widget StatsGraph/sandbox: Unable to load template 'wiki:StatsGraph/sandbox'
|
The above documentation is transcluded from Widget:StatsGraph/doc. (edit | history) |