Github Visualizer - GitHub рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣рд┐рд╕реНрдЯреНрд░реА рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд░реНрд╡рд┐рд╕

Code_swarm рдФрд░ gource рдЬреИрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗред рдПрдХ рджрд┐рди рдореБрдЭреЗ рдПрдХ рдореНрдпреВрдЬ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЧрд┐рдЯрд╣рдм рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
рдФрд░ рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рдиреНрдпрд╛рдпрд╛рд▓рдп рдореЗрдВ рдореЗрд░реЗ GitHub Visualizer рдкреНрд░реЛрдЬреЗрдХреНрдЯ ( GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ ) рдХреЛ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЗрдВрдЪрдХрд╕ рд╣реИред

рдФрд░ рдмрдбрд╝рд╛ рдЧрд┐рдл рдирд╣реАрдВ
рдЫрд╡рд┐

рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ



рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг


рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рддреАрди рдореБрдЦреНрдп рджреГрд╢реНрдп рд╣реИрдВ рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдЙрдирдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдорд╛рддреНрд░рд╛рддреНрдордХ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реВрдЪреА рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЧреНрд░рд╛рдл
рднрдВрдбрд╛рд░ рд╕реВрдЪреА


рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, D3.Layout.Force рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛
var force = d3.layout.force() .nodes(nodes) .size([width, height]) .gravity(.02) .charge(0) .on("tick", tick) .start(); function tick(e) { circle .each(cluster(10 * e.alpha * e.alpha)) .each(collide(.5)) .attr("cx", function(d) { return dx; }) .attr("cy", function(d) { return dy; }); } // Move d to be adjacent to the cluster node. function cluster(alpha) { var max = {}; // Find the largest node for each cluster. nodes.forEach(function(d) { if (!(d.color in max) || (d.radius > max[d.color].radius)) { max[d.color] = d; } }); return function(d) { var node = max[d.color], l, r, x, y, i = -1; if (node == d) return; x = dx - node.x; y = dy - node.y; l = Math.sqrt(x * x + y * y); r = d.radius + node.radius; if (l != r) { l = (l - r) / l * alpha; dx -= x *= l; dy -= y *= l; node.x += x; node.y += y; } }; } // Resolves collisions between d and all other circles. function collide(alpha) { var quadtree = d3.geom.quadtree(nodes); return function(d) { var r = d.radius + radius.domain()[1] + padding, nx1 = dx - r, nx2 = dx + r, ny1 = dy - r, ny2 = dy + r; quadtree.visit(function(quad, x1, y1, x2, y2) { if (quad.point && (quad.point !== d)) { var x = dx - quad.point.x, y = dy - quad.point.y, l = Math.sqrt(x * x + y * y), r = d.radius + quad.point.radius + (d.color !== quad.point.color) * padding; if (l < r) { l = (l - r) / l * alpha; dx -= x *= l; dy -= y *= l; quad.point.x += x; quad.point.y += y; } } return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1; }); }; } 



рджрд░рдЕрд╕рд▓, рдпрд╣ рд╡рд╣ рдореНрдпреВрдЬ рдерд╛ рдЬреЛ рдореБрдЭреЗ рджреЗрдЦрдиреЗ рдЧрдпрд╛ рдерд╛ред
рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реИред repo.js рдФрд░ langHg.js


рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╣рд┐рд╕реНрдЯреНрд░реА рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдХреЙрд▓рдо рдореЗрдВ рдпрд╛ рджреВрд╕рд░реА рд╕реНрдЯреЗрдЬ рдкреИрдирд▓ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдЖрдк рдпрд╣рд╛рдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рд╕реНрдЯреЗрдЬ рдЯреВ рдкреИрдирд▓
рдлрд┐рд░ "рд╡рд┐рд╢реНрд▓реЗрд╖рдг" рдмрдЯрди рджрдмрд╛рдХрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рдХрдорд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 100 рдХрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрд┐рддрдиреЗ рдХрдо рд╣реИрдВ)ред
рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдЧреНрд░рд╛рдл
рдЫрд╡рд┐


рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ d3.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдИ рдЯреВрд▓ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ d3.svg.area () рдШрдЯрдХ ( рд╕реНрдЯреИрдХреНрдб рдПрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг) рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдореИрдВ рдЦреБрдж рдХреЛ рд╕реНрдЯреИрдХ рдорд╛рдирддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рднреА рдбреА 3рдЬреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╣реИред
рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬрд╣рд╛рдБ рд╕реНрдЯреИрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
 var layers = [ { color: colors.deletedFile, values: sorted.map(function (d) { return {t : 1, x: d.date, y0 : 0, y: (d.stats ? -d.stats.fd : 0)} }) }, { color: colors.modifiedFile, values: sorted.map(function (d) { return {x: d.date, y0 : 0, y: (d.stats ? d.stats.fm : 0)} }) }, { color: colors.addedFile, values: sorted.map(function (d) { return {x: d.date, y0: (d.stats ? d.stats.fm : 0), y : (d.stats ? d.stats.fa : 0)} }) } ] ; function interpolateSankey(points) { var x0 = points[0][0], y0 = points[0][1], x1, y1, x2, path = [x0, ",", y0], i = 0, n = points.length; while (++i < n) { x1 = points[i][0]; y1 = points[i][1]; x2 = (x0 + x1) / 2; path.push("C", x2, ",", y0, " ", x2, ",", y1, " ", x1, ",", y1); x0 = x1; y0 = y1; } return path.join(""); } var y1 = d3.scale.linear() .range([h6 * 4.5, h6 * 3, h6 * 1.5]) .domain([-data.stats.files, 0, data.stats.files]), area = d3.svg.area() .interpolate(interpolateSankey /*"linear" "basis"*/) .x(function(d) { return x(dx); }) .y0(function(d) { return y1(d.y0); }) .y1(function(d) { return y1(d.y0 + dy); }) ; 


рдЖрд░реНрдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ d3.svg.arc () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ( рдРрд╕реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрд░реНрдХ рдЯрд┐рд╡реЗрди , рдкрд╛рдИ рдорд▓реНрдЯреАрдкрд▓реНрд╕ )ред
рдореИрдВ рджреЛ рдШрдЯрдХреЛрдВ d3.time.scale () рдФрд░ d3.svg.axis рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕ рдкреИрдорд╛рдиреЗ рдХреА рдкреАрдврд╝реА рдХрд░рддрд╛ рд╣реВрдВ ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдХрд╕реНрдЯрдо рд╕рдордп рдкреНрд░рд╛рд░реВрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдЖрд░реЗрдЦ рдХреА рдЧрдгрдирд╛ d3.layout.pack () ( рд╕рд░реНрдХрд▓ рдкреИрдХрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг) рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд▓рдХреЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реЙрд░реНрдЯ рдФрд░ рдореВрд▓реНрдп рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реВрдВред
рдЗрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЛ рдлрд╛рдЗрд▓реЛрдВ рд╕реНрдЯреЗрдЯ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ редjs рдФрд░ usercommit.js


рдЧрддрд┐рд╢реАрд▓ рджреГрд╢реНрдп

рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдПрдХ рдЙрджреНрдпрдо рдерд╛ред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЬрдм рдЖрдк code_swarm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ, рдореИрдВрдиреЗ рдЙрди рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдХреЛрдб_рд╕реНрд╡рд░реНрдо рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдордХреНрдЦреА рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред
рдЧреАрдд-рдСрдл-рдЧрд┐рддреБрдм рдХрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рд▓реЙрдиреНрдЪрд░ рд▓рд┐рдВрдХ , рд╣рдмрд░рд╛рд╣рдмреНрд░ рдкрд░ рдЧреАрдд-рдСрдлрд╝-рдЧрд┐рддреБрдм рдкрд░ рдЕрдиреБрдЪреНрдЫреЗрдж
рдЫрд╡рд┐



