about summary refs log tree commit diff
path: root/gn/packages/javascript.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gn/packages/javascript.scm')
-rw-r--r--gn/packages/javascript.scm656
1 files changed, 497 insertions, 159 deletions
diff --git a/gn/packages/javascript.scm b/gn/packages/javascript.scm
index 40246dd..465259a 100644
--- a/gn/packages/javascript.scm
+++ b/gn/packages/javascript.scm
@@ -1,203 +1,541 @@
 (define-module (gn packages javascript)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages)
+  #:use-module (gn packages web)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
-  #:use-module (guix utils)
-  #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1))
 
 ;; see color-make package for great example - also install-file and invoke
 
 (define-public javascript-twitter-post-fetcher
-  (let ((commit "27440ffebd4c1ba7abc9aec92a581155715f2e4e"))
+  (let ((commit "8f9e667e917b3c581b100bf2ccc7157aadc5ff43") ; April 30, 2019
+        (revision "1"))
     (package
-     (name "javascript-twitter-post-fetcher")
-     (version (string-append "17.0.3" "-" (string-take commit 7)))
-     (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/jasonmayes/Twitter-Post-Fetcher.git")
-                    (commit commit)))
-              (file-name (string-append name "-" commit))
-              (sha256
-               (base32
-                "159z8izf510086d8sa79k4mml6sw1gycb1r1r9ri1kyw2k9knmqa"))))
-     (build-system trivial-build-system)
-     (native-inputs `(("source" ,source)))
-     (arguments
-      `(#:modules ((guix build utils))
-        #:builder
-        (let* ((out (assoc-ref %outputs "out"))
-               (name "Twitter-Post-Fetcher")
-               (targetdir (string-append out "/share/genenetwork2/javascript/" name))
-               )
-          (begin
-            (use-modules (guix build utils))
-            (let ((source (assoc-ref %build-inputs "source"))
-                  )
-              (and
-                                        ; (mkdir-p targetdir)
-               (copy-recursively source targetdir)
-               ))))))
-     (home-page "http://jasonmayes.com/projects/twitterApi/")
-     (synopsis "Twitter post fetching")
-     (description "Twitter post fetching.")
-     (license license:expat))))
+      (name "javascript-twitter-post-fetcher")
+      (version (git-version "18.0.2" revision commit)) ; April 3, 2018
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/jasonmayes/Twitter-Post-Fetcher.git")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0n935qmmd9gijkklrps8qimplbskcrijds3076zfd28afxrr96wp"))))
+      (build-system trivial-build-system)
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/" ,name))
+                (source (assoc-ref %build-inputs "source")))
+           (begin
+             (use-modules (guix build utils))
+             (copy-recursively source targetdir)
+             (install-file (string-append source "/License.txt")
+                           (string-append out "/share/doc/" ,name "-" ,version))))))
+      (native-inputs `(("source" ,source)))
+      (home-page "http://jasonmayes.com/projects/twitterApi/")
+      (synopsis "Twitter post fetching")
+      (description "Allows you to get your tweets displaying on your website
+using JavaScript, without using new Twitter 1.1 API.")
+      (license license:expat))))
 
 (define-public javascript-cytoscape
   (package
     (name "javascript-cytoscape")
-    (version "2.7.8") ; ancient version
+    (version "3.8.1") ; July 9, 2019
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/cytoscape/cytoscape.js/archive/v" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/cytoscape/cytoscape.js")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "08ks2nd7ccmdmahn151i180pvhn4vdzgpw99g4g4f2baz9pkz4w3"))))
+        (base32
+         "1dnwvmghwq21g9ag5cj49l0wnyfc54kbsrj0byii5wbwljjg9826"))))
     (build-system trivial-build-system)
-    (native-inputs `(("gzip" ,gzip)
-                     ("tar" ,tar)
-                     ("source" ,source)))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
        (begin
          (use-modules (guix build utils))
          (let* ((out (assoc-ref %outputs "out"))
-                (tarcmd (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
                 (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape"))
-                (source (assoc-ref %build-inputs "source")))
-           (setenv "PATH" (string-append
-                           (assoc-ref %build-inputs "tar") "/bin" ":"
-                           (assoc-ref %build-inputs "gzip") "/bin"))
-           (invoke "tar" "xvf" (assoc-ref %build-inputs "source") "--strip-components=1")
-           (mkdir-p targetdir)
-           (copy-recursively "dist" targetdir)
-           ))))
+                (source (assoc-ref %build-inputs "source"))
+                (dist (string-append source "/dist")))
+           (copy-recursively dist targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (home-page "https://js.cytoscape.org/")
+    (synopsis "Graph theory (network) library for visualisation and analysis")
+    (description "Cytoscape.js is a fully featured graph theory library.  Do you
+need to model and/or visualise relational data, like biological data or social
+networks? If so, Cytoscape.js is just what you need.
 
-    (home-page "https://github.com/cytoscape/cytoscape.js")
-    (synopsis "Cytoscape.js")
-    (description "Cytoscape.")
+Cytoscape.js contains a graph theory model and an optional renderer to display
+interactive graphs.  This library was designed to make it as easy as possible
+for programmers and scientists to use graph theory in their apps, whether it's
+for server-side analysis in a Node.js app or for a rich user interface.")
     (license license:expat)))
 
+(define-public javascript-cytoscape-2
+  (package
+    (inherit javascript-cytoscape)
+    (name "javascript-cytoscape")
+    (version "2.7.29")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/cytoscape/cytoscape.js")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "00y0h6kdkw2x6lyf9c16fxmg8iagfl77dz8nqb337v3ljifkb4z8"))))))
+
 (define-public javascript-cytoscape-panzoom
   (package
-   ;; (inherit javascript-cytoscape)
-   (name "javascript-cytoscape-panzoom")
-   (version "2.5.2") ; ancient version
-   (source
-    (origin
-     (method url-fetch)
-     (uri (string-append "https://github.com/cytoscape/cytoscape.js-panzoom/archive/" version ".tar.gz"))
-     (file-name (string-append name "-" version ".tar.gz"))
-     (sha256
-      (base32 "154xzi693gbv89y221gkpi03k84lccmr55v5z43mn1i1s1fdhm2b"))))
-   (inputs `(("javascript-cytoscape" ,javascript-cytoscape)))
-   (build-system trivial-build-system)
-   (native-inputs `(("gzip" ,gzip)
-                    ("tar" ,tar)
-                    ("source" ,source)))
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-      (begin
-        (use-modules (guix build utils))
-        (let* ((out (assoc-ref %outputs "out"))
-               (tarcmd (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
-               (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape-panzoom"))
-               (source (assoc-ref %build-inputs "source")))
-          (setenv "PATH" (string-append
-                          (assoc-ref %build-inputs "tar") "/bin" ":"
-                          (assoc-ref %build-inputs "gzip") "/bin"))
-          (invoke "tar" "xvf" (assoc-ref %build-inputs "source") "--strip-components=1")
-          (mkdir-p targetdir)
-          (install-file "cytoscape-panzoom.js" targetdir)
-          (install-file "cytoscape.js-panzoom.css" targetdir)
-          ))))
-    (home-page "https://github.com/cytoscape/cytoscape.js")
-    (synopsis "Cytoscape.js")
-    (description "Cytoscape.")
+    (name "javascript-cytoscape-panzoom")
+    (version "2.5.3") ; August 21, 2018
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/cytoscape/cytoscape.js-panzoom")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1lzcsip6q44h14g5l4jciv5sfc7ilvg1yrd14lcji8mnq6akx16n"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape-panzoom"))
+                (source (assoc-ref %build-inputs "source")))
+           (install-file (string-append source "/cytoscape-panzoom.js") targetdir)
+           (install-file (string-append source "/cytoscape.js-panzoom.css") targetdir)))))
+    (native-inputs `(("source" ,source)))
+    ;; TODO: Add font-awsome?
+    (propagated-inputs
+     `(("javascript-cytoscape" ,javascript-cytoscape)
+       ("jquery" ,web-jquery)))
+    (home-page "https://github.com/cytoscape/cytoscape.js-panzoom/")
+    (synopsis "Panzoom extension for Cytoscape.js")
+    (description "This extension creates a widget that lets the user pan and
+zoom about a Cytoscape.js graph.  This complements the built-in gesture support
+for panning and zooming in Cytoscape.js by giving less savvy users a more
+traditional UI -- similar to controls on map webapps.")
+    (license license:expat)))
+
+(define-public javascript-dagre
+  (package
+    (name "javascript-dagre")
+    (version "0.8.4") ; Dec. 9, 2018
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/dagrejs/dagre.git")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1svlvd66bnskicqb7kizx57s97z9lkxssh1g5sgymw7ddfdbhy5l"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/dagre"))
+                (source (assoc-ref %build-inputs "source"))
+                (dist (string-append source "/dist")))
+           (copy-recursively dist targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (home-page "https://github.com/dagrejs/dagre")
+    (synopsis "Directed graph layout for JavaScript")
+    (description "Dagre is a JavaScript library that makes it easy to lay out
+directed graphs on the client-side.")
+    (license license:expat)))
+
+(define-public javascript-cytoscape-dagre
+  (package
+    (name "javascript-cytoscape-dagre")
+    (version "2.2.2") ; Sept. 26, 2018
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/cytoscape/cytoscape.js-dagre")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0z0sh5q5cd0iirdyhlln83vmsvwn1sbh4zdmdh8k5hld075g4q64"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape-dagre"))
+                (source (assoc-ref %build-inputs "source")))
+           (install-file (string-append source "/cytoscape-dagre.js") targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (propagated-inputs
+     `(("javascript-cytoscape" ,javascript-cytoscape)
+       ("javascript-dagre" ,javascript-dagre)))
+    (home-page "https://github.com/cytoscape/cytoscape.js-dagre")
+    (synopsis "Dagre layout for DAGs and trees for Cytoscape.js")
+    (description "The dagre layout organises the graph using a @dfn{directed
+acyclic graph} (DAG) system, written by Chris Pettitt.  It is especially
+suitable for DAGs and trees.")
     (license license:expat)))
 
-;; https://github.com/cytoscape/cytoscape.js-qtip/archive/2.7.1.tar.gz
+;; Author recommends using cytoscape-popper with tippy.js since qtip2 is no longer maintained
 (define-public javascript-cytoscape-qtip
   (package
-   ;; (inherit javascript-cytoscape)
-   (name "javascript-cytoscape-qtip")
-   (version "2.7.1") ; ancient version
-   (source
-    (origin
-     (method url-fetch)
-     (uri (string-append "https://github.com/cytoscape/cytoscape.js-qtip/archive/" version ".tar.gz"))
-     (file-name (string-append name "-" version ".tar.gz"))
-     (sha256
-      (base32 "0f2qhxi9qx5r3rcmxqgdqnwd9apnjlb4s4hckwhaqgsp6rf8lzlb"))))
-   (inputs `(("javascript-cytoscape" ,javascript-cytoscape)))
-   (build-system trivial-build-system)
-   (native-inputs `(("gzip" ,gzip)
-                    ("tar" ,tar)
-                    ("source" ,source)))
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-      (begin
-        (use-modules (guix build utils))
-        (let* ((out (assoc-ref %outputs "out"))
-               (tarcmd (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
-               (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape-qtip"))
-               (source (assoc-ref %build-inputs "source")))
-          (setenv "PATH" (string-append
-                          (assoc-ref %build-inputs "tar") "/bin" ":"
-                          (assoc-ref %build-inputs "gzip") "/bin"))
-          (invoke "tar" "xvf" (assoc-ref %build-inputs "source") "--strip-components=1")
-          (mkdir-p targetdir)
-          (install-file "cytoscape-qtip.js" targetdir)
-          ))))
+    (name "javascript-cytoscape-qtip")
+    (version "2.7.1") ; May 4, 2017
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/cytoscape/cytoscape.js-qtip")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1rdwdkx9j1lqzks8gi8ilkcbryswdx653569av4i74pv4j93v6zx"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape-qtip"))
+                (source (assoc-ref %build-inputs "source")))
+           (install-file (string-append source "/cytoscape-qtip.js") targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (propagated-inputs ; TODO: Add qtip
+     `(("javascript-cytoscape" ,javascript-cytoscape)
+       ("jquery" ,web-jquery)))
     (home-page "https://github.com/cytoscape/cytoscape.js")
-    (synopsis "Cytoscape.js")
+    (synopsis "Cytoscape.js extension that wraps the QTip jQuery library")
     (description "Cytoscape.")
     (license license:expat)))
 
-;; https://github.com/DataTables/DataTables/archive/1.10.12.tar.gz
+(define-public javascript-cytoscape-popper
+  (package
+    (name "javascript-cytoscape-popper")
+    (version "1.0.4") ; Feb 13, 2019
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/cytoscape/cytoscape.js-popper")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0nb59cimzp6zprk0czrfkc6id70ia2gg8drgmd55nf3yspn4b5rj"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/cytoscape-popper"))
+                (source (assoc-ref %build-inputs "source")))
+           (install-file (string-append source "/cytoscape-popper.js") targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (propagated-inputs `(("javascript-cytoscape" ,javascript-cytoscape)))
+    (home-page "https://github.com/cytoscape/cytoscape.js-popper")
+    (synopsis "Cytoscape.js extension for integrating Popper.js")
+    (description "Popper.js allows you to dynamically align a div, e.g. a
+tooltip, to another element in the page.  This extension allows you to use
+Popper.js on Cytoscape elements.  This allows you to create DOM elements
+positioned on or around Cytoscape elements.  It is useful for tooltips and
+overlays, for example.")
+    (license license:expat)))
+
+(define-public javascript-qtip2
+  (package
+    (name "javascript-qtip2")
+    (version "3.0.3") ; May 11, 2016
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/qTip2/qTip2.git")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "06lmmy6mqbfdgbbyjm0v2bl1ifdv03rh6vqnsmmkn1s56kd2qr62"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/qtip2"))
+                (source (assoc-ref %build-inputs "source"))
+                (dist (string-append source "/dist")))
+           (copy-recursively dist targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (home-page "http://qtip2.com/")
+    (synopsis "Pretty powerful tooltips")
+    (description "The second generation of the advanced qTip plugin for the
+ever popular jQuery framework.")
+    (license license:expat)))
+
 (define-public javascript-datatables
   (package
-   (name "javascript-datatables")
-   (version "1.10.12") ; ancient version
-   (source
-    (origin
-     (method url-fetch)
-     (uri (string-append "https://github.com/DataTables/DataTables/archive/" version ".tar.gz"))
-     (file-name (string-append name "-" version ".tar.gz"))
-     (sha256
-      (base32 "0blzsd2zqmvnqi6pl1xq0dr457kjrdaaa86d2cmdakls0j2mj92s"))))
-   (inputs `(("javascript-cytoscape" ,javascript-cytoscape)))
-   (build-system trivial-build-system)
-   (native-inputs `(("gzip" ,gzip)
-                    ("tar" ,tar)
-                    ("source" ,source)))
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-      (begin
-        (use-modules (guix build utils))
-        (let* ((out (assoc-ref %outputs "out"))
-               (tarcmd (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
-               (targetdir (string-append out "/share/genenetwork2/javascript/DataTables"))
-               (source (assoc-ref %build-inputs "source")))
-          (setenv "PATH" (string-append
-                          (assoc-ref %build-inputs "tar") "/bin" ":"
-                          (assoc-ref %build-inputs "gzip") "/bin"))
-          (invoke "tar" "xvf" (assoc-ref %build-inputs "source") "--strip-components=1")
-          (mkdir-p targetdir)
-           (copy-recursively "media" targetdir)
-          ))))
-    (home-page "https://github.com/DataTables/")
-    (synopsis "Datatables")
-    (description "Datatables.")
+    (name "javascript-datatables")
+    (version "1.10.19") ; June 22, 2018
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/DataTables/DataTables.git")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0p85xzcvfjdrs4nwj7lhnlw2dmyky0hkwy8bzjw2fdabmsrdpwyg"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/DataTables"))
+                (source (assoc-ref %build-inputs "source"))
+                (media (string-append source "/media")))
+           (copy-recursively media targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (propagated-inputs `(("javascript-cytoscape" ,javascript-cytoscape)))
+    (home-page "https://www.datatables.net/")
+    (synopsis "Tables plug-in for jQuery")
+    (description "DataTables is a table enhancing plug-in for the jQuery
+Javascript library, adding sorting, paging and filtering abilities to plain HTML
+tables with minimal effort.")
+    (license license:expat)))
+
+(define-public javascript-lodash
+  (package
+    (name "javascript-lodash")
+    (version "4.17.15") ; July 17, 2019
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/lodash/lodash")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1hp04cg3b59j3dpnvzixd5p6wpv34mj2pnq8wp60csv3p2s0qk4y"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/lodash"))
+                (source (assoc-ref %build-inputs "source"))
+                (dist (string-append source "/dist")))
+           (copy-recursively dist targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (home-page "https://lodash.com")
+    (synopsis "JavaScript utility library delivering modularity, performance & extras")
+    (description "Lodash makes JavaScript easier by taking the hassle out of
+working with arrays, numbers, objects, strings, etc. Lodash's modular methods
+are great for:
+@enumerate
+@item Iterating arrays, objects, & strings
+@item Manipulating & testing values
+@item Creating composite functions
+@end enumerate")
+    (license license:expat)))
+
+(define-public javascript-d3js
+  (package
+    (name "javascript-d3js")
+    (version "5.9.7")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://github.com/d3/d3/releases/download/v"
+                            version "/d3.zip"))
+        (sha256
+         (base32 "0vg1cfgg7p897bg0nhaprgr77kgvi8k38h5w6sl54nxvibvynkhc"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (name "d3js")
+                (unzip (string-append (assoc-ref %build-inputs "unzip")
+                                      "/bin/unzip"))
+                (targetdir (string-append out "/share/genenetwork/javascript/" name))
+                (source (assoc-ref %build-inputs "source")))
+           (invoke unzip source)
+           (install-file "d3.js" targetdir)
+           (install-file "d3.min.js" targetdir)
+           (install-file "LICENSE" (string-append out "/share/doc/d3js-" ,version))))))
+    (native-inputs
+     `(("source" ,source)
+       ("unzip" ,unzip)))
+    (home-page "https://d3js.org/")
+    (synopsis "JavaScript library for visualizing data")
+    (description "D3.js is a JavaScript library for manipulating documents based
+on data.  D3 helps you bring data to life using HTML, SVG, and CSS.  D3's
+emphasis on web standards gives you the full capabilities of modern browsers
+without tying yourself to a proprietary framework, combining powerful
+visualization components and a data-driven approach to DOM manipulation.")
+    (license license:bsd-3)))
+
+(define-public javascript-d3js-4
+  (package
+    (inherit javascript-d3js)
+    (version "4.13.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://github.com/d3/d3/releases/download/v"
+                            version "/d3.zip"))
+        (sha256
+         (base32 "06yqgyvkpvh0lg7rsh4hjzq72fylkd8ziqcf7yhgy510x0mqla19"))))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (name "d3js")
+                (unzip (string-append (assoc-ref %build-inputs "unzip")
+                                      "/bin/unzip"))
+                (targetdir (string-append out "/share/genenetwork/javascript/" name))
+                (source (assoc-ref %build-inputs "source")))
+           (invoke unzip source)
+           (install-file "d3.js" targetdir)
+           (install-file "d3.min.js" targetdir)
+           (install-file "LICENSE" (string-append out "/share/doc/d3js-" ,version))))))))
+
+(define-public javascript-d3js-multi
+  (package
+    (name "javascript-d3js-multi")
+    (version "1.0.1") ; Feb, 21, 2017
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://github.com/d3/d3-selection-multi/releases"
+                            "/download/v" version "/d3-selection-multi.zip"))
+        (sha256
+         (base32 "0k89n15ggpzsvf7qflmsagkrrhigk6nksdyks0ccx3453gizbb4q"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (name "d3js-multi")
+                (unzip (string-append (assoc-ref %build-inputs "unzip")
+                                      "/bin/unzip"))
+                (targetdir (string-append out "/share/genenetwork/javascript/" name))
+                (source (assoc-ref %build-inputs "source")))
+           (invoke unzip source)
+           (install-file "d3-selection-multi.js" targetdir)
+           (install-file "d3-selection-multi.min.js" targetdir)
+           (install-file "LICENSE" (string-append out "/share/doc/" ,name "-" ,version))))))
+    (native-inputs
+     `(("source" ,source)
+       ("unzip" ,unzip)))
+    (home-page "https://d3js.org/")
+    (synopsis "Multi-value syntax for d3-selection and d3-transition")
+    (description "This module adds multi-value syntax to selections and
+transitions, allowing you to set multiple attributes, styles or properties
+simultaneously with more concise syntax.")
+    (license license:bsd-3)))
+
+(define-public javascript-canvas-toblob
+  (let ((commit "f1a01896135ab378aa5c0118eadd81da55e698d8") ; May 26, 2016
+        (revision "1"))
+    (package
+      (name "javascript-canvas-toblob")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/eligrey/canvas-toBlob.js")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "1ly7qnavf9h26sgynccf00hf2ybdwyn0kvnl7i3milz3big02qdm"))))
+      (build-system trivial-build-system)
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+           (let* ((out (assoc-ref %outputs "out"))
+                  (name "canvas-toblob")
+                  (targetdir (string-append out "/share/genenetwork/javascript/" name))
+                  (source (assoc-ref %build-inputs "source")))
+             (install-file (string-append source "/canvas-toBlob.js") targetdir)
+             (install-file (string-append source "/LICENSE.md")
+                           (string-append out "/share/doc/" ,name "-" ,version))))))
+      (native-inputs
+       `(("source" ,source)))
+      (home-page "https://github.com/eligrey/canvas-toBlob.js/")
+      (synopsis "canvas.toBlob() implementation")
+      (description "canvas-toBlob.js implements the standard HTML5
+@code{canvas.toBlob()} and @code{canvas.toBlobHD()} methods in browsers that do
+not natively support it.")
+      (license license:expat))))
+
+(define-public javascript-filesaver
+  (package
+    (name "javascript-filesaver")
+    (version "2.0.2") ; May 14, 2019
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/eligrey/FileSaver.js")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ij3vmv8n2ia9kbyih3g479rj68xrsiq7l9s29vv1bdmmk41lpf3"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out (assoc-ref %outputs "out"))
+                (targetdir (string-append out "/share/genenetwork2/javascript/filesaver"))
+                (source (assoc-ref %build-inputs "source"))
+                (dist (string-append source "/dist")))
+           (copy-recursively dist targetdir)))))
+    (native-inputs `(("source" ,source)))
+    (home-page "https://github.com/eligrey/FileSaver.js")
+    (synopsis "HTML5 saveAs() FileSaver implementation")
+    (description "FileSaver.js is the solution to saving files on the
+client-side, and is perfect for web apps that generates files on the client.")
     (license license:expat)))