summary refs log tree commit diff
path: root/graph.js
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-01-04 22:10:49 +0100
committerLudovic Courtès <ludo@gnu.org>2021-01-04 23:54:16 +0100
commit10612d61540228d48c998ba5b56f50da22534157 (patch)
tree7ac40f6a244fbd9e95bcbb94330b5d8c6d22965c /graph.js
parentfa42774742fb1ddcb9f9424d8150d26f4033d426 (diff)
downloadguix-10612d61540228d48c998ba5b56f50da22534157.tar.gz
graph: Install JavaScript files.
Until now, 'guix graph --backend=d3js' wouldn't work outside the build
tree.

* d3.v3.js: Move to...
* guix/d3.v3.js: ... here.
* graph.js: Move to...
* guix/graph.js: ... here.
* Makefile.am (nobase_dist_guilemodule_DATA): Add them.
(EXTRA_DIST): Remove them.
* guix/graph.scm (emit-d3js-prologue, emit-d3js-epilogue): Adjust
'search-path' argument accordingly.
* guix/self.scm (compiled-guix)[*extra-modules*]: Pass them via #:extra-files.
Diffstat (limited to 'graph.js')
-rw-r--r--graph.js129
1 files changed, 0 insertions, 129 deletions
diff --git a/graph.js b/graph.js
deleted file mode 100644
index ad8279395d..0000000000
--- a/graph.js
+++ /dev/null
@@ -1,129 +0,0 @@
-// GNU Guix --- Functional package management for GNU
-// Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
-//
-// This file is part of GNU Guix.
-//
-// GNU Guix is free software; you can redistribute it and/or modify it
-// under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 3 of the License, or (at
-// your option) any later version.
-//
-// GNU Guix is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-var outerRadius = Math.max(nodeArray.length * 15, 500) / 2,
-    innerRadius = outerRadius - Math.min(nodeArray.length * 5, 200),
-    width = outerRadius * 2,
-    height = outerRadius * 2,
-    colors = d3.scale.category20c(),
-    matrix = [];
-
-function neighborsOf (node) {
-    return links.filter(function (e) {
-        return e.source === node;
-    }).map(function (e) {
-       return e.target;
-    });
-}
-
-function zoomed () {
-    zoomer.attr("transform",
-                "translate(" + d3.event.translate + ")" +
-                "scale(" + d3.event.scale + ")");
-}
-
-function fade (opacity, root) {
-    return function (g, i) {
-        root.selectAll("g path.chord")
-            .filter(function (d) {
-                return d.source.index != i && d.target.index != i;
-            })
-            .transition()
-            .style("opacity", opacity);
-    };
-}
-
-// Now that we have all nodes in an object we can replace each reference
-// with the actual node object.
-links.forEach(function (link) {
-  link.target = nodes[link.target];
-  link.source = nodes[link.source];
-});
-
-// Construct a square matrix for package dependencies
-nodeArray.forEach(function (d, index, arr) {
-    var source = index,
-        row = matrix[source];
-    if (!row) {
-        row = matrix[source] = [];
-        for (var i = -1; ++i < arr.length;) row[i] = 0;
-    }
-    neighborsOf(d).forEach(function (d) { row[d.index]++; });
-});
-
-// chord layout
-var chord = d3.layout.chord()
-    .padding(0.01)
-    .sortSubgroups(d3.descending)
-    .sortChords(d3.descending)
-    .matrix(matrix);
-
-var arc = d3.svg.arc()
-    .innerRadius(innerRadius)
-    .outerRadius(innerRadius + 20);
-
-var zoom = d3.behavior.zoom()
-    .scaleExtent([0.1, 10])
-    .on("zoom", zoomed);
-
-var svg = d3.select("body").append("svg")
-    .attr("width", "100%")
-    .attr("height", "100%")
-    .attr('viewBox', '0 0 ' + Math.min(width, height) + ' ' + Math.min(width, height))
-    .attr('preserveAspectRatio', 'xMinYMin')
-    .call(zoom);
-
-var zoomer = svg.append("g");
-
-var container = zoomer.append("g")
-    .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")");
-
-// Group for arcs and labels
-var g = container.selectAll(".group")
-    .data(chord.groups)
-    .enter().append("g")
-    .attr("class", "group")
-    .on("mouseout", fade(1, container))
-    .on("mouseover", fade(0.1, container));
-
-// Draw one segment per package
-g.append("path")
-    .style("fill",   function (d) { return colors(d.index); })
-    .style("stroke", function (d) { return colors(d.index); })
-    .attr("d", arc);
-
-// Add circular labels
-g.append("text")
-    .each(function (d) { d.angle = (d.startAngle + d.endAngle) / 2; })
-    .attr("dy", ".35em")
-    .attr("transform", function (d) {
-      return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")"
-          + "translate(" + (innerRadius + 26) + ")"
-          + (d.angle > Math.PI ? "rotate(180)" : "");
-    })
-    .style("text-anchor", function (d) { return d.angle > Math.PI ? "end" : null; })
-    .text(function (d) { return nodeArray[d.index].label; });
-
-// Draw chords from source to target; color by source.
-container.selectAll(".chord")
-    .data(chord.chords)
-    .enter().append("path")
-    .attr("class", "chord")
-    .style("stroke", function (d) { return d3.rgb(colors(d.source.index)).darker(); })
-    .style("fill", function (d) { return colors(d.source.index); })
-    .attr("d", d3.svg.chord().radius(innerRadius));