Skip to content

Instantly share code, notes, and snippets.

@joeycf
Last active August 29, 2015 14:21
Show Gist options
  • Save joeycf/f021e60bb38846dcfaf2 to your computer and use it in GitHub Desktop.
Save joeycf/f021e60bb38846dcfaf2 to your computer and use it in GitHub Desktop.
d3 With Delete and Selection and Expansion
{"edges":[{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"soycociyw-comment-0 PART_OF MEDIA 0SOycoCiYW"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"PART_OF","idVal":"PART_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"soycociywcomment0","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"writer LIKES MEDIA 0SOycoCiYW"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"itstjteja","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"poet OWNER_OF I love it\uD83C\uDDFA\uD83C\uDDF8\uD83C\uDDFA..."}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"poet","target":"soycociywcomment2","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"maxwell_2016 OWNER_OF Awesome photo w..."}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"maxwell2016","target":"soycociywcomment0","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"apk OWNER_OF MEDIA 0SOycoCiYW"}],"color":"green","count":"3","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"apk","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"soycociyw-comment-1 PART_OF MEDIA 0SOycoCiYW"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"PART_OF","idVal":"PART_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"soycociywcomment1","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"miami LIKES MEDIA 0SOycoCiYW"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"miami","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"pants LIKES MEDIA 0SOycoCiYW"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"pants","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"soycociyw-comment-2 PART_OF MEDIA 0SOycoCiYW"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"PART_OF","idVal":"PART_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"soycociywcomment2","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"apk OWNER_OF @maxwell_2016 t..."}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"apk","target":"soycociywcomment1","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"fielder LIKES MEDIA 0SOycoCiYW"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"bfeld","target":"soycociyw","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false}],"intStatus":1,"legend":[{"color":"darkblue","text":"Selected item(s)."},{"color":"#a90329","text":"Item you searched for."},{"color":"#DE863F","text":"Comment"},{"color":"#CF78D6","text":"USERNAME"},{"color":"#5D77C4","text":"MEDIA"}],"nodes":[{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=miami&match=COMPARE_CONTAINS\" target=\"miami\" class=\"btn btn-primary\" >miami</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://instagramimages-a.akamaihd.net/profiles/profile_505436077_75sq_1377779560.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"miami","idType":"USERNAME","idVal":"miami","imgUrl":null,"label":"miami","name":"miami","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=maxwell_2016&match=COMPARE_CONTAINS\" target=\"maxwell_2016\" class=\"btn btn-primary\" >maxwell_2016</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-f-a.akamaihd.net/hphotos-ak-xaf1/t51.2885-19/11023192_756192097809805_1739251287_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"maxwell2016","idType":"USERNAME","idVal":"maxwell_2016","imgUrl":null,"label":"maxwell_2016","name":"maxwell_2016","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=writer&match=COMPARE_CONTAINS\" target=\"writer\" class=\"btn btn-primary\" >writer</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-a-a.akamaihd.net/hphotos-ak-xap1/t51.2885-19/10787805_774521312602080_286961636_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"itstjteja","idType":"USERNAME","idVal":"writer","imgUrl":null,"label":"writer","name":"writer","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=pants&match=COMPARE_CONTAINS\" target=\"pants\" class=\"btn btn-primary\" >pants</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-f-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/10802974_618635078248813_756808338_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"pants","idType":"USERNAME","idVal":"pants","imgUrl":null,"label":"pants","name":"pants","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"1) Open Media","val":"<a href=\"https://instagram.com/p/0SOycoCiYW/\" class=\"btn btn-primary\" target=\"0SOycoCiYW\" >0SOycoCiYW</a>"},{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=soycociyw-comment-0&match=COMPARE_CONTAINS\" target=\"soycociyw-comment-0\" class=\"btn btn-primary\" >soycociyw-comment-0</a>"},{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=soycociyw-comment-1&match=COMPARE_CONTAINS\" target=\"soycociyw-comment-1\" class=\"btn btn-primary\" >soycociyw-comment-1</a>"},{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=soycociyw-comment-2&match=COMPARE_CONTAINS\" target=\"soycociyw-comment-2\" class=\"btn btn-primary\" >soycociyw-comment-2</a>"},{"key":"MEDIA","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=0SOycoCiYW&match=COMPARE_CONTAINS\" target=\"0SOycoCiYW\" class=\"btn btn-primary\" >0SOycoCiYW</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=apk&match=COMPARE_CONTAINS\" target=\"apk\" class=\"btn btn-primary\" >apk</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=fielder&match=COMPARE_CONTAINS\" target=\"fielder\" class=\"btn btn-primary\" >fielder</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=pants&match=COMPARE_CONTAINS\" target=\"pants\" class=\"btn btn-primary\" >pants</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=writer&match=COMPARE_CONTAINS\" target=\"writer\" class=\"btn btn-primary\" >writer</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=miami&match=COMPARE_CONTAINS\" target=\"miami\" class=\"btn btn-primary\" >miami</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/s150x150/e15/11008228_780115975399971_1621749164_n.jpg"}],"cluster":false,"color":"#a90329","edited":false,"expanded":false,"generated":false,"id":"soycociyw","idType":"MEDIA","idVal":"0SOycoCiYW","imgUrl":null,"label":"MEDIA 0SOycoCiYW","name":"MEDIA 0SOycoCiYW","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=fielder&match=COMPARE_CONTAINS\" target=\"fielder\" class=\"btn btn-primary\" >fielder</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-a-a.akamaihd.net/hphotos-ak-xaf1/t51.2885-19/10860009_1376640769303000_1828275519_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"bfeld","idType":"USERNAME","idVal":"fielder","imgUrl":null,"label":"fielder","name":"fielder","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=poet&match=COMPARE_CONTAINS\" target=\"poet\" class=\"btn btn-primary\" >poet</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-h-a.akamaihd.net/hphotos-ak-xfp1/t51.2885-19/10326649_299063340253527_555057916_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"poet","idType":"USERNAME","idVal":"poet","imgUrl":null,"label":"poet","name":"poet","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=soycociyw-comment-2&match=COMPARE_CONTAINS\" target=\"soycociyw-comment-2\" class=\"btn btn-primary\" >soycociyw-comment-2</a>"},{"key":"Comment Text","val":"I love it\uD83C\uDDFA\uD83C\uDDF8\uD83C\uDDFA\uD83C\uDDF8\uD83C\uDDFA\uD83C\uDDF8"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=poet&match=COMPARE_CONTAINS\" target=\"poet\" class=\"btn btn-primary\" >poet</a>"},{"key":"Links","val":"0"}],"media":[],"cluster":false,"color":"#DE863F","edited":false,"expanded":false,"generated":false,"id":"soycociywcomment2","idType":"Comment","idVal":"soycociyw-comment-2","imgUrl":null,"label":"I love it\uD83C\uDDFA\uD83C\uDDF8\uD83C\uDDFA...","name":"I love it\uD83C\uDDFA\uD83C\uDDF8\uD83C\uDDFA...","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=apk&match=COMPARE_CONTAINS\" target=\"apk\" class=\"btn btn-primary\" >apk</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-c-a.akamaihd.net/hphotos-ak-xap1/t51.2885-19/10727494_1436652649960482_787656145_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"apk","idType":"USERNAME","idVal":"apk","imgUrl":null,"label":"apk","name":"apk","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=soycociyw-comment-1&match=COMPARE_CONTAINS\" target=\"soycociyw-comment-1\" class=\"btn btn-primary\" >soycociyw-comment-1</a>"},{"key":"Comment Text","val":"@maxwell_2016 that's my dad with #Jeb. His picture came out better than mine. I had an amazing conversation with Jeb. He is so genuine and inspiring @maxwell."},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=apk&match=COMPARE_CONTAINS\" target=\"apk\" class=\"btn btn-primary\" >apk</a>"},{"key":"Links","val":"0"}],"media":[],"cluster":false,"color":"#DE863F","edited":false,"expanded":false,"generated":false,"id":"soycociywcomment1","idType":"Comment","idVal":"soycociyw-comment-1","imgUrl":null,"label":"@maxwell_2016 t...","name":"@maxwell_2016 t...","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=soycociyw-comment-0&match=COMPARE_CONTAINS\" target=\"soycociyw-comment-0\" class=\"btn btn-primary\" >soycociyw-comment-0</a>"},{"key":"Comment Text","val":"Awesome photo with Our future President!!!! @"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=maxwell_2016&match=COMPARE_CONTAINS\" target=\"maxwell_2016\" class=\"btn btn-primary\" >maxwell_2016</a>"},{"key":"Links","val":"0"}],"media":[],"cluster":false,"color":"#DE863F","edited":false,"expanded":false,"generated":false,"id":"soycociywcomment0","idType":"Comment","idVal":"soycociyw-comment-0","imgUrl":null,"label":"Awesome photo w...","name":"Awesome photo w...","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false}],"numEdges":11,"numNodes":11,"positionMapping":{},"strStatus":"Returning 11 nodes and 11 edges.","userId":null,"userName":null}
{"edges":[{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"maxwell_2016 OWNER_OF Yesssssss!! #ru..."}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"maxwell2016","target":"dabvgiiacomment0","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"apk LIKES MEDIA 0dAbVGiia_"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"apk","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"apk OWNER_OF @maxwell_2016 @..."}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"apk","target":"dabvgiiacomment2","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"dabvgiia-comment-0 PART_OF MEDIA 0dAbVGiia_"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"PART_OF","idVal":"PART_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"dabvgiiacomment0","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"dabvgiia-comment-2 PART_OF MEDIA 0dAbVGiia_"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"PART_OF","idVal":"PART_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"dabvgiiacomment2","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"apk OWNER_OF MEDIA 0dAbVGiia_"}],"color":"green","count":"3","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"apk","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"benefit LIKES MEDIA 0dAbVGiia_"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"benefit","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"tiger OWNER_OF Yes we do"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"OWNER_OF","idVal":"OWNER_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"tiger","target":"dabvgiiacomment1","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"dabvgiia-comment-1 PART_OF MEDIA 0dAbVGiia_"}],"color":"#23A4FF","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"PART_OF","idVal":"PART_OF","label":null,"linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"dabvgiiacomment1","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"zoolander LIKES MEDIA 0dAbVGiia_"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"zoolander","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"amount":"0.0","attrs":[{"key":"Local_Priority","val":"0.7"},{"key":"Min_Score_Required","val":"0.5"},{"key":"Parent_Score","val":"1.0"},{"key":"Value","val":"maxwell_2016 LIKES MEDIA 0dAbVGiia_"}],"color":"blue","count":"1","day":-1,"direction":null,"edited":false,"expanded":false,"generated":false,"id":null,"idType":"LIKES","idVal":"LIKES","label":"+1","linewidth":1,"lineStyle":"solid","month":-1,"old_targets":null,"old_sources":null,"source":"maxwell2016","target":"dabvgiia","type":"","visible":true,"weight":"1","year":-1},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false}],"intStatus":1,"legend":[{"color":"darkblue","text":"Selected item(s)."},{"color":"#a90329","text":"Item you searched for."},{"color":"#DE863F","text":"Comment"},{"color":"#CF78D6","text":"USERNAME"},{"color":"#5D77C4","text":"MEDIA"}],"nodes":[{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=tiger&match=COMPARE_CONTAINS\" target=\"tiger\" class=\"btn btn-primary\" >tiger</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://instagramimages-a.akamaihd.net/profiles/profile_523597679_75sq_1377444424.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"tiger","idType":"USERNAME","idVal":"tiger","imgUrl":null,"label":"tiger","name":"tiger","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=dabvgiia-comment-0&match=COMPARE_CONTAINS\" target=\"dabvgiia-comment-0\" class=\"btn btn-primary\" >dabvgiia-comment-0</a>"},{"key":"Comment Text","val":"Yesssssss!! #runjebrun"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=maxwell_2016&match=COMPARE_CONTAINS\" target=\"maxwell_2016\" class=\"btn btn-primary\" >maxwell_2016</a>"},{"key":"Links","val":"0"}],"media":[],"cluster":false,"color":"#DE863F","edited":false,"expanded":false,"generated":false,"id":"dabvgiiacomment0","idType":"Comment","idVal":"dabvgiia-comment-0","imgUrl":null,"label":"Yesssssss!! #ru...","name":"Yesssssss!! #ru...","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=dabvgiia-comment-1&match=COMPARE_CONTAINS\" target=\"dabvgiia-comment-1\" class=\"btn btn-primary\" >dabvgiia-comment-1</a>"},{"key":"Comment Text","val":"Yes we do"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=tiger&match=COMPARE_CONTAINS\" target=\"tiger\" class=\"btn btn-primary\" >tiger</a>"},{"key":"Links","val":"0"}],"media":[],"cluster":false,"color":"#DE863F","edited":false,"expanded":false,"generated":false,"id":"dabvgiiacomment1","idType":"Comment","idVal":"dabvgiia-comment-1","imgUrl":null,"label":"Yes we do","name":"Yes we do","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=dabvgiia-comment-2&match=COMPARE_CONTAINS\" target=\"dabvgiia-comment-2\" class=\"btn btn-primary\" >dabvgiia-comment-2</a>"},{"key":"Comment Text","val":"@maxwell_2016 @maxwell @millennials4jeb I think we deserve the #BlackVote because we want to help them get jobs and succeed!"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=apk&match=COMPARE_CONTAINS\" target=\"apk\" class=\"btn btn-primary\" >apk</a>"},{"key":"Links","val":"0"}],"media":[],"cluster":false,"color":"#a90329","edited":false,"expanded":false,"generated":false,"id":"dabvgiiacomment2","idType":"Comment","idVal":"dabvgiia-comment-2","imgUrl":null,"label":"@maxwell_2016 @...","name":"@maxwell_2016 @...","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=zoolander&match=COMPARE_CONTAINS\" target=\"zoolander\" class=\"btn btn-primary\" >zoolander</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-h-a.akamaihd.net/hphotos-ak-xaf1/t51.2885-19/11007799_919386371445095_154120598_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"zoolander","idType":"USERNAME","idVal":"zoolander","imgUrl":null,"label":"zoolander","name":"zoolander","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=maxwell_2016&match=COMPARE_CONTAINS\" target=\"maxwell_2016\" class=\"btn btn-primary\" >maxwell_2016</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-f-a.akamaihd.net/hphotos-ak-xaf1/t51.2885-19/11023192_756192097809805_1739251287_a.jpg"}],"cluster":false,"color":"#a90329","edited":false,"expanded":false,"generated":false,"id":"maxwell2016","idType":"USERNAME","idVal":"maxwell_2016","imgUrl":null,"label":"maxwell_2016","name":"maxwell_2016","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"1) Open Media","val":"<a href=\"https://instagram.com/p/0dAbVGiia_/\" class=\"btn btn-primary\" target=\"0dAbVGiia_\" >0dAbVGiia_</a>"},{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=dabvgiia-comment-0&match=COMPARE_CONTAINS\" target=\"dabvgiia-comment-0\" class=\"btn btn-primary\" >dabvgiia-comment-0</a>"},{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=dabvgiia-comment-1&match=COMPARE_CONTAINS\" target=\"dabvgiia-comment-1\" class=\"btn btn-primary\" >dabvgiia-comment-1</a>"},{"key":"Comment","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=dabvgiia-comment-2&match=COMPARE_CONTAINS\" target=\"dabvgiia-comment-2\" class=\"btn btn-primary\" >dabvgiia-comment-2</a>"},{"key":"MEDIA","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=0dAbVGiia_&match=COMPARE_CONTAINS\" target=\"0dAbVGiia_\" class=\"btn btn-primary\" >0dAbVGiia_</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=apk&match=COMPARE_CONTAINS\" target=\"apk\" class=\"btn btn-primary\" >apk</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=zoolander&match=COMPARE_CONTAINS\" target=\"zoolander\" class=\"btn btn-primary\" >zoolander</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=benefit&match=COMPARE_CONTAINS\" target=\"benefit\" class=\"btn btn-primary\" >benefit</a>"},{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=maxwell_2016&match=COMPARE_CONTAINS\" target=\"maxwell_2016\" class=\"btn btn-primary\" >maxwell_2016</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://scontent.cdninstagram.com/hphotos-xpa1/t51.2885-15/s150x150/e15/10245926_578415055628926_1272683351_n.jpg"}],"cluster":false,"color":"#5D77C4","edited":false,"expanded":false,"generated":false,"id":"dabvgiia","idType":"MEDIA","idVal":"0dAbVGiia_","imgUrl":null,"label":"MEDIA 0dAbVGiia_","name":"MEDIA 0dAbVGiia_","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=benefit&match=COMPARE_CONTAINS\" target=\"benefit\" class=\"btn btn-primary\" >benefit</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://instagramimages-a.akamaihd.net/profiles/profile_48448780_75sq_1384153244.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"benefit","idType":"USERNAME","idVal":"benefit","imgUrl":null,"label":"benefit","name":"benefit","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false},{"bypass":null,"classes":null,"data":{"attrs":[{"key":"USERNAME","val":"<a href=\"graphene\\CombinedEntitySearchPage/?term=apk&match=COMPARE_CONTAINS\" target=\"apk\" class=\"btn btn-primary\" >apk</a>"},{"key":"Links","val":"0"}],"media":[{"key":"IMAGE","val":"https://igcdn-photos-c-a.akamaihd.net/hphotos-ak-xap1/t51.2885-19/10727494_1436652649960482_787656145_a.jpg"}],"cluster":false,"color":"#CF78D6","edited":false,"expanded":false,"generated":false,"id":"apk","idType":"USERNAME","idVal":"apk","imgUrl":null,"label":"apk","name":"apk","nbrLinks":0,"origin":false,"parentId":null,"reason":null,"size":16,"subNodes":null,"type":"circle","visible":true},"grabbable":true,"grabbed":false,"group":null,"locked":false,"position":null,"removed":false,"selectable":true,"selected":false}],"numEdges":11,"numNodes":9,"positionMapping":{},"strStatus":"Returning 9 nodes and 11 edges.","userId":null,"userName":null}
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>D3</title>
<!--"../../test/resources/textd3.json"-->
<style>
.link {
pointer-events: none;
stroke: #000;
}
.linkText {
font: 11px sans-serif;
text-achor: middle;
}
.node text {
pointer-events: none;
font: 11px sans-serif;
}
button {
position: relative;
}
</style>
<script src="http://d3js.org/d3.v3.min.js"></script>
</head>
<body>
<!--Defining the buttons-->
<button id="expand1" title="Expand the selected node.">EXPANDLOCAL</button>
<button id="hide" title="Hide the selected node and it's links.">HIDE</button>
<button id="unhide" title="Unhides all nodes and it's links.">UNHIDE</button>
<button id="delete" title="Delete the selected node and it's links.">DELETE</button>
<button id="merge" title="Merge selected nodes.">MERGE</button>
<button id="selected" title="Returns a list of selected nodes">SELECTED</button>
<script>
// Define the dimensions of the visualization.
var width = innerWidth,
height = innerHeight,
color = d3.scale.category20(),
root;
// Create an array logging what is connected to what
var linkedByIndex = { };
// Create the SVG container for the visualization and define its dimensions
var svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height);
var link = svg.selectAll(".link"),
node = svg.selectAll(".node"),
linkText;
// Mouse Event Variables
var selected_node = null,
selected_link = null,
mousedown_node = null,
mousedown_link = null,
mouseup_node = null;
// Create the force layout
var force = d3.layout.force()
.size([width, height])
.charge(-650)
.linkDistance(100);
// nodes and links variables
var edges = []; // Contains all edges
var nodes = []; // Contains all nodes
var nodesHash = {}; // Used for making nodes[] unique.
var selectedNodes = []; // Contains all nodes that are currently selected
var mergedNodesStore = [];
var mergedNodes = []; // Contains the Node Fusion of nodes.
var childEdges = []; // Contains the eges of the merged Nodes.
var mnCount = 0;
var merged;
// JSON vars
var jsonStack = {};
var jsonCount = 0;
var jsonPath1 = "graph.json";
var jsonPath2 = "graphexpand.json";
// Read in the JSON data.
d3.json(jsonPath1, function (error, json) {
// expands scope of json
// jsonStack[jsonCount] = json;
// root = jsonStack[jsonCount];
root = json;
console.log("Successfully loaded" + json);
//console.log(JSON.stringify(root));
establishGraph();
jsonCount += 1;
});
d3.select('#expand').on("click", function() { expandNode(); });
d3.select('#hide').on("click", function() {
d3.json(jsonPath2, function(error, json) {
// expands scope of json
root = json
establishGraph();
});
});
d3.select('#expand1').on("click", function() {
d3.json(jsonPath2, function(error, json) {
// expands scope of json
root = json
establishGraph();
});
});
d3.select('#hide').on("click", function() { hideNode(); });
d3.select('#unhide').on("click", function() { revealNode(); });
d3.select('#delete').on("click", function() { deleteNode(); });
d3.select('#merge').on("click", function() { mergeNode(); });
d3.select('#selected').on("click", function() {
var printSelected;
if(selectedNodes.length > 0) {
for (var i = 0; i < selectedNodes.length; i++) {
console.log(selectedNodes[i].data.id);
printSelected += selectedNodes[i].data.id + "\n"
}
alert("Selected Nodes: \n" + printSelected);
}
else alert("No node(s) selected");
});
function establishGraph() {
// pushes the NODE attributes in the JSON to the nodes array.
root.nodes.forEach(function(n) {
// if node already exists it does not get pushed to the nodes array.
if (!(n.data.id in nodesHash)) {
nodesHash[n.data['id']] = n;
nodes.push({
data: n.data,
selected: n.selected,
removed: n.removed
});
}
else console.log(n.data.id + "already exists.");
})
// sets the source and target to use id instead of index
root.edges.forEach(function(e) {
var sourceNode = nodes.filter(function(n) {
return n.data.id === e.data.source;
})[0],
targetNode = nodes.filter(function(n) {
return n.data.id === e.data.target;
})[0];
// push the EDGE attributes in the JSON to the edges array.
edges.push({
source: sourceNode,
target: targetNode,
data: e.data
});
});
force
.nodes(nodes)
.links(edges)
update();
}
function update() {
// refresh list of selected nodes
selectedNodes = nodes.filter(function(d) { return d.selected; });
// Update link data based on edges array.
link = link.data(edges);
// Create new links
link.enter().append("line")
.attr("class", "link")
.style("stroke-width", 1.5);
// Delete removed links
link.exit().remove();
// Update node data based on nodes array.
node = node.data(nodes);
// Create new nodes
node.enter().append("g")
.attr("class", "node")
.attr("id", function(d) { return d.data['id'] })
//.attr("fixed", function(d) { return d.fixed=true })
.call(force.drag)
.on('mouseover', connectedNodes)
.on('mouseleave', restore)
//.on('dblclick', highlight)
.on('dblclick', highlight);
// Delete removed nodes
node.exit().remove();
node.append("circle").attr("r", 11);
node.classed("selected", function(d) { return d === d.selected; })
// Node behavior for checking if the node is hidden.
node.style("visibility", function(d) {
if (d.data['visible'] === false){
console.log(d.data['id'] + " is hidden.")
return "hidden";
}
else {
return "visible";
}
});
// Node behavior for checking if selected otherwise colors nodes to color given from JSON.
node.style("fill", function(d) {
if (d.selected === false) {
console.log("Not Highlighting " + d.data['id'] + " selected is " + d.selected);
return d.data['color']
update();
}
else {
console.log("Highlighting " + d.data['id'] + " selected is " + d.selected);
return "yellow";
update();
}
}).select("circle").style("stroke", "black");
// Link color and visibility based on JSON data.
link.style("stroke", function(d) { return d.data['color'] })
.style("visibility", function(d) {
if (d.data['visible'] === false) {
console.log("what the")
return "hidden";
}
else {
console.log("alfdmlkgm")
return "visible";
}});
// Adds text to nodes
node.append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.style("fill", "black")
.text(function (d) { return d.data['label']; });
// Creates an index used to figure out neighbor nodes.
root.edges.forEach(function (d) {
linkedByIndex[d.data.source + "," + d.data.target] = 1;
});
// responsive behavior for graph based on window.
window.addEventListener('resize', resize);
force.on("tick", function() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
});
force.start();
}
// Returns a list of all nodes under the root.
function flatten(root) {
i = 0;
function recurse(node) {
if (node.children) node.children.forEach(recurse);
if (!node.id) node.id = ++i;
nodes.push(node);
}
recurse(root);
return nodes;
}
// This function looks up whether a pair are neighbours
function neighboring(a, b) {
return linkedByIndex[a.data.id + "," + b.data.id];
}
function connectedNodes() {
// Remember any changes done here must have an 'undo' in the restore() function.
d = d3.select(this).node().__data__;
// Changes to all but the neighboring nodes
node.style("opacity", function (o) { return neighboring(d, o) | neighboring(o, d) ? 1 : 0.1; })
.style("stroke", function (o) { return neighboring(d, o) | neighboring(o, d) ? "black" : "black"; });
// Changes to all but neighboring links
link.style("opacity", function (o) { return d.index==o.source.index | d.index==o.target.index ? 1 : 0.1; })
.style("stroke-width", function (o) { return d.index==o.source.index | d.index==o.target.index ? 2.5 : null; });
// Maintains opacity of selected node.
return d3.select(this).style("opacity", 1).select("circle")
.attr("r", 13);
}
function restore() {
node.style("opacity", 1)
.style("stroke", null)
.select("circle").attr("r", 11);
link.style("opacity", 1)
.style("stroke-width", 1.5);
}
// Movement of graph based on browser window resize.
function resize() {
width = window.innerWidth, height = window.innerHeight;
svg.attr("width", width).attr("height", height);
force.size([width, height]).resume();
}
function resetMouseVars() {
mousedown_node = null;
mouseup_node = null;
mousedown_link = null;
}
// Highlighting of selected node.
function highlight(d) {
// mousedown_node = d;
// if (selectedNodes.indexOf(mousedown_node) > -1) {
// console.log("De-Selected: " + mousedown_node.data['id']);
// mousedown_node.selected = false;
// }
// else {
// console.log("Selected: " + mousedown_node.data['id']);
// selectedNodes.push(mousedown_node);
// }
// resetMouseVars();
// update();
d.selected = !d.selected;
if (d.selected === false){
console.log("De-Selected: " + d.data['id']);
}
else console.log("Selected: " + d.data['id']);
update();
}
function expandNode() {
if (selectedNodes.length < 0) {
alert("No node or too many are selected.");
update();
}
else if (selected_node.length = 1) {
console.log("Expanding using: " + selected_node.data['id']);
ajaxCall(selected_node.data['id']);
}
}
// Delete node with prompt
function deleteNode() {
console.log("Prompted to delete selected nodes.");
if (confirm("Deleting selected element(s) will remove them from the graph entirely.\nAre you sure? (This cannot be undone).")) {
if (selectedNodes.length > 0) {
for (var i = 0; i < selectedNodes.length; i++) {
nodes.splice(nodes.indexOf(selectedNodes[i]), 1);
spliceLinksForNode(selectedNodes[i]);
}
}
else alert("No node(s) selected.");
update();
}
}
function spliceLinksForNode(node) {
toSplice = edges.filter(
function(e) {
return (e.source === node) || (e.target === node); });
toSplice.map(
function(e) {
edges.splice(edges.indexOf(e), 1); });
}
function hideLinksForNode(node) {
toSplice = edges.filter(
function(e) {
return (e.source === node) || (e.target === node); });
toSplice.map(
function(e) {
e.data['visible'] === false; });
}
/*
Create a new node X (for now give it a random label, some default position and use a timestamp Id)
Let X have a data field like List<Node> children
Let X have a data field like List<Edge> childEdges
For each selected node n:
Add n to the list of children
For each edge e in EDGES that touches n
Add e to childEdges, remove e from EDGES.
If e.target == n, create a new edge that goes from X to e.source
If e.source == n, create a new edge that goes from X to e.target
*/
function mergeNode() {
mergedNodesStore = [];
console.log("Attempting to merge nodes.");
// Check if at least 2 nodes are selected.
if (selectedNodes.length < 2) {
alert("Must select at least 2 or more nodes.");
}
else {
// Iterating through each of the selected nodes.
for (var i = 0; i < selectedNodes.length; i++) {
mergedNodesStore.push[selectedNodes[i]];
// Iterates through each of the edges to apply the old links to new merged node.
for (var j = 0; j < edges.length; j++) {
var mergedEdge;
if (selectedNodes[i].data.id === edges[j].data.source) {
mergedEdge = edges[j].data.target;
edges.push({
source: "MergedNode" + mnCount,
target: mergedEdge,
data: selectedNodes[i].data
});
}
else if (selectedNodes[i].data.id === edges[j].data.target) {
mergedEdge = edges[j].data.source;
edges.push({
source: "MergedNode" + mnCount,
target: mergedEdge,
data: selectedNodes[i].data
});
}
}
// Remove the merge nodes from the nodes array.
selectedNodes[i].removed = true;
nodes.splice(nodes.indexOf(selectedNodes[i]), 1);
spliceLinksForNode(selectedNodes[i]);
}
// Push the "MergeNode" to the mergeNodes array.
mergedNodes.push({
id: "MergedNode" + mnCount,
label: "MergedNode" + mnCount,
childrenNodes: mergedNodesStore,
// x: Math.random(),
// data: mergedNodesStore,
// index: nodes.length + 1
});
mnCount++;
}
insertMergeNodes();
}
function insertMergeNodes() {
// sets the source and target to use id instead of index
edges.forEach(function(e) {
var sourceNode = nodes.filter(function(n) {
return n.data.id === e.data.source;
})[0],
targetNode = nodes.filter(function(n) {
return n.data.id === e.data.target;
})[0];
// push the EDGE attributes in the JSON to the edges array.
edges.push({
source: sourceNode,
target: targetNode,
data: e.data
});
});
force
.nodes(mergedNodes)
.links(edges)
// Update link data based on edges array.
link = link.data(edges);
// Create new links
link.enter().append("line")
.attr("class", "link")
.style("stroke-width", 1.5);
// Delete removed links
link.exit().remove();
// Update node data based on nodes array.
merged = merged.data(mergedNodes);
// Create new nodes
merged.enter().append("g").start()
.attr("class", "node")
.attr("id", function(d) { return d.data['id'] })
//.attr("fixed", function(d) { return d.fixed=true })
.call(force.drag)
.on('mouseover', connectedNodes)
.on('mouseleave', restore)
//.on('dblclick', highlight)
.on('dblclick', highlight);
// Delete removed nodes
merged.exit().remove();
}
function unMergeNode() {
var date = new Date();
date.getTime();
}
function hideNode() {
// Checks if any nodes are selected.
if (selectedNodes.length > 0) {
// Iterates over all of the selected nodes.
for (var i = 0; i < selectedNodes.length; i++) {
// Sets the node visible attribute to false and removes the node from the selected array.
selectedNodes[i].data['visible'] = false;
selectedNodes[i].selected = false;
// Iterates through each of the edges to check visibility.
for (var j = 0; j < edges.length; j++) {
if (selectedNodes[i].data.id === edges[j].data.source || selectedNodes[i].data.id === edges[j].data.target) {
edges[j].data['visible'] = false;
}
}
}
}
else alert("No node(s) selected.");
update();
}
function revealNode() {
// nodes.forEach(function(d) {
// d.removed === false;
// });
for (var i = 0; i < nodes.length; i++) {
nodes[i].data['visible'] = true;
//spliceLinksForNode(selectedNodes[i]);
}
update();
}
function inputPromptBox() {
var mergedNodeName = prompt("Please enter the name of the merged node.", "example: mergednode1");
if (mergedNodeName != null) {
return mergedNodeName;
}
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment