Patchwork Generate multiple paginated packages pages.

login
register
mail settings
Submitter Alex Sassmannshausen
Date Nov. 29, 2016, 11:22 p.m.
Message ID <20161129232224.28525-2-alex@pompo.co>
Download mbox | patch
Permalink /patch/18056/
State New
Headers show

Comments

Alex Sassmannshausen - Nov. 29, 2016, 11:22 p.m.
* 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(-)
Ludovic Courtès - Dec. 4, 2016, 8:51 p.m.
Alex Sassmannshausen <alex.sassmannshausen@gmail.com> skribis:

> * 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.

Sure, please push!

I thought we had agreed on that one already, but now I see this message
as unread in my inbox.  Go figure!

Thank you Alex!

Ludo’.
Alex Sassmannshausen - Dec. 5, 2016, 10:16 a.m.
Ludovic Courtès writes:

> Alex Sassmannshausen <alex.sassmannshausen@gmail.com> skribis:
>
>> * 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.
>
> Sure, please push!

Done.

> I thought we had agreed on that one already, but now I see this message
> as unread in my inbox.  Go figure!

Ah, indeed, we had agreed on the previous version of the patch.  Anyway,
thanks for reconfirming.

Alex
Ludovic Courtès - Dec. 8, 2016, 10 a.m.
Hello!

It’s on-line now!

  https://www.gnu.org/software/guix/packages/

Note that I removed the all-in-one package page because the poor CVS
server at gnu.org simply can’t handle it.

I’ve updated the cron job so if everything goes well it’ll be updated
every night again.

Thanks Alex!

Ludo’.
Jan Synáček - Dec. 8, 2016, 10:54 a.m.
On Thu, Dec 8, 2016 at 11:00 AM, Ludovic Courtès <ludo@gnu.org> wrote:
> Hello!
>
> It’s on-line now!
>
>   https://www.gnu.org/software/guix/packages/

Just a cosmetic issue that I have noticed. In the expanded package
description, hovering over the check marks next to architectures says
"unknown" for both green and red check mark. Not sure if it's supposed
to be like that.

Anyways, great work!

Cheers,
Alex Sassmannshausen - Dec. 8, 2016, 11:29 a.m.
Ludovic Courtès writes:

> Hello!
>
> It’s on-line now!
>
>   https://www.gnu.org/software/guix/packages/

Neat! Nice to see it there :-)

> Note that I removed the all-in-one package page because the poor CVS
> server at gnu.org simply can’t handle it.

Sure — I figure this way of browsing is more user friendly anyway…

> I’ve updated the cron job so if everything goes well it’ll be updated
> every night again.
>
> Thanks Alex!
>
> Ludo’.
John Darrington - Dec. 8, 2016, 11:36 a.m.
On Thu, Dec 08, 2016 at 12:29:22PM +0100, Alex Sassmannshausen wrote:
     
     > Note that I removed the all-in-one package page because the poor CVS
     > server at gnu.org simply can???t handle it.
     
     Sure ??? I figure this way of browsing is more user friendly anyway???
     
Well yes and no.

It's more friendly in the respect that it no longer takes 2 minutes to load.

But the down side is that I can no longer load the page and then use my 
browser's "Find in Page" button to search for a package---Now I have to
know what the package is called before I can search for it.

Maybe sometime in the future a "browse by category" or "search for packages"
feature will be available?

J'
Alex Sassmannshausen - Dec. 8, 2016, 12:02 p.m.
Heya

John Darrington writes:

> On Thu, Dec 08, 2016 at 12:29:22PM +0100, Alex Sassmannshausen wrote:
>      
>      > Note that I removed the all-in-one package page because the poor CVS
>      > server at gnu.org simply can???t handle it.
>      
>      Sure ??? I figure this way of browsing is more user friendly anyway???
>      
> Well yes and no.
>
> It's more friendly in the respect that it no longer takes 2 minutes to load.
>
> But the down side is that I can no longer load the page and then use my 
> browser's "Find in Page" button to search for a package---Now I have to
> know what the package is called before I can search for it.

Fair point!  I think Luis Felipe is thinking of a more comprehensive
approach to the package pages — mine was more of a quick fix to solve an
urgent problem.

> Maybe sometime in the future a "browse by category" or "search for packages"
> feature will be available?
>
> J'

Patch

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