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:
parent
3ec206b78a
commit
1b72aa175a
|
@ -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-))
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
21
pkgs/plt-services/meta/new-web/download/indexes.rkt
Normal file
21
pkgs/plt-services/meta/new-web/download/indexes.rkt
Normal 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)
|
|
@ -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)])
|
||||
|
|
|
@ -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/")))
|
||||
|
|
|
@ -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))))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}.}]})
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
9
pkgs/plt-services/meta/new-web/testing.rkt
Normal file
9
pkgs/plt-services/meta/new-web/testing.rkt
Normal 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)
|
|
@ -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)))])
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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!}}})
|
||||
|
|
|
@ -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.}}
|
||||
|
@ -440,11 +440,8 @@ explains how to install
|
|||
@panetitle{Discussion}
|
||||
@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}.}
|
||||
@p{@a[href: "http://racket-lang.org/irc-chat.html"]{IRC} —
|
||||
@irc-content}
|
||||
|
||||
@p{@people —
|
||||
The people behind Racket.}
|
||||
|
|
|
@ -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]})
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue
Block a user