Add "All Versions" page with a table of all versions and all packages.

This commit is contained in:
Eli Barzilay 2010-09-16 13:42:56 -04:00
parent 626627fcc7
commit bb3dbeb2c0
2 changed files with 57 additions and 9 deletions

View File

@ -79,6 +79,9 @@
["plt" "Racket Package"]
["sit" "StuffIt Archive"]))
;; Used to sort packages when more then one is rendered on a page
(define -package-order- '(racket racket-textual))
(define -mirrors-
;; This is a sequence of
;; (location url reposnisble-name email [techincal-contact])
@ -139,10 +142,13 @@
;; ----------------------------------------------------------------------------
;; accepts "053"
(define (version->integer* v)
(version->integer (regexp-replace #rx"^0+" v "")))
(define versions+dates
(sort -versions+dates- <
#:key (lambda (vd)
(version->integer (regexp-replace #rx"^0+" (car vd) "")))
#:key (lambda (vd) (version->integer* (car vd)))
#:cache-keys? #t))
;; sorted from oldest to newest
@ -176,6 +182,7 @@
(path ; path to file from the installers directory
file ; just the file name
version ; version of the installer (as a string)
version-number ; version as a number (via version->integer*)
size ; human-readable size string
package ; package kind symbol 'racket or 'racket-textual
binary? ; #t = binary distribution, #f = source distribution
@ -200,8 +207,8 @@
"))$")))
(define (make-installer size path version package file type platform suffix)
(installer path file version size (string->symbol package)
(equal? "bin" type) platform suffix))
(installer path file version (version->integer* version) size
(string->symbol package) (equal? "bin" type) platform suffix))
(define (parse-installers in)
(port-count-lines! in)
@ -211,7 +218,19 @@
(error 'installers "bad installer data line#~a: ~s"
num line))))))
(define all-installers (call-with-input-file installers-data parse-installers))
;; sorted by version (newest first), and then by -package-order-
(define all-installers
(sort (call-with-input-file installers-data parse-installers)
(lambda (i1 i2)
(let ([v1 (installer-version-number i1)]
[v2 (installer-version-number i2)])
(or (> v1 v2)
(and (= v1 v2)
(let* ([p1 (installer-package i1)]
[p2 (installer-package i2)]
[t1 (memq p1 -package-order-)])
(and t1 (or (memq p2 (cdr t1))
(not (memq p2 -package-order-)))))))))))
(define package->name
(let ([t (make-hasheq)])

View File

@ -1,7 +1,7 @@
#lang at-exp s-exp "shared.rkt"
(require "data.rkt" "installer-pages.rkt"
(prefix-in pre: "../stubs/pre.rkt"))
(require "data.rkt" "installer-pages.rkt" (prefix-in pre: "../stubs/pre.rkt")
racket/list)
(provide render-download-page)
@ -21,7 +21,8 @@
@input[type: 'submit value: "Download" onclick: "do_jump();"]
@|br hr|
@div[align: "center"]{
@small{@license @nbsp @bull @nbsp @pre:installers}}
@small{@all-version-pages @nbsp @bull @nbsp
@license @nbsp @bull @nbsp @pre:installers}}
@hr
@div[id: "linux_explain"
style: '("font-size: 75%; display: none; width: 28em;"
@ -38,8 +39,36 @@
(equal? package (installer-package i))))
@li{@(installer->page i 'only-platform)})}}})
(define all-version-pages
(let ()
(define all-versions
(remove-duplicates (map installer-version all-installers)))
(define all-packages
(remove-duplicates (map installer-package all-installers)))
(define (make-page ver pkg)
(define file (format "~a-v~a.html" pkg ver))
(define title @list{@(package->name pkg) v@ver})
(define label @list{v@ver @small{(@(version->date ver))}})
(define the-page
@page[#:file file #:title title #:part-of 'download]{
@(render-download-page ver pkg)})
(the-page label))
@page[#:id 'all-versions #:title "All Versions" #:part-of 'download]{
@table[width: "90%" align: 'center cellspacing: 10 cellpadding: 10
rules: 'cols frame: 'box]{
@thead{
@tr[style: "border-bottom: 1px solid;"]{
@(map (lambda (p)
@th[width: "50%" align: 'center]{@(package->name p)})
all-packages)}}
@tbody{
@(map (lambda (v)
(tr (map (lambda (p) (td align: 'center (make-page v p)))
all-packages)))
all-versions)}}}))
(define license
@page[#:title "Software License"]{
@page[#:title "Software License" #:part-of 'download]{
@p{Racket is distributed under the
@a[href: "http://www.gnu.org/copyleft/lesser.html"]{
GNU Lesser General Public License (LGPL)}.