list-packages: Show the package logo, when available.

* build-aux/list-packages.scm (lookup-gnu-package): New procedure.
  (package->sxml): Add the package logo, when available, next to the
  description.
This commit is contained in:
Ludovic Courtès 2013-07-10 23:16:07 +02:00
parent 6a3380dfbf
commit d04434c067

View file

@ -30,6 +30,7 @@ (define-module (list-packages)
#:use-module (sxml simple) #:use-module (sxml simple)
#:use-module (web uri) #:use-module (web uri)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:export (list-packages)) #:export (list-packages))
;;; Commentary: ;;; Commentary:
@ -38,6 +39,14 @@ (define-module (list-packages)
;;; ;;;
;;; Code: ;;; Code:
(define lookup-gnu-package
(let ((gnu (official-gnu-packages)))
(lambda (name)
"Return the package description for GNU package NAME, or #f."
(find (lambda (package)
(equal? (gnu-package-name package) name))
gnu))))
(define (package->sxml package) (define (package->sxml package)
"Return HTML-as-SXML representing PACKAGE." "Return HTML-as-SXML representing PACKAGE."
(define (source-url package) (define (source-url package)
@ -65,6 +74,10 @@ (define ->sxml
(->sxml (package-license package))) (->sxml (package-license package)))
(define (package-logo name)
(and=> (lookup-gnu-package name)
gnu-package-logo))
(let ((description-id (symbol->string (let ((description-id (symbol->string
(gensym (package-name package))))) (gensym (package-name package)))))
`(tr (td ,(if (gnu-package? package) `(tr (td ,(if (gnu-package? package)
@ -81,6 +94,12 @@ (define ->sxml
,(package-synopsis package)) ,(package-synopsis package))
(div (@ (id ,description-id) (div (@ (id ,description-id)
(style "position: relative; display: none;")) (style "position: relative; display: none;"))
,(match (package-logo (package-name package))
((? string? url)
`(img (@ (src ,url)
(height "35em")
(style "float: left; padding-right: 1em;"))))
(_ #f))
(p ,(package-description package)) (p ,(package-description package))
,(license package) ,(license package)
(a (@ (href ,(package-home-page package))) (a (@ (href ,(package-home-page package)))