Add "All Versions" page with a table of all versions and all packages.
This commit is contained in:
parent
626627fcc7
commit
bb3dbeb2c0
|
@ -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)])
|
||||
|
|
|
@ -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)}.
|
||||
|
|
Loading…
Reference in New Issue
Block a user