search box

svn: r8496

original commit: 58e12e98359f076bcdac08547b41a7afabfc0cb2
This commit is contained in:
Eli Barzilay 2008-02-01 20:08:00 +00:00
parent 43c556ccc2
commit 6c9bd9f30d

View File

@ -76,7 +76,8 @@
,@(map (lambda (x) (if (string? x) x (format "~a" x))) body) ,@(map (lambda (x) (if (string? x) x (format "~a" x))) body)
"\n")))) "\n"))))
#reader scribble/reader #reader scribble/reader (begin ; easier to format
(define search-script (define search-script
@script{ @script{
var search_nodes = null; var search_nodes = null;
@ -99,9 +100,15 @@
search_nodes.push(all_links[i]); search_nodes.push(all_links[i]);
} }
var search_box = document.getElementById("search_box"); var search_box = document.getElementById("search_box");
if (location.search.indexOf('?q=') == 0) { if (location.search.length > 0) {
var search = location.search.substring(3) var paramstrs = location.search.substring(1).split(/[@";"&]/);
search_box.value = search; for (var i in paramstrs) {
var param = paramstrs[i].split(/=/);
if (param.length == 2 && param[0] == "q") {
search_box.value = unescape(param[1]).replace(/\+/g," ");
break;
}
}
} }
if (search_box.value != "") do_search(search_box.value); if (search_box.value != "") do_search(search_box.value);
search_box.focus(); search_box.focus();
@ -143,11 +150,30 @@
} }
}}) }})
#reader scribble/reader
(define search-field (define search-field
@`p{Search: @(input ((type "text") (id "search_box") @`p{Search: @(input ((type "text") (id "search_box")
(onChange "delayed_search(this.value,event);") (onchange "delayed_search(this.value,event);")
(onKeyUp "delayed_search(this.value,event);")))}) (onkeyup "delayed_search(this.value,event);")))})
(define (search-index-box index-url) ; appears on every page
(let ([sa string-append])
`(input
((style ,(sa "font-size: 75%; margin: 0px; padding: 0px; border: 1px;"
" background-color: #eee; color: #888;"))
(type "text")
(value "...search...")
(onkeypress ,(sa "if (event && event.keyCode==13"
" && this.value.indexOf(\"...search...\")<0) {"
" location=\"doc-index.html?q=\"+escape(this.value);"
" };"))
(onfocus ,(sa "this.style.color=\"black\";"
" if (this.value.indexOf(\"...search...\")>=0)"
" this.value=\"\";"))
(onblur ,(sa "if (this.value.match(/^ *$/)) {"
" this.style.color=\"#888\";"
" this.value=\"...search...\"; }"))))))
)
;; ---------------------------------------- ;; ----------------------------------------
;; main mixin ;; main mixin
@ -471,7 +497,7 @@
(define/public (derive-filename d) "bad.html") (define/public (derive-filename d) "bad.html")
(define/private (navigation d ri pre-space?) (define/private (navigation d ri pre-space?)
(let ([parent (part-parent d ri)]) (define parent (part-parent d ri))
(let*-values ([(prev next) (find-siblings d ri)] (let*-values ([(prev next) (find-siblings d ri)]
[(prev) (if prev [(prev) (if prev
(let loop ([prev prev]) (let loop ([prev prev])
@ -479,16 +505,12 @@
(pair? (part-parts prev))) (pair? (part-parts prev)))
(loop (car (last-pair (part-parts prev)))) (loop (car (last-pair (part-parts prev))))
prev)) prev))
(and parent (and parent (toc-part? parent) parent))]
(toc-part? parent)
parent))]
[(next) (cond [(next) (cond
[(and (toc-part? d) [(and (toc-part? d)
(pair? (part-parts d))) (pair? (part-parts d)))
(car (part-parts d))] (car (part-parts d))]
[(and (not next) [(and (not next) parent (toc-part? parent))
parent
(toc-part? parent))
(let-values ([(prev next) (let-values ([(prev next)
(find-siblings parent ri)]) (find-siblings parent ri)])
next)] next)]
@ -502,51 +524,40 @@
(let ([d (car (last-pair subs))]) (let ([d (car (last-pair subs))])
(and (part-style? d 'index) (and (part-style? d 'index)
d)))))))]) d)))))))])
(if (and (not prev) (define (render . content)
(not next) (render-content content d ri))
(not parent) (if (not (or prev next parent index up-path))
(not index)
(not up-path))
null null
`(,@(if pre-space? '((p nbsp)) null) `(,@(if pre-space? '((p nbsp)) null)
(div ([class "navleft"]) (div ([class "navleft"])
,@(render-content ,@(render (make-element
(append
(list
(make-element
(if parent (if parent
(make-target-url "index.html" #f) (make-target-url "index.html" #f)
"nonavigation") "nonavigation")
contents-content)) contents-content))
(if index ,@(if index
(list `(nbsp
'nbsp ,@(render (if (eq? d index)
(if (eq? d index) (make-element "nonavigation" index-content)
(make-element
"nonavigation"
index-content)
(make-link-element (make-link-element
#f #f index-content (car (part-tags index)))))
index-content ,@(if (eq? d index)
(car (part-tags index))))) null
;; FIXME: put the real url of the index file
`((small nbsp ,(search-index-box "doc-index.html")))))
null)) null))
d
ri))
(div ([class "navright"]) (div ([class "navright"])
,@(render-content ,@(render
(list
(make-element (make-element
(if parent (if parent
(make-target-url (if prev (make-target-url
(derive-filename prev) (if prev (derive-filename prev) "index.html")
"index.html")
#f) #f)
"nonavigation") "nonavigation")
prev-content) prev-content)
sep-element sep-element
(make-element (make-element
(if (or parent (if (or parent up-path)
up-path)
(make-target-url (make-target-url
(if parent (if parent
(if (toc-part? parent) (if (toc-part? parent)
@ -561,10 +572,8 @@
(if next (if next
(make-target-url (derive-filename next) #f) (make-target-url (derive-filename next) #f)
"nonavigation") "nonavigation")
next-content)) next-content)))
d (p nbsp)))))
ri))
(p nbsp))))))
(define/override (render-one d ri fn) (define/override (render-one d ri fn)
(render-one-part d ri fn null)) (render-one-part d ri fn null))