|
|
@ -0,0 +1,367 @@ |
|
|
|
<!DOCTYPE HTML> |
|
|
|
<html> |
|
|
|
<head> |
|
|
|
<title>Graph2d | External legend Example</title> |
|
|
|
<link href="../../dist/vis.css" rel="stylesheet" type="text/css" /> |
|
|
|
<style type="text/css"> |
|
|
|
body, html { |
|
|
|
font-family: sans-serif; |
|
|
|
} |
|
|
|
|
|
|
|
.customStyle1 { |
|
|
|
fill: #f2ea00; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #b3ab00; |
|
|
|
} |
|
|
|
|
|
|
|
.customStyle2 { |
|
|
|
fill: #00a0f2; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #050092; |
|
|
|
} |
|
|
|
|
|
|
|
.customStyle3 { |
|
|
|
fill: #00f201; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #029200; |
|
|
|
} |
|
|
|
|
|
|
|
path.customStyle3.fill { |
|
|
|
fill-opacity:0.5 !important; |
|
|
|
stroke: none; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup0 { |
|
|
|
fill:#4f81bd; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #4f81bd; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup1 { |
|
|
|
fill:#f79646; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #f79646; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup2 { |
|
|
|
fill: #8c51cf; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #8c51cf; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup3 { |
|
|
|
fill: #75c841; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #75c841; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup4 { |
|
|
|
fill: #ff0100; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #ff0100; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup5 { |
|
|
|
fill: #37d8e6; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #37d8e6; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup6 { |
|
|
|
fill: #042662; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #042662; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup7 { |
|
|
|
fill:#00ff26; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #00ff26; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup8 { |
|
|
|
fill:#ff00ff; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #ff00ff; |
|
|
|
} |
|
|
|
|
|
|
|
.graphGroup9 { |
|
|
|
fill: #8f3938; |
|
|
|
fill-opacity:0; |
|
|
|
stroke-width:2px; |
|
|
|
stroke: #8f3938; |
|
|
|
} |
|
|
|
|
|
|
|
.fill { |
|
|
|
fill-opacity:0.1; |
|
|
|
stroke: none; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.bar { |
|
|
|
fill-opacity:0.5; |
|
|
|
stroke-width:1px; |
|
|
|
} |
|
|
|
|
|
|
|
.point { |
|
|
|
stroke-width:2px; |
|
|
|
fill-opacity:1.0; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.legendBackground { |
|
|
|
stroke-width:1px; |
|
|
|
fill-opacity:0.9; |
|
|
|
fill: #ffffff; |
|
|
|
stroke: #c2c2c2; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.outline { |
|
|
|
stroke-width:1px; |
|
|
|
fill-opacity:1; |
|
|
|
fill: #ffffff; |
|
|
|
stroke: #e5e5e5; |
|
|
|
} |
|
|
|
|
|
|
|
.iconFill { |
|
|
|
fill-opacity:0.3; |
|
|
|
stroke: none; |
|
|
|
} |
|
|
|
|
|
|
|
div.descriptionContainer { |
|
|
|
float:left; |
|
|
|
height:30px; |
|
|
|
width:160px; |
|
|
|
padding-left:5px; |
|
|
|
padding-right:5px; |
|
|
|
line-height: 30px; |
|
|
|
} |
|
|
|
|
|
|
|
div.iconContainer { |
|
|
|
float:left; |
|
|
|
} |
|
|
|
|
|
|
|
div.legendElementContainer { |
|
|
|
display:inline-block; |
|
|
|
width:200px; |
|
|
|
height:30px; |
|
|
|
border-style:solid; |
|
|
|
border-width:1px; |
|
|
|
border-color: #e0e0e0; |
|
|
|
background-color: #ffffff; |
|
|
|
margin:4px; |
|
|
|
padding:4px; |
|
|
|
-webkit-touch-callout: none; |
|
|
|
-webkit-user-select: none; |
|
|
|
-khtml-user-select: none; |
|
|
|
-moz-user-select: none; |
|
|
|
-ms-user-select: none; |
|
|
|
user-select: none; |
|
|
|
cursor:pointer; |
|
|
|
} |
|
|
|
div.legendElementContainer.hidden { |
|
|
|
background-color: #d3e6ff; |
|
|
|
} |
|
|
|
|
|
|
|
svg.legendIcon { |
|
|
|
width:30px; |
|
|
|
height:30px; |
|
|
|
} |
|
|
|
|
|
|
|
div.externalLegend { |
|
|
|
position:relative; |
|
|
|
margin-left: -5px; |
|
|
|
width: 900px; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</style> |
|
|
|
|
|
|
|
<script src="../../dist/vis.js"></script> |
|
|
|
|
|
|
|
</head> |
|
|
|
<body> |
|
|
|
<h2>Graph2d | External custom legend</h2> |
|
|
|
<div style="width:800px; font-size:14px; text-align: justify;"> |
|
|
|
This example shows how to create an external custom legend using the getLegend function. We use normal JavaScript to show and hide the |
|
|
|
groups by updating the dataset. |
|
|
|
|
|
|
|
</div> |
|
|
|
<br /> |
|
|
|
<div id="Legend" class="externalLegend"></div> |
|
|
|
<div id="visualization"></div> |
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript"> |
|
|
|
// create a dataSet with groups |
|
|
|
var names = ['SquareShaded', 'Bar', 'Blank', 'CircleShaded']; |
|
|
|
var groups = new vis.DataSet(); |
|
|
|
groups.add({ |
|
|
|
id: 0, |
|
|
|
content: names[0], |
|
|
|
className: 'customStyle1', |
|
|
|
options: { |
|
|
|
drawPoints: { |
|
|
|
style: 'square' // square, circle |
|
|
|
}, |
|
|
|
shaded: { |
|
|
|
orientation: 'bottom' // top, bottom |
|
|
|
} |
|
|
|
}}); |
|
|
|
|
|
|
|
groups.add({ |
|
|
|
id: 1, |
|
|
|
content: names[1], |
|
|
|
className: 'customStyle2', |
|
|
|
options: { |
|
|
|
style:'bar', |
|
|
|
drawPoints: {style: 'circle', |
|
|
|
size: 10 |
|
|
|
} |
|
|
|
}}); |
|
|
|
|
|
|
|
groups.add({ |
|
|
|
id: 2, |
|
|
|
content: names[2], |
|
|
|
options: { |
|
|
|
yAxisOrientation: 'right', // right, left |
|
|
|
drawPoints: false |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
groups.add({ |
|
|
|
id: 3, |
|
|
|
content: names[3], |
|
|
|
className: 'customStyle3', |
|
|
|
options: { |
|
|
|
yAxisOrientation: 'right', // right, left |
|
|
|
drawPoints: { |
|
|
|
style: 'circle' // square, circle |
|
|
|
}, |
|
|
|
shaded: { |
|
|
|
orientation: 'top' // top, bottom |
|
|
|
} |
|
|
|
}}); |
|
|
|
|
|
|
|
var container = document.getElementById('visualization'); |
|
|
|
var items = [ |
|
|
|
{x: '2014-06-12', y: 0 , group: 0}, |
|
|
|
{x: '2014-06-13', y: 30, group: 0}, |
|
|
|
{x: '2014-06-14', y: 10, group: 0}, |
|
|
|
{x: '2014-06-15', y: 15, group: 1}, |
|
|
|
{x: '2014-06-16', y: 30, group: 1}, |
|
|
|
{x: '2014-06-17', y: 10, group: 1}, |
|
|
|
{x: '2014-06-18', y: 15, group: 1}, |
|
|
|
{x: '2014-06-19', y: 52, group: 1}, |
|
|
|
{x: '2014-06-20', y: 10, group: 1}, |
|
|
|
{x: '2014-06-21', y: 20, group: 2}, |
|
|
|
{x: '2014-06-22', y: 600, group: 2}, |
|
|
|
{x: '2014-06-23', y: 100, group: 2}, |
|
|
|
{x: '2014-06-24', y: 250, group: 2}, |
|
|
|
{x: '2014-06-25', y: 300, group: 2}, |
|
|
|
{x: '2014-06-26', y: 200, group: 3}, |
|
|
|
{x: '2014-06-27', y: 600, group: 3}, |
|
|
|
{x: '2014-06-28', y: 1000, group: 3}, |
|
|
|
{x: '2014-06-29', y: 250, group: 3}, |
|
|
|
{x: '2014-06-30', y: 300, group: 3} |
|
|
|
]; |
|
|
|
|
|
|
|
var dataset = new vis.DataSet(items); |
|
|
|
var options = { |
|
|
|
dataAxis: {showMinorLabels: false}, |
|
|
|
start: '2014-06-09', |
|
|
|
end: '2014-07-03' |
|
|
|
}; |
|
|
|
var graph2d = new vis.Graph2d(container, items, options, groups); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* this function fills the external legend with content using the getLegend() function. |
|
|
|
*/ |
|
|
|
function populateExternalLegend() { |
|
|
|
var groupsData = groups.get(); |
|
|
|
var legendDiv = document.getElementById("Legend"); |
|
|
|
legendDiv.innerHTML = ""; |
|
|
|
|
|
|
|
// get for all groups: |
|
|
|
for (var i = 0; i < groupsData.length; i++) { |
|
|
|
// create divs |
|
|
|
var containerDiv = document.createElement("div"); |
|
|
|
var iconDiv = document.createElement("div"); |
|
|
|
var descriptionDiv = document.createElement("div"); |
|
|
|
|
|
|
|
// give divs classes and Ids where necessary |
|
|
|
containerDiv.className = 'legendElementContainer'; |
|
|
|
containerDiv.id = groupsData[i].id + "_legendContainer" |
|
|
|
iconDiv.className = "iconContainer"; |
|
|
|
descriptionDiv.className = "descriptionContainer"; |
|
|
|
|
|
|
|
// get the legend for this group. |
|
|
|
var legend = graph2d.getLegend(groupsData[i].id,30,30); |
|
|
|
|
|
|
|
// append class to icon. All styling classes from the vis.css have been copied over into the head here to be able to style the |
|
|
|
// icons with the same classes if they are using the default ones. |
|
|
|
legend.icon.setAttributeNS(null, "class", "legendIcon"); |
|
|
|
|
|
|
|
// append the legend to the corresponding divs |
|
|
|
iconDiv.appendChild(legend.icon); |
|
|
|
descriptionDiv.innerHTML = legend.label; |
|
|
|
|
|
|
|
// determine the order for left and right orientation |
|
|
|
if (legend.orientation == 'left') { |
|
|
|
descriptionDiv.style.textAlign = "left"; |
|
|
|
containerDiv.appendChild(iconDiv); |
|
|
|
containerDiv.appendChild(descriptionDiv); |
|
|
|
} |
|
|
|
else { |
|
|
|
descriptionDiv.style.textAlign = "right"; |
|
|
|
containerDiv.appendChild(descriptionDiv); |
|
|
|
containerDiv.appendChild(iconDiv); |
|
|
|
} |
|
|
|
|
|
|
|
// append to the legend container div |
|
|
|
legendDiv.appendChild(containerDiv); |
|
|
|
|
|
|
|
// bind click event to this legend element. |
|
|
|
containerDiv.onclick = toggleGraph.bind(this,groupsData[i].id); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* This function switchs the visible option of the selected group on an off. |
|
|
|
* @param groupId |
|
|
|
*/ |
|
|
|
function toggleGraph(groupId) { |
|
|
|
// get the container that was clicked on. |
|
|
|
var container = document.getElementById(groupId + "_legendContainer") |
|
|
|
// if visible, hide |
|
|
|
if (graph2d.isGroupVisible(groupId) == true) { |
|
|
|
groups.update({id:groupId, visible:false}); |
|
|
|
container.className = container.className + " hidden"; |
|
|
|
} |
|
|
|
else { // if invisible, show |
|
|
|
groups.update({id:groupId, visible:true}); |
|
|
|
container.className = container.className.replace("hidden",""); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
populateExternalLegend() |
|
|
|
|
|
|
|
</script> |
|
|
|
</body> |
|
|
|
</html> |