рдХреБрдЦреНрдпрд╛рдд D3.Layout.Force рджреНрд╡рд╛рд░рд╛ рднреМрддрд┐рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рдЪреВрдХ рдХреЗ рд╕рд╛рде рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рд╣реИрдВред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ author рдЧреБрдг рд╣реЛрддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдордп) рдпрд╣ рд▓рд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреА рд╣реИред
рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди
  function tick() { if (_force.nodes()) { _force.nodes() .forEach(cluster(0.025)); _forceAuthor.nodes( _forceAuthor.nodes() .filter(function(d) { blink(d, !d.links && setting.userLife > 0); if (d.visible && d.links === 0 && setting.userLife > 0) { d.flash = 0; d.alive = d.alive / 10; } return d.visible; }) ); } _forceAuthor.resume(); _force.resume(); } // Move d to be adjacent to the cluster node. function cluster(alpha) { authorHash.forEach(function(k, d) { d.links = 0; }); return function(d) { blink(d, setting.fileLife > 0); if (!d.author || !d.visible) return; var node = d.author, l, r, x, y; if (node == d) return; node.links++; x = dx - node.x; y = dy - node.y; l = Math.sqrt(x * x + y * y); r = radius(nr(d)) / 2 + (nr(node) + setting.padding); if (l != r) { l = (l - r) / (l || 1) * (alpha || 1); x *= l; y *= l; dx -= x; dy -= y; } }; } 

рдФрд░ рдмрд▓ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рд╕реНрдерд╛рди
 _force = (_force || d3.layout.force() .stop() .size([w, h]) .friction(.75) .gravity(0) .charge(function(d) {return -1 * radius(nr(d)); } ) .on("tick", tick)) .nodes([]) ; ..... _forceAuthor = (_forceAuthor || d3.layout.force() .stop() .size([w, h]) .gravity(setting.padding * .001) .charge(function(d) { return -(setting.padding + d.size) * 8; })) .nodes([]) ; 


рджреЛ рд╕реВрддреНрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдореИрдВ рдРрд╕рд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ), рдПрдХ рд╕реЗрдЯ рд╣реИ setInterval рджреВрд╕рд░рд╛ requestAnimationFrame ред рдкрд╣рд▓рд╛ рд╕рдордп рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд▓ рдХреА рдЕрдкрдиреА рдЯрд╛рдЗрдорд░ рдФрд░ asyncForEach рднреА рд╣реЛрддреА рд╣реИ (рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЛ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдмрд╛рд╣рд░ рди рдирд┐рдХрд▓реЗрдВ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рджреЗрд░реА рдХреЗ рд╕рд╛рде) рднреА рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИред
рдЖрдк show.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐


рдореБрдЭреЗ api.github.com рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред
JSONP рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
GitHub API рдХреЗ рдЕрдиреБрд╕рд╛рд░ , Client_id рдФрд░ Client_Secret рдХрд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реАрдорд╛ рдПрдХ рдЖрдИрдкреА рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП 60 рд╣реЛрдЧреАред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ GitHub рдкрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣реА рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реИ ... рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ 5000 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдз, рдПрдорд╕реА рдЬреИрд╕реА рдХреБрдЫ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рдЗрддрд┐рд╣рд╛рд╕ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕реАрдорд╛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдиреВ client_secret рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ client_id рдФрд░ client_secret рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
GitHub рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдПрдкреАрдЖрдИ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЖрдЗрдП рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ api.github.com/users{user} api.github.com/users{user} рдЕрдиреНрдп рд╕рднреА рд▓рд┐рдВрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдпрд╣ рдПрдХ рдмрд╣реБ-рдкреГрд╖реНрда рдЕрдиреБрд░реЛрдз рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ 10 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ), рддреЛ meta рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреВрд░реНрдг рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдПрдкреАрдЖрдИ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд▓рд┐рдЦрд╛, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЦреБрд╢реА рдХреА рдмрд╛рдд рд╣реИред
рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдПрдХ рд╕рдореГрджреНрдз рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП D3js рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ (рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рд╢рд╛рдпрдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реЛрдЧрд╛) рдФрд░ рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди ред

рдирд┐рд╖реНрдХрд░реНрд╖


рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЦрд┐рд▓реМрдирд╛ рдерд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдРрд╕рд╛ рд╣реА рд░рд╣рд╛ред рдпрджрд┐ рдЖрдк рдореЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдирдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирд┐рд╡реЗрджрди рдЫреЛрдбрд╝реЗрдВ рдпрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ Google Chrome dev-m (рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рддрдп рдХреА рдЧрдИ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛), рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рд╕реНрд╡рд╕реНрде рдЖрд▓реЛрдЪрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!


рдкреБрдирд╢реНрдЪ
рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА:

Source: https://habr.com/ru/post/In174375/


All Articles