2011-05-02 03:15:09 +04:00
|
|
|
<!DOCTYPE html>
|
2012-10-12 03:34:17 +04:00
|
|
|
<meta charset="utf-8">
|
|
|
|
<title>Hello, data!</title>
|
|
|
|
<style>
|
2010-09-28 22:34:52 +04:00
|
|
|
|
2012-10-12 03:34:17 +04:00
|
|
|
body,
|
|
|
|
td {
|
2010-09-28 22:34:52 +04:00
|
|
|
font: 14px Helvetica Neue;
|
|
|
|
text-rendering: optimizeLegibility;
|
|
|
|
margin: 1em;
|
|
|
|
}
|
|
|
|
|
|
|
|
table {
|
|
|
|
border-collapse: collapse;
|
|
|
|
margin-top: .5em;
|
|
|
|
}
|
|
|
|
|
|
|
|
td {
|
|
|
|
border: solid 1px #fff;
|
|
|
|
text-align: center;
|
|
|
|
width: 30px;
|
|
|
|
height: 30px;
|
|
|
|
}
|
|
|
|
|
2012-10-12 03:34:17 +04:00
|
|
|
</style>
|
|
|
|
Your lucky numbers are:<br>
|
|
|
|
<table id="table"></table>
|
|
|
|
<script src="../../d3.js"></script>
|
|
|
|
<script>
|
2010-09-28 22:34:52 +04:00
|
|
|
|
|
|
|
var data = [];
|
|
|
|
|
|
|
|
for (var i = 0; i < 10; i++) {
|
|
|
|
for (var j = 0, a = []; j < 10; j++) {
|
|
|
|
a.push(~~(Math.random() * 100));
|
|
|
|
}
|
|
|
|
data.push(a);
|
|
|
|
}
|
|
|
|
|
2012-10-12 03:34:17 +04:00
|
|
|
d3.select(window).on("keypress", refresh);
|
|
|
|
|
2010-10-24 21:56:29 +04:00
|
|
|
transform();
|
2010-09-28 22:34:52 +04:00
|
|
|
|
2010-10-24 21:56:29 +04:00
|
|
|
function transform() {
|
|
|
|
var t = d3.select("#table")
|
|
|
|
.selectAll("tr")
|
|
|
|
.data(data);
|
2010-09-28 22:34:52 +04:00
|
|
|
|
Simplify data join. Add insert & empty.
The data join is now specified as a single function of data, as with all other
properties. This allows the key to be computed on the previously-bound data,
rather than requiring the key to be serialized into the DOM (say, as an
attribute). In the case that there is no previously-bound data, it is still
possible to access the associated node as the `this` context.
The `enter` operator no longer performs an append. For symmetry with the `exit`
operator, you must call `append` after obtaining the entering selection. This
requires a tiny bit more code, but should make the code more clear. Also, it
provides an opportunity to use a different instantiation operator, such as the
new `insert` operator. This takes a second argument, which is a selector for the
insert-before reference element. For example, the selector ":first-child" will
prepend nodes.
The `empty` operator allows you to query whether a selection is empty (i.e.,
contains zero matching nodes).
2011-01-31 22:00:35 +03:00
|
|
|
t.enter().append("tr")
|
2010-10-24 21:56:29 +04:00
|
|
|
.selectAll("td")
|
|
|
|
.data(function(d) { return d; })
|
Simplify data join. Add insert & empty.
The data join is now specified as a single function of data, as with all other
properties. This allows the key to be computed on the previously-bound data,
rather than requiring the key to be serialized into the DOM (say, as an
attribute). In the case that there is no previously-bound data, it is still
possible to access the associated node as the `this` context.
The `enter` operator no longer performs an append. For symmetry with the `exit`
operator, you must call `append` after obtaining the entering selection. This
requires a tiny bit more code, but should make the code more clear. Also, it
provides an opportunity to use a different instantiation operator, such as the
new `insert` operator. This takes a second argument, which is a selector for the
insert-before reference element. For example, the selector ":first-child" will
prepend nodes.
The `empty` operator allows you to query whether a selection is empty (i.e.,
contains zero matching nodes).
2011-01-31 22:00:35 +03:00
|
|
|
.enter().append("td")
|
2010-10-24 21:56:29 +04:00
|
|
|
.style("background-color", function(d) { return "hsl(" + d + ",100%,50%)"; })
|
|
|
|
.text(function(d) { return d; });
|
2010-09-28 22:34:52 +04:00
|
|
|
|
2010-10-24 21:56:29 +04:00
|
|
|
t.selectAll("td")
|
|
|
|
.data(function(d) { return d; })
|
|
|
|
.style("background-color", function(d) { return "hsl(" + d + ",100%,50%)"; })
|
|
|
|
.text(function(d) { return d; });
|
|
|
|
}
|
2010-09-28 22:34:52 +04:00
|
|
|
|
|
|
|
function refresh() {
|
|
|
|
for (var i = 0; i < 10; i++) {
|
|
|
|
for (var j = 0; j < 10; j++) {
|
|
|
|
data[i][j] = (data[i][j] + 1) % 360;
|
|
|
|
}
|
|
|
|
}
|
2010-10-24 21:56:29 +04:00
|
|
|
transform();
|
2010-09-28 22:34:52 +04:00
|
|
|
}
|
|
|
|
|
2012-10-12 03:34:17 +04:00
|
|
|
</script>
|