50 lines
2.3 KiB
Scheme
50 lines
2.3 KiB
Scheme
#lang scheme/base
|
|
|
|
(require setup/dirs net/sendurl net/uri-codec)
|
|
(provide perform-search send-main-page)
|
|
|
|
(define search-dir "search/")
|
|
|
|
;; Almost nothing to do here -- the real work is done in the browser,
|
|
;; using javascript.
|
|
|
|
(define (send-main-page #:sub [sub "index.html"]
|
|
#:fragment [fragment #f] #:query [query #f]
|
|
#:notify [notify void])
|
|
(let* ([path (build-path (find-user-doc-dir) sub)]
|
|
[path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
|
|
(notify path)
|
|
(send-url/file path #:fragment fragment #:query query)))
|
|
|
|
;; This is an example of changing this code to use the online manuals.
|
|
;; Useful in cases like schools that use systems that have problems
|
|
;; running a browser on local files (like NEU). If you use this, then
|
|
;; it is a good idea to put the documentation tree somewhere local, to
|
|
;; have better interaction times and not overload the PLT server.
|
|
;; (define doc-url "http://download.plt-scheme.org/doc/4.1/html/")
|
|
;; (define (send-main-page #:sub [sub "index.html"]
|
|
;; #:fragment [fragment #f] #:query [query #f])
|
|
;; (define (part pfx x) (if x (list pfx x) '()))
|
|
;; (send-url (apply string-append doc-url sub
|
|
;; (append (part "#" fragment) (part "?" query)))))
|
|
|
|
(define (perform-search str [context #f])
|
|
;; `context' can be a pre-filter query string to use for a context,
|
|
;; optionally a list of one and a label to display for that context.
|
|
;; In any case, when a context is specified, the search actually
|
|
;; goes through the search-context.html page which tranpolines to
|
|
;; the main search page after setting the cookies (so when the
|
|
;; search page is refreshed it won't reset the context).
|
|
(let* ([label (and (list? context) (= 2 (length context)) (cadr context))]
|
|
[context (if (pair? context) (car context) context)]
|
|
[page (if context "search-context.html" "index.html")]
|
|
[query (format "q=~a" (uri-encode str))]
|
|
[query (if context
|
|
(format "~a&hq=~a~a"
|
|
query (uri-encode context)
|
|
(if label
|
|
(format "&label=~a" (uri-encode label))
|
|
""))
|
|
query)])
|
|
(send-main-page #:sub (string-append search-dir page) #:query query)))
|