From: Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
To: guix-devel@gnu.org
Cc: Alex Sassmannshausen <alex@pompo.co>
Subject: [PATCH] Generate multiple paginated packages pages.
Date: Wed, 30 Nov 2016 00:22:24 +0100 [thread overview]
Message-ID: <20161129232224.28525-2-alex@pompo.co> (raw)
In-Reply-To: <20161129232224.28525-1-alex@pompo.co>
* website/www.scm (%web-pages): Add code for generating our packages
pages.
* website/www/packages.scm (packages-by-grouping): New procedure.
(paginated-packages-page): New procedure.
(packages-page): Tweak for use by `paginated-packages-page` as well as
standalone.
* website/static/base/css/packages.css (li.package-index-link): Add
styling.
---
website/static/base/css/packages.css | 8 ++-
website/www.scm | 8 ++-
website/www/packages.scm | 96 ++++++++++++++++++++++++++++--------
3 files changed, 89 insertions(+), 23 deletions(-)
diff --git a/website/static/base/css/packages.css b/website/static/base/css/packages.css
index 177f416..d218c51 100644
--- a/website/static/base/css/packages.css
+++ b/website/static/base/css/packages.css
@@ -2,6 +2,12 @@
@import url("article.css");
+li.package-index-link {
+ list-style: none;
+ display: inline;
+ margin: 0 0.3em;
+}
+
a {
transition: all 0.3s;
}
@@ -82,4 +88,4 @@ img.status-icon {
position: absolute;
top: 0px;
left: 0px;
-}
\ No newline at end of file
+}
diff --git a/website/www.scm b/website/www.scm
index 59e917a..7ca6a78 100644
--- a/website/www.scm
+++ b/website/www.scm
@@ -27,6 +27,7 @@
#:use-module (www about)
#:use-module (www contribute)
#:use-module (www help)
+ #:use-module (www packages)
#:use-module (www security)
#:use-module (www news)
#:use-module (haunt post)
@@ -293,7 +294,12 @@ Distribution.")
("download/index.html" ,download-page)
("help/index.html" ,help-page)
("security/index.html" ,security-page)
- ;; ("packages/index.html" ,packages-page) ; Need Guix
+ ;; ,@(map (lambda (group)
+ ;; `(,(string-append "packages/" group ".html")
+ ;; ,(paginated-packages-page group)))
+ ;; %groups)
+ ;; ("packages/index.html" ,(paginated-packages-page "0-9"))
+ ;; ("packages/all.html" ,packages-page)
;; ("packages/issues.html" ,issues-page)
))
diff --git a/website/www/packages.scm b/website/www/packages.scm
index 9f345ae..63cea3a 100644
--- a/website/www/packages.scm
+++ b/website/www/packages.scm
@@ -44,7 +44,9 @@
#:use-module (srfi srfi-26)
#:use-module (texinfo)
#:use-module (texinfo html)
- #:export (packages-page
+ #:export (%groups
+ packages-page
+ paginated-packages-page
issues-page))
(define lookup-gnu-package
@@ -441,6 +443,21 @@ PACKAGES."
;;; Pages.
;;;
+(define %groups
+ ;; List of package groups.
+ (cons "0-9"
+ (map string
+ '(#\a #\b #\c #\d #\e #\f #\g #\h
+ #\i #\j #\k #\l #\m #\n #\o #\p
+ #\q #\r #\s #\t #\u #\v #\w #\x
+ #\y #\z))))
+
+(define (group-file-name group)
+ (string-append "/packages/" group ".html"))
+
+(define (group-name group)
+ (string-upcase group))
+
(define (all-packages)
"Return the list of all package objects, sorted by name."
(sort (fold-packages (lambda (package lst)
@@ -452,29 +469,66 @@ PACKAGES."
(string<? (package-name p1)
(package-name p2)))))
-(define (packages-page)
+(define packages-by-grouping
+ (lambda* (#:optional (grouping 'all))
+ "Return an alphabetically sorted list of Guix packages, limited
+to those matching GROUPING. GROUPING can be 'all for all packages,
+the string '0-9' for all packages starting with digits, or a string of
+a single, lower-case letter for a list of all packages starting with
+that letter."
+ (match grouping
+ ('all (all-packages))
+ ("0-9" (filter (compose (cut char-set-contains? char-set:digit <>)
+ first string->list package-name)
+ (all-packages)))
+ (letter (filter (lambda (package)
+ (string=? (string-take (package-name package) 1)
+ letter))
+ (all-packages))))))
+
+(define (paginated-packages-page grouping)
+ "Return a packages page that contains only content for the packages
+that match GROUPING (either the string '0-9' or a string of one
+letter)."
+ (lambda ()
+ (packages-page (string-upcase grouping) (packages-by-grouping grouping))))
+
+(define* (packages-page #:optional (grouping "All")
+ (packages (all-packages)))
`(html (@ (lang "en"))
- ,(html-page-header "Packages" #:css "packages.css" #:js "packages.js")
- (body
- ,(html-page-description)
- ,(html-page-links)
-
- (div (@ (id "content-box"))
- (article
- (h1 "Packages")
- (p "GNU Guix provides "
+ ,(html-page-header "Packages" #:css "packages.css" #:js "packages.js")
+ (body
+ ,(html-page-description)
+ ,(html-page-links)
+
+ (div (@ (id "content-box"))
+ (article
+ (h1 ,(string-append "Packages [" grouping "]"))
+ (p "GNU Guix provides "
,(number* (fold-packages (lambda (p n) (+ 1 n)) 0))
" packages transparently "
- (a (@ (href "http://hydra.gnu.org/jobset/gnu/master#tabs-status"))
- "available as pre-built binaries")
- ". This is a complete list of the packages. Our "
- (a (@ (href "http://hydra.gnu.org/jobset/gnu/master"))
- "continuous integration system")
- " shows their current build status "
- "(Updated " ,(date->string (current-date) "~B ~e, ~Y") ").")
- ,(packages->sxml (all-packages))))
-
- ,(html-page-footer))))
+ (a (@ (href "http://hydra.gnu.org/jobset/gnu/master#tabs-status"))
+ "available as pre-built binaries")
+ ". These pages provide a complete list of the packages.
+ Our "
+ (a (@ (href "http://hydra.gnu.org/jobset/gnu/master"))
+ "continuous integration system")
+ " shows their current build status "
+ "(Updated " ,(date->string (current-date) "~B ~e, ~Y") ").")
+ (p "You can browse packages indexed by their first letter, or
+you can view "
+ (a (@ (href "/packages/all.html"))
+ "all packages on a single page."))
+ (ul
+ ,@(map (lambda (group)
+ `(li (@ (id ,(string-append group "-link"))
+ (class "package-index-link"))
+ (a (@ (href ,(group-file-name group)))
+ ,(group-name group))))
+ %groups))
+ ,(packages->sxml packages)))
+
+ ,(html-page-footer))))
(define* (issues-page #:key (checkers %issue-checkers))
`(html
--
2.10.2
next prev parent reply other threads:[~2016-11-29 23:24 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-29 23:22 [PATCH] Revised generate multiple package pages Alex Sassmannshausen
2016-11-29 23:22 ` Alex Sassmannshausen [this message]
2016-12-04 20:51 ` [PATCH] Generate multiple paginated packages pages Ludovic Courtès
2016-12-05 10:16 ` Alex Sassmannshausen
2016-12-08 10:00 ` Ludovic Courtès
2016-12-08 10:54 ` Jan Synáček
2016-12-08 11:29 ` Alex Sassmannshausen
2016-12-08 11:36 ` John Darrington
2016-12-08 12:02 ` Alex Sassmannshausen
-- strict thread matches above, loose matches on Subject: below --
2016-11-11 20:03 [PATCH] A patch to generate paginated packages page Alex Sassmannshausen
2016-11-11 20:03 ` [PATCH] Generate multiple paginated packages pages Alex Sassmannshausen
2016-11-12 14:34 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161129232224.28525-2-alex@pompo.co \
--to=alex.sassmannshausen@gmail.com \
--cc=alex@pompo.co \
--cc=guix-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.