forked from Mirrors/apostrophe
226 lines
7.4 KiB
HTML
226 lines
7.4 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset='utf-8'>
|
|
<title>gRaphaël integration - Handsontable</title>
|
|
|
|
<!--
|
|
Loading Handsontable (full distribution that includes all dependencies apart from jQuery)
|
|
-->
|
|
<script data-jsfiddle="common" src="../demo/js/jquery.min.js"></script>
|
|
|
|
<script data-jsfiddle="common" src="../dist/handsontable.full.js"></script>
|
|
<link data-jsfiddle="common" rel="stylesheet" media="screen" href="../dist/handsontable.full.css">
|
|
|
|
<!--
|
|
Loading demo dependencies. They are used here only to enhance the examples on this page
|
|
-->
|
|
<link data-jsfiddle="common" rel="stylesheet" media="screen" href="css/samples.css?20140331">
|
|
<script src="js/samples.js"></script>
|
|
<script src="js/highlight/highlight.pack.js"></script>
|
|
<script data-jsfiddle="common" src="js/raphael/raphael-min.js"></script>
|
|
<script data-jsfiddle="common" src="js/raphael/g.raphael-min.js"></script>
|
|
<script data-jsfiddle="common" src="js/raphael/g.bar-min.js"></script>
|
|
<link rel="stylesheet" media="screen" href="js/highlight/styles/github.css">
|
|
<link rel="stylesheet" href="css/font-awesome/css/font-awesome.min.css">
|
|
<style type="text/css">
|
|
#example1 {
|
|
float: left;
|
|
margin-top: 30px;
|
|
}
|
|
|
|
#example1-side {
|
|
margin-top: 30px;
|
|
display: inline-block;
|
|
}
|
|
|
|
#graphael-example {
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
#example1-side:after {
|
|
content: "";
|
|
display: table;
|
|
clear: both;
|
|
}
|
|
</style>
|
|
|
|
<!--
|
|
Facebook open graph. Don't copy this to your project :)
|
|
-->
|
|
<meta property="og:title" content="gRaphael charts integration">
|
|
<meta property="og:description"
|
|
content="">
|
|
<meta property="og:url" content="http://handsontable.com/demo/graphael.html">
|
|
<meta property="og:image" content="http://handsontable.com/demo/image/og-image.png">
|
|
<meta property="og:image:type" content="image/png">
|
|
<meta property="og:image:width" content="409">
|
|
<meta property="og:image:height" content="164">
|
|
<link rel="canonical" href="http://handsontable.com/demo/graphael.html">
|
|
|
|
<!--
|
|
Google Analytics for GitHub Page. Don't copy this to your project :)
|
|
-->
|
|
<script src="js/ga.js"></script>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
|
|
<div class="wrapper">
|
|
<div class="wrapper-row">
|
|
<div id="global-menu-clone">
|
|
<h1><a href="../index.html">Handsontable</a></h1>
|
|
|
|
</div>
|
|
|
|
<div id="container">
|
|
<div class="columnLayout">
|
|
|
|
<div class="rowLayout">
|
|
<div class="descLayout">
|
|
<div class="pad" data-jsfiddle="example1">
|
|
<a name="lazy"></a>
|
|
|
|
<h2>gRaphaël bar chart integration example</h2>
|
|
|
|
<p>The following demo shows an example of data visualisation using <a href="http://g.raphaeljs.com/"
|
|
rel="nofollow">gRaphaël's</a> bar
|
|
charts.</p>
|
|
|
|
<ul>
|
|
<li>Choosing any of the <em>Aggregate</em> buttons changes the currently used column</li>
|
|
<li>Editing data in the grid automatically refreshes the chart with updated values.</li>
|
|
</ul>
|
|
|
|
<div id="example1"></div>
|
|
<div id="example1-side">
|
|
<div id="graphael-example"></div>
|
|
<div class="aggregation">Aggregate:
|
|
<button data-aggregate="0" title="Aggregates the Cars column">
|
|
Cars
|
|
</button>
|
|
<button data-aggregate="1" title="Aggregates the Years column">
|
|
Years
|
|
</button>
|
|
<button data-aggregate="2" title="Aggregates the Colors column">
|
|
Colors
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="codeLayout">
|
|
<div class="pad">
|
|
<div class="jsFiddle">
|
|
<button class="jsFiddleLink" data-runfiddle="example1">Edit in jsFiddle</button>
|
|
</div>
|
|
|
|
<script data-jsfiddle="example1">
|
|
var data = [
|
|
['Nissan', 2009, 'black'],
|
|
['Nissan', 2006, 'blue'],
|
|
['Chrysler', 2004, 'yellow'],
|
|
['Volvo', 2012, 'white'],
|
|
['Nissan', 2006, 'blue'],
|
|
['Chevrolet', 2004, 'yellow'],
|
|
['Volvo', 2012, "red"],
|
|
['Ford', 2006, 'yellow'],
|
|
['Chevrolet', 2004, 'yellow'],
|
|
['Ford', 2012, 'yellow']
|
|
],
|
|
container = document.getElementById('example1'),
|
|
r = Raphael('graphael-example', 250, 250),
|
|
chartData = [],
|
|
activeColumn = 0,
|
|
lastChange = null,
|
|
hot;
|
|
|
|
hot = new Handsontable(container, {
|
|
data: data,
|
|
width: 250,
|
|
colHeaders: ['Car', 'Year', 'Color'],
|
|
rowHeaders: true,
|
|
afterChange: refreshChart
|
|
});
|
|
chartData = [
|
|
gatherColData(0),
|
|
gatherColData(1),
|
|
gatherColData(2)
|
|
];
|
|
renderChart();
|
|
|
|
function fin() {
|
|
var label = chartData[activeColumn].labels[$('path').toArray().indexOf(this.bar[0])];
|
|
|
|
this.flag = r.popup(this.bar.x, this.bar.y, label + " - " + this.bar.value || '0').insertBefore(this);
|
|
}
|
|
|
|
function fout() {
|
|
this.flag.animate({opacity: 0}, 300, function () {
|
|
this.remove();
|
|
});
|
|
}
|
|
|
|
function refreshChart(changes, source) {
|
|
if (source != 'loadData') {
|
|
chartData[changes[0][1]] = gatherColData(changes[0][1]);
|
|
activeColumn = changes[0][1];
|
|
|
|
renderChart();
|
|
}
|
|
}
|
|
|
|
function renderChart() {
|
|
r.clear();
|
|
r.text(125, 25, 'Aggregated by ' + $(".aggregation button[data-aggregate='" + activeColumn + "']").text()).attr({ font: "20px sans-serif" });
|
|
r.barchart(10, 75, 220, 200, [chartData[activeColumn].values]).hover(fin, fout);
|
|
}
|
|
|
|
function gatherColData(colNum) {
|
|
var data = hot.getDataAtCol(colNum),
|
|
chartData = {labels: [], values: []},
|
|
entryIndex = -1,
|
|
labelsSize;
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
entryIndex = chartData.labels.indexOf(data[i]);
|
|
|
|
if (entryIndex != -1) {
|
|
chartData.values[entryIndex]++;
|
|
} else {
|
|
labelsSize = chartData.labels.length;
|
|
chartData.labels[labelsSize] = data[i];
|
|
chartData.values[labelsSize] = 1;
|
|
}
|
|
}
|
|
|
|
return chartData;
|
|
}
|
|
|
|
$('.aggregation').on('click', 'button', function () {
|
|
activeColumn = $(this).attr('data-aggregate');
|
|
renderChart();
|
|
});
|
|
|
|
</script>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="footer-text">
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outside-links-wrapper"></div>
|
|
|
|
</body>
|
|
</html>
|