util.ss
#lang scheme/base
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; JSMGR: Javascript Manager
;;
;; a Javascript Manager/builder for managing your complex ajax scripts 
;;
;; Bonzai Lab, LLC.  All rights reserved.
;;
;; Licensed under LGPL.
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; util.ss
;; yc 8/20/2009 - first version 
(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))
 )