Allow row conversion function for d3.dsv.parse.
This commit is contained in:
Родитель
4648db5bdd
Коммит
aeb620b3a8
|
@ -5235,18 +5235,32 @@ d3 = function() {
|
|||
function d3_dsv(delimiter, mimeType) {
|
||||
var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
|
||||
function dsv(url, callback) {
|
||||
return d3.xhr(url, mimeType, callback).response(response);
|
||||
var xhr = d3.xhr(url, mimeType, callback), row;
|
||||
xhr.row = function(_) {
|
||||
if (!arguments.length) return row;
|
||||
xhr.response((row = _) == null ? response : typedResponse(_));
|
||||
return xhr;
|
||||
};
|
||||
return xhr.row(null);
|
||||
}
|
||||
function response(request) {
|
||||
return dsv.parse(request.responseText);
|
||||
}
|
||||
dsv.parse = function(text) {
|
||||
function typedResponse(f) {
|
||||
return function(request) {
|
||||
return dsv.parse(request.responseText, f);
|
||||
};
|
||||
}
|
||||
dsv.parse = function(text, f) {
|
||||
var o;
|
||||
return dsv.parseRows(text, function(row) {
|
||||
if (o) return o(row);
|
||||
o = new Function("d", "return {" + row.map(function(name, i) {
|
||||
return dsv.parseRows(text, function(row, i) {
|
||||
if (o) return o(row, i - 1);
|
||||
var a = new Function("d", "return {" + row.map(function(name, i) {
|
||||
return JSON.stringify(name) + ": d[" + i + "]";
|
||||
}).join(",") + "}");
|
||||
o = f ? function(row, i) {
|
||||
return f(a(row), i);
|
||||
} : a;
|
||||
});
|
||||
};
|
||||
dsv.parseRows = function(text, f) {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -3,20 +3,36 @@ function d3_dsv(delimiter, mimeType) {
|
|||
delimiterCode = delimiter.charCodeAt(0);
|
||||
|
||||
function dsv(url, callback) {
|
||||
return d3.xhr(url, mimeType, callback).response(response);
|
||||
var xhr = d3.xhr(url, mimeType, callback),
|
||||
row;
|
||||
|
||||
xhr.row = function(_) {
|
||||
if (!arguments.length) return row;
|
||||
xhr.response((row = _) == null ? response : typedResponse(_));
|
||||
return xhr;
|
||||
};
|
||||
|
||||
return xhr.row(null);
|
||||
}
|
||||
|
||||
function response(request) {
|
||||
return dsv.parse(request.responseText);
|
||||
}
|
||||
|
||||
dsv.parse = function(text) {
|
||||
function typedResponse(f) {
|
||||
return function(request) {
|
||||
return dsv.parse(request.responseText, f);
|
||||
};
|
||||
}
|
||||
|
||||
dsv.parse = function(text, f) {
|
||||
var o;
|
||||
return dsv.parseRows(text, function(row) {
|
||||
if (o) return o(row);
|
||||
o = new Function("d", "return {" + row.map(function(name, i) {
|
||||
return dsv.parseRows(text, function(row, i) {
|
||||
if (o) return o(row, i - 1);
|
||||
var a = new Function("d", "return {" + row.map(function(name, i) {
|
||||
return JSON.stringify(name) + ": d[" + i + "]";
|
||||
}).join(",") + "}");
|
||||
o = f ? function(row, i) { return f(a(row), i); } : a;
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -76,6 +76,27 @@ suite.addBatch({
|
|||
]);
|
||||
}
|
||||
},
|
||||
|
||||
"parse with row function": {
|
||||
"invokes the row function for every row in order": function() {
|
||||
var rows = [];
|
||||
d3.csv.parse("a\n1\n2\n3\n4", function(d, i) { rows.push({d: d, i: i}); });
|
||||
assert.deepEqual(rows, [
|
||||
{d: {a: "1"}, i: 0},
|
||||
{d: {a: "2"}, i: 1},
|
||||
{d: {a: "3"}, i: 2},
|
||||
{d: {a: "4"}, i: 3}
|
||||
]);
|
||||
},
|
||||
"returns an array of the row function return values": function() {
|
||||
assert.deepEqual(d3.csv.parse("a,b,c\n1,2,3\n", function(row) { return row; }), [{a: "1", b: "2", c: "3"}]);
|
||||
},
|
||||
"skips rows if the row function returns null or undefined": function() {
|
||||
assert.deepEqual(d3.csv.parse("a,b,c\n1,2,3\n2,3,4", function(row) { return row.a & 1 ? null : row; }), [{a: "2", b: "3", c: "4"}]);
|
||||
assert.deepEqual(d3.csv.parse("a,b,c\n1,2,3\n2,3,4", function(row) { return row.a & 1 ? undefined : row; }), [{a: "2", b: "3", c: "4"}]);
|
||||
}
|
||||
},
|
||||
|
||||
"parseRows": {
|
||||
topic: function() {
|
||||
return d3.csv.parseRows;
|
||||
|
|
Загрузка…
Ссылка в новой задаче