<!DOCTYPE HTML>
							 | 
						|
								<html>
							 | 
						|
								<head><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-61231638-1', 'auto');ga('send', 'pageview');</script>
							 | 
						|
								    <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', 'Bargraph', '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, groups, options);
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * 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>
							 |