meta/new-web: fill in corners

Use soft links to represent redirections on the web site, where
all redirections needed now are within a site (specifically, the
download site).

Adjust various pages that are essentially for backward
compatibility.
This commit is contained in:
Matthew Flatt 2014-03-07 14:30:32 -07:00
parent 3ec206b78a
commit 1b72aa175a
17 changed files with 140 additions and 263 deletions

View File

@ -50,12 +50,10 @@
["sit" "StuffIt Archive"]))
(define -mirrors-
;; This is a sequence of
;; (location url reposnisble-name email [techincal-contact])
'(["Main download (USA, Massachusetts, Northeastern University)"
"http://download.racket-lang.org/installers/"
"Eli Barzilay"
"eli@barzilay.org"]
'(["Main (Amazon Web Services)"
main
"Matthew Flatt"
"mflatt@cs.utah.edu"]
["USA, Illinois (Northwestern University)"
"http://www.eecs.northwestern.edu/racket/"
"Robby Findler"
@ -125,7 +123,9 @@
(struct mirror (location url person email))
(define mirrors
(map (λ (m) (mirror (car m) (regexp-replace #rx"/?$" (cadr m) "/")
(map (λ (m) (mirror (car m) (if (string? (cadr m))
(regexp-replace #rx"/?$" (cadr m) "/")
(cadr m))
(caddr m) (cadddr m)))
-mirrors-))

View File

@ -3,6 +3,8 @@
(require "resources.rkt" "data.rkt" "installer-pages.rkt" "symlinks.rkt" plt-web/style
(prefix-in pre: "../minis/pre.rkt"))
(define docs "docs")
(provide render-download-page)
(define (render-download-page [release current-release] [package 'racket])
(define version (release-version release))

View File

@ -0,0 +1,21 @@
#lang plt-web
(require plt-web/indexes
(only-in "../www/resources.rkt"))
;; Run this module in a directory that contains "docs" as a snapshot
;; of the "docs" directory on download.racket-lang.org, and it will
;; generate "index.html" files to be uploaded to S3 to provide
;; directory-listing "index.html" files where none are present
;; already.
;;
;; The directory doesn't have to be "docs"; it can be any directory
;; at the root of download.racket-lang.org.
;;
;; After the "index.html" files are generated, you have to upload
;; them to S3 manually.
(define download-site (site "download"
#:url "http://download.racket-lang.org/"
#:always-abs-url? #t))
(make-indexes download-site)

View File

@ -53,7 +53,7 @@
(λ (m)
(define url
(mirror-link
(string-append (mirror-url m) path)
(string-append (mirror-url* m) path)
size
(λ () (format "~a <~a>"
(mirror-person m)
@ -72,6 +72,12 @@
@;(bundle-installation-instructions bundle)
})
(define (mirror-url* m)
(define u (mirror-url m))
(if (eq? u 'main)
((resource "download/installers/" #f))
u))
(provide installer->page)
(define installer->page
(let ([t (make-hasheq)])

View File

@ -1,6 +1,7 @@
#lang plt-web
(require "../testing.rkt")
(provide download-site)
(define download-site (site "download"
#:url "http://download.racket-lang.org/"))
#:url (rewrite-for-testing "http://download.racket-lang.org/")))

View File

@ -1,13 +1,21 @@
#lang plt-web
(require "resources.rkt")
(require "resources.rkt"
"data.rkt"
version/utils)
(provide (all-defined-out))
(define (in-ftp . paths)
(string-join (cons "/var/ftp/pub/racket" paths) "/"))
(define docs (symlink #:site download-site "/www/docs"))
(define installers (symlink #:site download-site (in-ftp "installers")))
(define libs (symlink #:site download-site (in-ftp "libs/tags") "libs"))
(define stubs (symlink #:site download-site "/www/stubs"))
;; For versions 5.92 and later, redirect "installers/<version>"
;; and "docs/<version>/..." to "releases/<version>/..."
(for ([r (in-list all-releases)])
(define v (release-version r))
(when (version<=? "5.92" v)
(symlink #:site download-site
(format "../releases/~a/installers" v)
(format "installers/~a" v))
(symlink #:site download-site
(format "../../releases/~a/doc" v)
(format "docs/~a/html" v))
(symlink #:site download-site
(format "../../releases/~a/pdf-doc" v)
(format "docs/~a/pdf" v))))

View File

@ -1,7 +1,12 @@
#lang plt-web
(require "../www/resources.rkt")
(define drracket-site (site "drracket"
#:url "http://drracket.org/"))
#:url "http://drracket.org/"
#:share-from www-site
#:page-style? #f
#:meta? #t))
;; This just shows an ascii logo and redirects to the main page. Thanks
;; to Can Burak Cilingir for both the logo and the drracket.org domain

View File

@ -2,169 +2,6 @@
(provide mailing-lists-quick)
(define lists-site (site "lists"
#:url "http://lists.racket-lang.org/"))
(struct ML (name gmane-name google-name description))
(define MLs
(list (ML "users" "user" "racket-users"
@text{A discussion list for all things related to Racket.
Ask your questions here!})
(ML "announce" "announce" #f
@text{A low-volume, moderated list for announcements, only.
@small{(These are posted on the @TT{users} list too, no need
to subscribe to both.)}})
(ML "dev" "devel" #f
@text{A mailing list for Racket development.
@small{(For people who want to see how the sausages are made
and help make them.)}})))
(define lists
@page[#:site lists-site
#:title "Mailing Lists" #:file "" #:part-of 'community
#:description
@'{Racket mailing lists for users, developers, announcements, and more.}
(define (list-cells what) (map (λ (r) (r what)) list-renderers))
]{
@p{This is the Racket mailing list server. We have several public mailing
lists, some are listed below with several mirrors for each one. The
complete list of public mailing lists is available on
@a[href: "listinfo"]{this page}.}
@(define gap1 (tr (map (λ (_) @td{@div[style: "height: 1ex;"]{}}) MLs)))
@(define gap2 (tr (map (λ (_) @td{}) MLs)))
@(define (sec . text)
@list{@gap1
@tr{@td[style: '("background-color: #dddddd; font-weight: bold;"
" padding: 0;")
colspan: (length MLs)]{@text}}
@gap2})
@table[style: "width: 100%; margin: auto; text-align: center;"
frame: 'box rules: 'cols cellpadding: 5]{
@tr[style: "border-bottom: 1px solid; background-color: #ccccff;"]{
@(list-cells 'header-cell)}
@tr[valign: 'top style: "text-align: left;"]{@(list-cells 'description)}
@tr{@(list-cells 'main-page-cell)}
@tr{@(list-cells 'graph-cell)}
@sec{Subscription: enter your email here to subscribe to a mailing list}
@tr{@(list-cells 'subscribe-cell)}
@sec{Gmane Mirror}
@tr{@(list-cells 'gmane-cell)}
@sec{Archive at mail-archive.com}
@tr{@(list-cells 'mail-archive-cell)}
@sec{Google group mirror}
@tr{@(list-cells 'google-cell)}}})
(define (list-renderer ml)
(define name (ML-name ml))
(define at-domain "@racket-lang.org")
(define email (list name at-domain))
(define description (ML-description ml))
(define gmane
(let ([gm (ML-gmane-name ml)])
(and gm @list{gmane.comp.lang.racket.@(ML-gmane-name ml)})))
(define (gmane-link base . body)
(unless gmane
(error 'list-renderer "internal error: no gmane info for ~a" name))
(let* ([path (if (pair? base) (list "/" (cdr base) "/") "/")]
[base (if (pair? base) (car base) base)]
[pfx (if (regexp-match? #rx"://" base) base (list "http://" base))])
@a[href: (list pfx ".gmane.org" path gmane)]{@body}))
(define (mail-archive-link suffix . body)
@a[href: (list "http://www.mail-archive.com/" email "/" suffix)]{@body})
(define google-groups-url
(let ([g (ML-google-name ml)])
(and g (list "http://groups.google.com/group/" g "/"))))
(define ((mk-form make) url #:method [method 'get] . body)
(make @form[action: url method: method
style: "display: inline; clear: none;"]{
@div{@body}}))
(define (mk-subscribe mk)
@(mk-form mk)[(list (url-of lists #t) name "/subscribe") #:method 'post]{
@input[type: 'text name: 'email size: 20 value: ""
placeholder: "Email to Subscribe"
title: @list{Enter your email to subscribe
to the "@name" mailing list.}]})
(define form-cell (mk-form td))
(λ (what)
(case what
[(header-cell)
@th[style: "width: 33%;"]{
@; the mixed styles will help against some spam harvesting too
@span[style: '("font-size: x-large;"
" font-family: monospace; font-weight: bold;")]{
@TT{@name}@;
@span[style: "font-size: small;"]{@at-domain}}}]
[(description) @td{@description}]
[(main-page-cell)
@td{@a[href: (list name "/")]{@big{@b{@TT{@name}}} page}
@bull
@a[href: (list name "/archive/")]{archive}}]
[(graph-cell)
@td{@img[src: (list "http://gmane.org/plot-rate.php?group=" gmane)
style: "width: 80%;"]}]
[(subscribe-cell) (mk-subscribe td)]
[(google-cell)
(if google-groups-url
@form-cell[(list google-groups-url "search")]{
@a[href: google-groups-url]{
@(string-titlecase
(regexp-replace* #rx"-" (ML-google-name ml) " "))}
@br
@span[style: "white-space: nowrap;"]{
Search: @input[type: 'text name: 'q value: "" size: 20].}}
@td{@small{—none—}})]
[(mail-archive-cell)
@form-cell["http://www.mail-archive.com/search"]{
@input[type: 'hidden name: 'l value: email]
@mail-archive-link["info.html"]{Archive}
@bull
@mail-archive-link[""]{Browse}
@bull
@mail-archive-link["maillist.xml"]{RSS}
@br
@span[style: "white-space: nowrap;"]{
Search: @input[type: 'text name: 'q value: "" size: 20].}}]
[(gmane-cell)
@form-cell["http://search.gmane.org/"]{
@input[type: 'hidden name: 'group value: gmane]
@gmane-link["dir"]{@TT{@gmane}}
@br
@gmane-link["news"]{threaded}
@bull
@gmane-link["blog"]{blog}
@bull
@gmane-link["nntp://news"]{newsgroup}
@br
Feed:
@gmane-link['("rss" "messages/complete")]{messages}
@bull
@gmane-link['("rss" "topics/complete")]{topics}
@br
@;Excerpt feed:
@;@gmane-link['("rss" "messages/excerpts")]{messages}
@;@bull
@;@gmane-link['("rss" "topics/excerpts")]{topics}
@;@br
@span[style: "white-space: nowrap;"]{
Search: @input[type: 'text name: 'query value: "" size: 20].}}]
[(quick)
@text{
@big{@TT{@b{@name}}@small{@tt{@at-domain}}}
@div[style: "margin-left: 2em;"]{
@description
@br
@div[style: "float: right;"]{@(mk-subscribe values)}
[@a[href: (list (url-of lists) name "/")]{list page},
@gmane-link["dir"]{gmane mirror},
@mail-archive-link[""]{mail-archive}@;
@(and google-groups-url
@text{, @a[href: google-groups-url]{google group mirror}})]}}]
[else (error 'list-cell "internal error")])))
(define list-renderers (map list-renderer MLs))
(define (mailing-lists-quick)
@text{@(apply parlist @strong{Mailing Lists}
(map (λ (r) (r 'quick)) list-renderers))
@p{See the @lists{mailing list server} for more details.}})
@text{@parlist[@strong{Mailing Lists}
@list{@a[href: "http://lists.racket-lang.org/"]{Subscribe or browse}.}]})

View File

@ -1,15 +1,18 @@
#lang plt-web
(require "../www/resources.rkt"
"../testing.rkt"
plt-web/style)
(provide installers)
(define pre-site (site "pre"
#:url "http://pre.racket-lang.org/"
#:url (rewrite-for-testing "http://pre.racket-lang.org/")
#:share-from www-site))
(define installers
@page[#:site pre-site #:width 'full]{
(define (main id)
@page[#:site pre-site
#:id id
#:width 'full]{
@columns[10 #:center? #t #:row? #t #:center-text? #f]{
@h3{Snapshot Builds}}
@columns[8 #:center? #t #:row? #t #:center-text? #f]{
@ -17,3 +20,8 @@
University of Utah}}
@li{@a[href: "http://plt.eecs.northwestern.edu/snapshots/"]{
Northwestern University}}}}})
;; Generate at both "installers.html" (traditional path)
;; and "index.html" (old entry point, now subsumed)
(define installers (main 'installers))
(void (main 'index))

View File

@ -1,9 +1,10 @@
#lang plt-web
(require (only-in "../www/resources.rkt" www-site))
(require (only-in "../www/resources.rkt" www-site)
"../testing.rkt")
(define docs-site (site "stubs/docs"
#:url "http://docs.racket-lang.org/"
#:url (rewrite-for-testing "http://docs.racket-lang.org/")
#:always-abs-url? #t
#:page-style? #f
#:meta? #t
@ -31,3 +32,7 @@
.navsettop, .tocset { top: 60px; }
.versionbox { top: 64px; }
}))
(provide docs-path)
(define (docs-path [path ""])
(string-append ((resource "stubs/docs/" #f)) path))

View File

@ -0,0 +1,9 @@
#lang racket/base
(provide rewrite-for-testing)
;; Adjust root URLs for testing purposes.
;; Root URLs must be written into roots, not
;; paths within a URLs
(define (rewrite-for-testing s)
s)

View File

@ -1,16 +1,16 @@
#lang plt-web
(require syntax-color/module-lexer setup/xref
scribble/xref scribble/tag)
scribble/xref scribble/tag
(only-in "../stubs/docs.rkt" docs-path))
(provide code)
(define doc-root "http://docs.racket-lang.org/")
(define expand-namespace (make-base-namespace))
(define xref (load-collections-xref))
(define (code . strs)
(define doc-root (docs-path))
(define str
(let* ([str (string-append* strs)]
[N (- 6 (length (regexp-match-positions* "\n" str)))])

View File

@ -34,8 +34,7 @@
@mailing-lists-quick
@irc-quick
@parlist[@strong{RacketCon}
@text{@-rcon[] is our annual conference:
@-rcon[2012] and @-rcon[2011].}]
@text{@-rcon[] is our annual conference.}]
@parlist[@strong{PLT Design Inc.}
@text{@blog announcements, helpful hints, and thoughtful rants.}
@text{@a[href: "http://twitter.com/#!/racketlang"]{Twitter}

View File

@ -1,10 +1,11 @@
#lang plt-web
(require "resources.rkt" "community.rkt")
(require plt-web/style "resources.rkt" "community.rkt")
(provide help)
(define help
@page[#:site www-site #:link-title "Need Help?"]{
@columns[12 #:center? #t #:row? #t]{
@parlist[@strong{Don't Panic!}
@text{Racket has a variety of resources designed to help you
with any problems you may have.}]
@ -35,4 +36,4 @@
don't pan out@";" sign up for it in the @community area of
the website.}]
@br
@text{Thanks for using Racket!}})
@text{Thanks for using Racket!}}})

View File

@ -1,7 +1,9 @@
#lang plt-web
(require plt-web/style
racket/runtime-path
(prefix-in pre: "../minis/pre.rkt"))
"irc.rkt"
(prefix-in pre: "../minis/pre.rkt")
(only-in "../stubs/docs.rkt" docs-path))
;; TODO
;; -- add links in top paragraph
@ -16,9 +18,6 @@
(define-runtime-path js-dir "js")
(define-runtime-path css-dir "css")
(define (doc path . text)
(apply a href: (list "http://docs.racket-lang.org/" path) text))
(struct example (title code desc))
(define ((example-with-help . help) code desc #:title title)
@ -52,6 +51,7 @@
(define (elemcode . strs) (apply tt strs))
(define examples
(lazy
@; --- Each example here should be at most 7 lines long ------------
(list
@; Candidates for initial example: --------------------------------
@ -264,7 +264,7 @@
(define x (make-hasheq))
(hash-set! x A B)
(x A)}})
)))
))))
(define blurb "Racket is a programming language")
@ -314,7 +314,7 @@ dialects. Racket's libraries support applications from web servers to distribut
computing and from databases to charts.
}
@(apply slideshow-explain examples)
@(apply slideshow-explain (force examples))
@div[id: "topcontent"]{
@row{
@ -341,7 +341,7 @@ computing and from databases to charts.
@a[href: "#" class: "toggle wide_only next_toggle"
gumby-trigger: ".unique_lines|.web_scraper"
style: "position: absolute; top: 40%; right: -15%"]{@next}
@(apply slideshow-panel examples)}}
@(apply slideshow-panel (force examples))}}
@columns[1]
@ -352,11 +352,11 @@ computing and from databases to charts.
@columns[12 #:row? #t #:center? #t style: "text-align:justify;font-size: 120%; margin-top: 20pt; "]{
@a[href: "http://docs.racket-lang.org/quick/"]{Draw more pictures} or
@a[href: "http://docs.racket-lang.org/more/"]{build a web server from scratch}. Racket includes both
@a[href: "http://docs.racket-lang.org/"]{batteries} and a
@a[href: "http://docs.racket-lang.org/drracket/"]{programming environment},
so @a[href: "http://docs.racket-lang.org/getting-started/"]{get started}!
@a[href: (docs-path "quick/")]{Draw more pictures} or
@a[href: (docs-path "more/")]{build a web server from scratch}. Racket includes both
@a[href: (docs-path)]{batteries} and a
@a[href: (docs-path "drracket/")]{programming environment},
so @a[href: (docs-path "getting-started/")]{get started}!
}}
@sectitle{Go Further}
@ -365,22 +365,22 @@ so @a[href: "http://docs.racket-lang.org/getting-started/"]{get started}!
@growbox["Program"]{Racket's
@a[href: "http://docs.racket-lang.org/guide/intro.html#(part._.Interacting_with_.Racket)"]{interactive
@a[href: (docs-path "guide/intro.html#(part._.Interacting_with_.Racket)")]{interactive
mode} encourages experimentation, and quick scripts easily compose
into larger systems. Small scripts and large systems both benefit
from
@a[href: "http://docs.racket-lang.org/guide/performance.html"]{native-code
@a[href: (docs-path "guide/performance.html")]{native-code
JIT compilation} When a system gets too big to keep in your head, you
can add
@a[href: "http://docs.racket-lang.org/ts-guide/index.html"]{static
@a[href: (docs-path "ts-guide/index.html")]{static
types}.}
@growbox["Language"]{@a[href: "http://docs.racket-lang.org/guide/languages.html"]{Extend
@growbox["Language"]{@a[href: (docs-path "guide/languages.html")]{Extend
Racket} whenever you need to. Mold it to better suit your tasks
without sacrificing
@a[href: "http://docs.racket-lang.org/guide/dialects.html"]{interoperability}
@a[href: (docs-path "guide/dialects.html")]{interoperability}
with existing libraries and without having to modify the
@a[href: "http://docs.racket-lang.org/guide/intro.html"]{tool chain}.
@a[href: (docs-path "guide/intro.html")]{tool chain}.
When less is more, you can remove parts of a language or start over
and build a new one.}
@ -388,7 +388,7 @@ and build a new one.}
@a[href: "http://htdp.org/"]{starting out}, want to know more about
programming language @a[href: "http://www.plai.org/"]{applications} or
@a[href: "http://redex.racket-lang.org/"]{models}, looking to
@a[href: "http://docs.racket-lang.org/continue/"]{expand your
@a[href: (docs-path "continue/")]{expand your
horizons}, or ready to dive into @a[href: "learning.html"]{research},
Racket can help you become a better programmer and system builder.}}
@ -397,25 +397,25 @@ Racket can help you become a better programmer and system builder.}}
@row{
@columns[5]{
@panetitle{For getting started}
@docelem['Quick "An Introduction to Racket with Pictures" "http://docs.racket-lang.org/quick/"]{
@docelem['Quick "An Introduction to Racket with Pictures" (docs-path "quick/")]{
gives you a taste of Racket.}
@docelem['More "Systems Programming with Racket" "http://docs.racket-lang.org/more/"]{
@docelem['More "Systems Programming with Racket" (docs-path "more/")]{
dives much deeper and much faster, showing how to build a complete
continuation-based web server.}
@docelem['Guide "Racket" "http://docs.racket-lang.org/guide/"]{
@docelem['Guide "Racket" (docs-path "guide/")]{
starts with a tutorial on Racket basics, and then it
describes the rest of the Racket language.}}
@columns[5 #:push 2]{
@panetitle{For experienced Racketeers}
@docelem['Reference "Racket" "http://docs.racket-lang.org/reference/"]{
@docelem['Reference "Racket" (docs-path "reference/")]{
provides comprehensive coverage of all of Racket.}
@docelem['Continue "Web Applications in Racket" "http://docs.racket-lang.org/continue/"]{
@docelem['Continue "Web Applications in Racket" (docs-path "continue/")]{
describes how to use the
Racket @a[href: "http://docs.racket-lang.org/web-server/"]{web
Racket @a[href: (docs-path "web-server/")]{web
server} to build dynamic web applications.}
@docelem["Package Management" "Racket" "http://docs.racket-lang.org/pkg/"]{
@docelem["Package Management" "Racket" (docs-path "pkg/")]{
explains how to install
@a[href: "http://pkgs.racket-lang.org"]{packages}, and how to
build and distribute your own.}}
@ -441,10 +441,7 @@ explains how to install
@p{@a[href: "http://lists.racket-lang.org/"]{Mailing lists}
Discussion lists for using and developing Racket.}
@p{@a[href: "http://racket-lang.org/irc-chat.html"]{IRC}
Chat in the @tt[style: "background-color: #d8d8e8;"]{@big{@strong{#racket}}} channel on
@a[href: "http://freenode.net"]{@tt{freenode.net}} An informal
discussion channel for all things related to Racket.
@a[href: "https://botbot.me/freenode/racket/"]{Browse the logs}.}
@irc-content}
@p{@people
The people behind Racket.}

View File

@ -2,6 +2,9 @@
(require "resources.rkt" plt-web/style)
(provide irc-content
irc-quick)
(define webchat-link
"http://webchat.freenode.net?channels=racket&uio=OT10cnVlJjExPTIzNg6b")
@ -10,38 +13,12 @@
@columns[12 #:row? #t #:center? #t]{
@iframe[src: webchat-link width: "100%" height: "400"]}})
(define log-header+footer
(lazy (regexp-split #rx"{{{BODY}}}"
(xml->string @page[#:site www-site
#:id 'browse-downloads
#:html-only #t
#:part-of 'community
"{{{BODY}}}"]))))
(define header @plain[#:site www-site
#:file "irc-logs/dummy/HEADER.html" #:newline #f
(car (force log-header+footer))])
(define footer @plain[#:site www-site
#:file "irc-logs/dummy/README.html" #:newline #f
(cadr (force log-header+footer))])
(define irc-content
@list{Chat in the @tt[style: "background-color: #d8d8e8;"]{@big{@strong{#racket}}} channel on
@a[href: "http://freenode.net"]{@tt{freenode.net}}, an informal
discussion channel for all things related to Racket, or
@a[href: "https://botbot.me/freenode/racket/"]{browse the logs}.})
(provide irc-logs)
(define irc-logs
(let ([base "/home/scheme/irc-logs"])
(define t (make-hash))
(λ (type . text)
(hash-ref! t type (λ() (a href: (symlink #:site www-site
(format "~a/~a" base type)
(format "irc-logs/~a" type))
text))))))
(void (irc-logs ".htaccess"))
(provide irc-quick)
(define (irc-quick)
(define (chan name) @TT{@big{@strong{#@name}}})
@parlist[@strong{Discussion Channel}
@text{@irc-chat{Chat on IRC} in the @chan{racket} channel on
@a[href: "http://freenode.net"]{@tt{freenode.net}} an informal
discussion channel for all things related to Racket.
(@irc-logs['racket]{Browse the logs}.)
There is also @chan{racket-dev} (@irc-logs['racket-dev]{logs}), a channel
for notification bots.}])
(define irc-quick
@text{@parlist[@strong{IRC}
@irc-content]})

View File

@ -1,11 +1,12 @@
#lang plt-web
(require plt-web/style)
(require plt-web/style
"../testing.rkt")
(provide www-site)
(define www-site
(site "www"
#:url "http://racket-lang.org/"
#:url (rewrite-for-testing "http://racket-lang.org/")
#:navigation
(list
@a[href: (resource "stubs/pkgs/" #f)]{Packages}