From 47238c16d89e69fbb540e8869ba11e6ae47183f4 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 21 May 2014 21:36:21 +0200 Subject: Use userID instead of index for referencing related nodes --- js/preprocess.js | 16 ++++++++-------- js/spam.js | 11 +++++------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/js/preprocess.js b/js/preprocess.js index 65d27c3..8a3e34c 100644 --- a/js/preprocess.js +++ b/js/preprocess.js @@ -80,19 +80,19 @@ function preprocess(data, options) { console.log('Nodes count (after dropping loners):', data.nodes.length); } - // prepare data for force layout: map user IDs to indices - var userIds_indices = {}; + // link edges with nodes + var users = {}; data.nodes.forEach(function (user, i) { - userIds_indices[user.userid] = i; + users[user.userid] = user; }); - console.log('UserID to index map:', userIds_indices); // change userID of relation edges to indices data.edges.map(function (link) { - link.source = userIds_indices[link.source]; - link.target = userIds_indices[link.target]; + // replace source/target user IDs by their respective (user) nodes + link.source = users[link.source]; + link.target = users[link.target]; // for faster lookup, store neighboring nodes per node - data.nodes[link.source].relatedTo.push(link.target); - data.nodes[link.target].relatedFrom.push(link.source); + link.source.relatedTo.push(link.target.userid); + link.target.relatedFrom.push(link.source.userid); }); } diff --git a/js/spam.js b/js/spam.js index 884d4f9..92ca13d 100644 --- a/js/spam.js +++ b/js/spam.js @@ -206,8 +206,8 @@ function processData(data) { // ... and also update neighboring nodes contents.selectAll('.node') .classed('neighbor', function (node) { - return node.relatedTo.indexOf(d.index) >= 0 || - node.relatedFrom.indexOf(d.index) >= 0; + return node.relatedTo.indexOf(d.userid) >= 0 || + node.relatedFrom.indexOf(d.userid) >= 0; }); }) .on('mouseout', function (d) { @@ -240,10 +240,10 @@ function processData(data) { var nodes = { 'from': force.nodes().filter(function (edge) { - return edge.relatedTo.indexOf(d.index) >= 0; + return edge.relatedTo.indexOf(d.userid) >= 0; }), 'to': force.nodes().filter(function (edge) { - return edge.relatedFrom.indexOf(d.index) >= 0; + return edge.relatedFrom.indexOf(d.userid) >= 0; }) }; Object.keys(nodes).forEach(function (dir) { @@ -256,8 +256,7 @@ function processData(data) { var relations = userInfo.select('.relations-' + dir) .selectAll('li') .data(related, function key_func_links(d) { - // unique keys to group by node (index) - return d.index; + return d.userid; }); relations.enter().append('li') .text(function (d) { -- cgit v1.2.1