Last active
August 29, 2015 14:21
-
-
Save joeycf/f021e60bb38846dcfaf2 to your computer and use it in GitHub Desktop.
d3 With Delete and Selection and Expansion
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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