diff --git a/collects/meta/web/README b/collects/meta/web/README index c6fd228aea..70f1f3df26 100644 --- a/collects/meta/web/README +++ b/collects/meta/web/README @@ -3,4 +3,11 @@ * common: specific code for the PLT web pages. -* other stuff: actual content. +* www: actual content of main site. + +* download: content of download site (only installer pages and such) + +* minis: smaller sites which are implemented in one-file each. + +* stubs: template "sites" that are intended to be hooked into other + systems to get the plt look. diff --git a/collects/meta/web/config.rkt b/collects/meta/web/config.rkt index a189b2a180..611d408bc5 100644 --- a/collects/meta/web/config.rkt +++ b/collects/meta/web/config.rkt @@ -2,17 +2,19 @@ (provide sites) (define sites - '(("www" "http://racket-lang.org/") - ("download" "http://download.racket-lang.org/") - ("stubs/planet" "http://planet.racket-lang.org/") - ("stubs/pre" "http://pre.racket-lang.org/") - ("stubs/git" "http://git.racket-lang.org/") - ("stubs/blog" "http://blog.racket-lang.org/"))) + '(("www" "http://racket-lang.org/") + ("download" "http://download.racket-lang.org/") + ("lists" "http://lists.racket-lang.org/") + ("stubs/planet" "http://planet.racket-lang.org/") + ("stubs/pre" "http://pre.racket-lang.org/") + ("stubs/git" "http://git.racket-lang.org/") + ("stubs/blog" "http://blog.racket-lang.org/") + ("stubs/mailman" "http://lists.racket-lang.org/"))) (provide distributions) (define distributions ;; Each is a "hostname:dest-path", and then a list of directories to ;; put in that path. (Warning: "dest" should not be a top-level ;; directory that already exists.) - '(["champlain:/www" "www" "download"] + '(["champlain:/www" "www" "download" "lists" "stubs/mailman"] ["winooski:~wwwplanet/html-template/" "stubs/planet/"])) ; note "/"s diff --git a/collects/meta/web/minis/lists.rkt b/collects/meta/web/minis/lists.rkt new file mode 100644 index 0000000000..518397b179 --- /dev/null +++ b/collects/meta/web/minis/lists.rkt @@ -0,0 +1,7 @@ +#lang at-exp s-exp "../common.rkt" + +(define-context "lists") + +(define lists + @page[#:title "Mailing Lists" #:file ""]{ + This is the Racket mailing list server.}) diff --git a/collects/meta/web/minis/main.rkt b/collects/meta/web/minis/main.rkt new file mode 100644 index 0000000000..4791b4e8ab --- /dev/null +++ b/collects/meta/web/minis/main.rkt @@ -0,0 +1,3 @@ +#lang at-exp s-exp "../common.rkt" + +(require "lists.rkt") diff --git a/collects/meta/web/navbar.rkt b/collects/meta/web/navbar.rkt index 13f4018a84..8e46071315 100644 --- a/collects/meta/web/navbar.rkt +++ b/collects/meta/web/navbar.rkt @@ -1,5 +1,5 @@ #lang at-exp s-exp "common.rkt" -(require "www/main.rkt" "download/main.rkt" "stubs/planet.rkt") +(require "www/main.rkt" "download/main.rkt" "minis/main.rkt" "stubs/main.rkt") (set-navbar! (list main download -docs planet community outreach+research) help) diff --git a/collects/meta/web/stubs/mailman.rkt b/collects/meta/web/stubs/mailman.rkt new file mode 100644 index 0000000000..7db5509cdc --- /dev/null +++ b/collects/meta/web/stubs/mailman.rkt @@ -0,0 +1,326 @@ +#lang at-exp s-exp "../common.rkt" + +(define-context "stubs/mailman") + +(define (MM . tag) @literal{}) +(define (MM/ . tag) @literal{}) +(define (MMform name . body) + (list @MM{@(and name (list name "-"))Form-Start} body @MM{Form-End})) + +(define style-header + @style/inline{ + h1 { + text-align: center; + background-color: #9cf; + padding: 0.5em; + font-size: 150%; + font-weight: bold; + } + h2 { + text-align: left; + padding: 0.1em 0.5em; + background-color: #fda; + font-size: 120%; + font-weight: bold; + } + .subp { + margin: 0.5ex 0 0.5ex 1em; + }}) + +(define (subp . body) (apply div class: 'subp body)) +(define (graytd . body) (apply td bgcolor: "#ddd" body)) + +(define listinfo + @page[#:title @list{Mailing lists: @MM{List-Name}} + #:extra-headers style-header]{ + @; -------------------- + @comment{@|| + Based on the Mailman file "listinfo.html", revision: 5865 + Modified to fit the racket pages, add a mail-archive searchbox + @||} + @; -------------------- + @h1{@MM{List-Name}: @MM{List-Description}} + @; -------------------- + @h2{About @MM{List-Name} + @span[style: '("float: right; font-weight: normal; font-size: 80%;" + " margin-top: 4px;")]{ + @MMform['Lang]{@MM{displang-box} @MM{list-langs}}}} + @subp{@MM{List-Info}} + @subp{To see the collection of prior postings to the list, visit the + @MM{Archive}@MM{List-Name} Archives@MM/{Archive}. + @MM{Restricted-List-Message}} + @; This is the mail-archive search box + @form[action: "http://www.mail-archive.com/search" method: 'get]{@subp{ + @input[type: 'hidden name: 'l value: @MM{Posting-Addr}] + Archives are also available on + @a[href: @list{http://www.mail-archive.com/@MM{Posting-Addr}/}]{ + @tt{mail-archive.com}} + which you can use for searching: + @input[type: 'text name: 'q value: "" size: 20]}} + @; -------------------- + @h2{Using @MM{List-Name}} + @subp{To post a message to all the list members, send email to + @a[href: @list{mailto:@MM{Posting-Addr}}]{@MM{Posting-Addr}}.} + @subp{You can subscribe to the list, or change your existing subscription, + in the sections below.} + @; -------------------- + @h2{Subscribing to @MM{List-Name}} + @subp{Subscribe to @MM{List-Name} by filling out the following form. + @MM{List-Subscription-Msg}} + @subp{ + @MMform['Subscribe]{ + @table[cellspacing: 2 cellpadding: 2 width: "90%" align: 'center]{ + @tr{@graytd{Your email address:} + @td{@MM{Subscribe-Box}} + @td{@nbsp}} + @tr{@graytd{Your name (optional):} + @td{@MM{fullname-box}} + @td{@nbsp}} + @tr{@td[colspan: 3 style: "font-size: 82.5%;"]{ + @p{You may enter a privacy password below. This provides + only mild security, but should prevent others from messing + with your subscription. @b{Do not use a valuable password} + as it will occasionally be emailed back to you in + cleartext.} + @p{If you choose not to enter a password, one will be + automatically generated for you, and it will be sent to you + once you've confirmed your subscription. You can always + request a mail-back of your password when you edit your + personal options.} + @MM{Reminder}}} + @tr{@graytd{Pick a password:} + @td{@MM{New-Password-Box}} + @td{@nbsp}} + @tr{@graytd{Reenter password to confirm:} + @td{@MM{Confirm-Password}} + @td{@nbsp}} + @tr{@graytd{Which language do you prefer to display your messages?} + @td{@MM{list-langs}} + @td{@nbsp}} + @MM{digest-question-start} + @tr{@td{Would you like to receive list mail batched in a daily + digest?} + @td{@MM{Undigest-Radio-Button} No + @MM{Digest-Radio-Button} Yes} + @td{@nbsp}} + @MM{digest-question-end} + @tr{@td[colspan: 3]{ + @p[style: "text-align: center;"]{ + @MM{Subscribe-Button}}}}}}} + @; -------------------- + @h2{@a[name: 'subscribers]{@MM{List-Name} Subscribers}} + @subp{@MMform['Options]{@MM{Editing-Options}}} + @; not needed: @subp{@MMform['Roster]{@MM{Roster-Option}}} + @; -------------------- + @h2{@nbsp} + @MM{Mailman-Footer}}) + +(define subscribe + @page[#:title @list{@MM{List-Name} Subscription results} + #:extra-headers style-header]{ + @; -------------------- + @comment{@|| + Based on the Mailman file "subscribe.html", revision: 3550 + Modified to fit the racket pages + @||} + @; -------------------- + @h1{@MM{List-Name} Subscription results} + @subp{@MM{Results}} + @MM{Mailman-Footer}}) + +(define options + @page[#:title @list{@MM{Presentable-User} membership configuration + for @MM{List-Name}} + #:extra-headers style-header]{ + @; -------------------- + @comment{@|| + Based on the Mailman file "options.html" (no revision specified) + Modified to fit the racket pages + @||} + @; -------------------- + @h1{@MM{List-Name} mailing list membership configuration for + @MM{Presentable-User}} + @subp{@div[style: "float: right;"]{@MMform[#f]{@MM{logout-button}}} + @b{@MM{Presentable-User}}'s subscription status, password, and options + for the @MM{List-Name} mailing list.} + @subp{@MM{Case-Preserved-User} + @MM{Disabled-Notice} + @div[style: "background-color: #faa;"]{@MM{Results}}} + @(define (tablesec . body) + (apply table cellspacing: 5 cellpadding: 3 width: "100%" align: 'center + body)) + @(define (h2sub . body) + @h2[style: "margin-bottom: 0; font-size: 100%;"]{@body}) + @(define (center . body) + @div[style: "text-align: center; margin-top: 1ex;"]{@body}) + @(define (global-checkbox button-name) + @div[align: 'right]{@MM{global-@|button-name|-button}@i{Set globally}}) + @MMform[#f]{ + @tablesec{ + @tr{@td[colspan: 2]{ + @h2sub{Changing your @MM{List-Name} membership information} + @subp{You can change the address that you are subscribed to the + mailing list with by entering the new address in the fields + below. Note that a confirmation email will be sent to the new + address, and the change must be confirmed before it is + processed. + @small{(Confirmations time out after about + @MM{pending-days}.)}} + @subp{You can also optionally set or change your real name + (i.e. @em{John Smith}).} + @subp{If you want to make the membership changes for all the + lists that you are subscribed to at @MM{host}, turn on the + @em{Change globally} check box.}}} + @tr{@td[align: 'center]{ + @table[cellspacing: 2 cellpadding: 2 width: "80%"]{ + @tr{@graytd[align: 'right]{New address:} + @td{@MM{new-address-box}}} + @tr{@graytd[align: 'right]{Again to confirm:} + @td{@MM{confirm-address-box}}}}} + @td[align: 'center]{ + @table[cellspacing: 2 cellpadding: 2 width: "80%"]{ + @tr{@graytd[align: 'right]{Your name (optional):} + @td{@MM{fullname-box}}}}}} + @tr{@td[colspan: 2 align: 'center]{@MM{change-address-button}}} + @tr{@td[colspan: 2 align: 'center]{ + @MM{global-change-of-address}Change globally}}} + @tablesec{ + @tr{@td[width: "50%"]{@h2sub{Unsubscribing from @MM{List-Name}}} + @td[width: "50%"]{@h2sub{Your other @MM{Host} subscriptions}}} + @tr{@td{Turn on the confirmation checkbox and hit this button to + unsubscribe from this mailing list. + @br + @strong{Warning:} This action will be taken immediately! + @center{@MM{Unsubscribe-Button}}} + @td{You can view a list of all the other mailing lists at + @MM{host} for which you are a member. Use this if you want to + make the same membership option changes to this other + subscriptions. + @center{@MM{Other-Subscriptions-Submit}}}}} + @tablesec{ + @tr{@td[colspan: 2]{@h2sub{Your @MM{List-Name} Password}}} + @tr[valign: 'top]{ + @td[width: "50%"]{ + @h3{@a[name: "reminder"]{Forgotten Your Password?}} + Click this button to have your password emailed to your membership + address. + @br + @MM{Umbrella-Notice} + @center{@MM{Email-My-Pw}}} + @td[width: "50%"]{ + @h3{@a[name: "changepw"]{Change Your Password}} + @table[cellspacing: 2 cellpadding: 2 width: "70%" align: 'center]{ + @tr{@graytd[align: 'right]{New password:} + @td{@MM{New-Pass-Box}}} + @tr{@graytd[align: 'right]{Again to confirm:} + @td{@MM{Confirm-Pass-Box}}}} + @center{@MM{Change-Pass-Button}} + @center{@MM{global-pw-changes-button}Change globally}}}} + @tablesec{ + @tr{@td[colspan: 2]{@h2sub{Your @MM{List-Name} Subscription Options}}} + @tr{@td[colspan: 2]{ + @subp{@em{Current values are checked.}} + @subp{Note that some of the options have a @em{Set globally} + checkbox. Checking this field will cause the changes to be + made to every mailing list that you are a member of on + @MM{host}. Click on @em{List my other subscriptions} above to + see which other mailing lists you are subscribed to.}}} + @tr{@graytd[width: "80%"]{ + @a[name: "disable"]{@strong{Mail delivery}} @br + Set this option to @em{Enabled} to receive messages posted to + this mailing list. Set it to @em{Disabled} if you want to stay + subscribed, but don't want mail delivered to you for a while + (e.g. you're reading the list elsewhere).} + @graytd[width: "20%"]{ + @MM{delivery-enable-button}Enabled @br + @MM{delivery-disable-button}Disabled @br + @global-checkbox{deliver}}} + @tr{@graytd{@strong{Set Digest Mode} @br + If you turn digest mode on, you'll get posts bundled together + (usually one per day but possibly more on busy lists), instead of + singly when they're sent. If digest mode is changed from on to + off, you may receive one last digest.} + @graytd{ + @MM{Undigest-Radio-Button}Off @br + @MM{Digest-Radio-Button}On}} + @tr{@graytd{@strong{Get MIME or Plain Text Digests?} @br + Your mail reader may or may not support MIME digests. In general + MIME digests are preferred, but if you have a problem reading + them, select plain text digests.} + @graytd{ + @MM{Mime-Digests-Button}MIME @br + @MM{Plain-Digests-Button}Plain Text @br + @global-checkbox{mime}}} + @tr{@graytd{@strong{Receive your own posts to the list?} @br + Ordinarily, you will get a copy of every message you post to the + list. If you don't want to receive this copy, set this option to + @em{No}.} + @graytd{@MM{dont-receive-own-mail-button}No @br + @MM{receive-own-mail-button}Yes}} + @tr{@graytd{@strong{Receive acknowledgement mail when you send mail to + the list?}} + @graytd{ + @MM{dont-ack-posts-button}No @br + @MM{ack-posts-button}Yes}} + @tr{@graytd{@strong{Get password reminder email for this list?} @br + Once a month, you will get an email containing a password + reminder for every list at this host to which you are subscribed. + You can turn this off on a per-list basis by selecting @em{No} + for this option. If you turn off password reminders for all the + lists you are subscribed to, no reminder email will be sent to + you.} + @graytd{ + @MM{dont-get-password-reminder-button}No @br + @MM{get-password-reminder-button}Yes @p + @global-checkbox{remind}}} + @tr{@graytd{@strong{Conceal yourself from subscriber list?} @br + When someone views the list membership, your email address is + normally shown (in an obscured fashion to thwart spam + harvesters). If you do not want your email address to show up on + this membership roster at all, select @em{Yes} for this option.} + @graytd{ + @MM{Public-Subscription-Button}No @br + @MM{Hide-Subscription-Button}Yes}} + @tr{@graytd{@strong{What language do you prefer?}} + @graytd{@MM{list-langs}}} + @tr{@graytd{@strong{Which topic categories would you like to subscribe + to?} @br + By selecting one or more topics, you can filter the traffic on + the mailing list, so as to receive only a subset of the messages. + If a message matches one of your selected topics, then you will + get the message,otherwise you will not. + @br + If a message does not match any topic, the delivery rule depends + on the setting of the option below. If you do not select any + topics of interest, you will get all the messages sent to the + mailing list.} + @graytd{@MM{topics}}} + @tr{@graytd{@strong{Do you want to receive messages that do not match + any topic filter?} @br + This option only takes effect if you've subscribed to at least + one topic above. It describes what the default delivery rule is + for messages that don't match any topic filter. Selecting + @em{No} says that if the message does not match any topic + filters, then you won't get the message, while selecting @em{Yes} + says to deliver such non-matching messages to you. + @br + If no topics of interest are selected above, then you will + receive every message sent to the mailing list.} + @graytd{ + @MM{suppress-nonmatching-topics}No @br + @MM{receive-nonmatching-topics}Yes}} + @tr{@graytd{@strong{Avoid duplicate copies of messages?} @br + When you are listed explicitly in the @tt{To:} or @tt{Cc:} + headers of a list message, you can opt to not receive another + copy from the mailing list. Select @em{Yes} to avoid receiving + copies from the mailing list; select @em{No} to receive copies. + @br + If the list has member personalized messages enabled, and you + elect to receive copies, every copy will have a + @tt{X-Mailman-Copy: yes} header added to it.} + @graytd{ + @MM{receive-duplicates-button}No @br + @MM{dont-receive-duplicates-button}Yes @br + @global-checkbox{nodupes}}} + @tr{@td[colspan: 2 align: 'center]{@MM{options-Submit-button}}}}} + @MM{Mailman-Footer}}) diff --git a/collects/meta/web/stubs/main.rkt b/collects/meta/web/stubs/main.rkt new file mode 100644 index 0000000000..ca797470d8 --- /dev/null +++ b/collects/meta/web/stubs/main.rkt @@ -0,0 +1,7 @@ +#lang at-exp s-exp "../common.rkt" + +(provide planet) + +(require "planet.rkt" "blog.rkt" + "pre.rkt" "git.rkt" + "mailman.rkt")