diff --git a/collects/meta/web/common/layout.rkt b/collects/meta/web/common/layout.rkt index 5c10edb4a5..7c2c20e7bc 100644 --- a/collects/meta/web/common/layout.rkt +++ b/collects/meta/web/common/layout.rkt @@ -27,7 +27,7 @@ #:file [file (if (and id suffix) (let ([f (format "~a.~a" (force id) suffix)]) - (if dir (string-append dir "/" f) f)) + (if dir (web-path dir f) f)) (error 'plain "missing `#:file', or `#:id' and `#:suffix'"))] #:referrer @@ -40,7 +40,7 @@ referrer)) ;; page layout function -;; (not providing `page', see `define-pager' below) +;; (not providing `page', see `define+provide-context' below) (define-syntax (page stx) (syntax-case stx () [(_ . xs) (process-contents 'page #'page* stx #'xs)])) (define (page* #:id [id #f] @@ -77,7 +77,7 @@ (apply body `(,@body-attrs ,content)) (body content))})) (define this - (resource (if dir (string-append dir "/" file) file) + (resource (if dir (web-path dir file) file) (file-writer output-xml page) referrer)) this) @@ -151,11 +151,14 @@ [else (error 'resources "internal error")]) more)))) -;; `define-pager' should be used in each toplevel directory (= each +;; `define+provide-context' should be used in each toplevel directory (= each ;; site) to have its own resources (and possibly other customizations). -(provide define-pager) -(define-syntax-rule (define-pager page-id dir) +(provide define+provide-context) +(define-syntax-rule (define+provide-context page-id copyfile-id dir) (begin (define resources (make-resources (make-icon dir) (make-logo dir) (make-style dir))) (define-syntax-rule (page-id . xs) - (page #:resources resources #:dir dir . xs)))) + (page #:resources resources #:dir dir . xs)) + (define (copyfile-id source [target #f] [referrer values]) + (copyfile-resource source target referrer #:dir dir)) + (provide page-id copyfile-id))) diff --git a/collects/meta/web/common/utils.rkt b/collects/meta/web/common/utils.rkt index b4c0f85ce0..c349a9a1ff 100644 --- a/collects/meta/web/common/utils.rkt +++ b/collects/meta/web/common/utils.rkt @@ -13,8 +13,11 @@ #`(build-path '#,src path paths ...))])) (provide copyfile-resource) -(define (copyfile-resource source target [referrer values]) - (resource target (lambda (file) (copy-file source file)) referrer)) +(define (copyfile-resource source [target #f] [referrer values] #:dir [dir #f]) + (let ([target (or target (let-values ([(base file dir?) (split-path source)]) + (path->string file)))]) + (resource (if dir (web-path dir target) target) + (lambda (file) (copy-file source file)) referrer))) (provide web-path) (define (web-path . xs) diff --git a/collects/meta/web/download/shared.rkt b/collects/meta/web/download/shared.rkt index aab617b1d1..fa0baa753d 100644 --- a/collects/meta/web/download/shared.rkt +++ b/collects/meta/web/download/shared.rkt @@ -2,4 +2,4 @@ (provide page (all-from-out "../common.rkt")) -(define-pager page "download") +(define+provide-context page copyfile "download") diff --git a/collects/meta/web/stubs/shared.rkt b/collects/meta/web/stubs/shared.rkt index 3e2bf59272..3cb8eb1247 100644 --- a/collects/meta/web/stubs/shared.rkt +++ b/collects/meta/web/stubs/shared.rkt @@ -2,4 +2,4 @@ (provide page (all-from-out "../common.rkt")) -(define-pager page "stubs") +(define+provide-context page copyfile "stubs") diff --git a/collects/meta/web/www/shared.rkt b/collects/meta/web/www/shared.rkt index 1339150632..ebb2acc100 100644 --- a/collects/meta/web/www/shared.rkt +++ b/collects/meta/web/www/shared.rkt @@ -2,4 +2,4 @@ (provide page (all-from-out "../common.rkt")) -(define-pager page "www") +(define+provide-context page copyfile "www")