racket/collects/meta/web/download/installer-pages.rkt
Eli Barzilay ca3b27b810 Allow #:part-of to use symbolic names, add it to a bunch of pages.
(Using a symbolic name makes it easy to use without worrying about
circular dependencies.)
2010-06-16 16:49:02 -04:00

61 lines
2.4 KiB
Racket

#lang at-exp s-exp "shared.rkt"
(require "data.rkt")
(define (render-installer-page installer)
(define path (installer-path installer))
(define file (installer-file installer))
(define html-file (string-append (regexp-replace* #rx"\\." file "-") ".html"))
(define version (installer-version installer))
(define date (version->date version))
(define package (package->name (installer-package installer)))
(define size (installer-size installer))
(define type (if (installer-binary? installer) "" " source"))
(define platform (platform->name (installer-platform installer)))
(define title @text{Download @package v@|version type| for @platform})
(define suffix-desc (suffix->name (installer-suffix installer)))
(define (row label text)
@tr[valign: 'top]{
@td[align: 'right]{@b{@label}:}
@td{@nbsp}
@td[align: 'left]{@text}})
(define (this url [mode #f])
(case mode
[(only-platform) (a href: url platform type)]
[(render-option) (option value: url platform type)]
[(#f) @a[href: url]{@title}]
[else (error 'installer-page "unknown mode: ~e" mode)]))
@page[#:file html-file #:title title #:referrer this #:part-of 'download]{
@table[width: "90%" align: 'center]{
@tr[valign: 'top]{
@td[width: "50%"]{
@table{@(row "Package" package)
@(row "Version" @list{@version (@date)})
@(row "Platform" (list platform type))
@(row "Type" suffix-desc)
@(row "File" file)
@(row "Size" size)}}
@td[width: "50%"]{
Download links:
@div[style: "font-size: 75%; text-align: right; float: right;"]{
(Choose the nearest site)}
@ul{@(map (lambda (m)
@li{@a[href: (list (mirror-url m) path)]{
@(mirror-location m)}})
mirrors)}}}}
@;TODO: decide whether this is really needed
@; (looks redundant now that all of the installers are pretty standard)
@;section{Installation instructions}
@;(bundle-installation-instructions bundle)
@;br{}
@;div[align: 'right]{(@(link-to 'license))}
})
(provide installer->page)
(define installer->page
(let ([t (make-hasheq)])
(lambda (inst . more)
(let ([page (hash-ref! t inst (lambda ()
(render-installer-page inst)))])
(if (null? more) page (apply page more))))))