| @ -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> | |||