#lang scheme/base
(require net/url
scheme/contract
)
(define js-base-path (make-parameter "/js"))
(define (js-url path . paths)
(let ((url (string->url (js-base-path))))
(set-url-query! url (map (lambda (path)
(cons 's path))
(cons path paths)))
(regexp-replace* #px"(\\&)([^a])" (url->string url) ";\\2")))
(define (script* path . paths)
`(script ((type "text/javascript") (defer "defer") (src ,(apply js-url path paths))) ""))
(define css-base-path (make-parameter "/css"))
(define (css-url path . paths)
(let ((url (string->url (css-base-path))))
(set-url-query! url (map (lambda (path)
(cons 's path))
(cons path paths)))
(regexp-replace* #px"(\\&)([^a])" (url->string url) ";\\2")))
(define (css* path . paths)
`(link ((rel "stylesheet") (type "text/css") (href ,(apply css-url path paths)))))
(provide/contract
(js-base-path (parameter/c path-string?))
(js-url (->* (path-string?)
()
#:rest (listof path-string?)
string?))
(script* (->* (path-string?)
()
#:rest (listof path-string?)
any))
(css-base-path (parameter/c path-string?))
(css-url (->* (path-string?)
()
#:rest (listof path-string?)
string?))
(css* (->* (path-string?)
()
#:rest (listof path-string?)
any))
)