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,100 +497,83 @@
(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])
(if (and (toc-part? prev) (if (and (toc-part? prev)
(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) [(next) (cond
parent))] [(and (toc-part? d)
[(next) (cond (pair? (part-parts d)))
[(and (toc-part? d) (car (part-parts d))]
(pair? (part-parts d))) [(and (not next) parent (toc-part? parent))
(car (part-parts d))] (let-values ([(prev next)
[(and (not next) (find-siblings parent ri)])
parent next)]
(toc-part? parent)) [else next])]
(let-values ([(prev next) [(index) (let loop ([d d])
(find-siblings parent ri)]) (let ([p (part-parent d ri)])
next)] (if p
[else next])] (loop p)
[(index) (let loop ([d d]) (let ([subs (part-parts d)])
(let ([p (part-parent d ri)]) (and (pair? subs)
(if p (let ([d (car (last-pair subs))])
(loop p) (and (part-style? d 'index)
(let ([subs (part-parts d)]) d)))))))])
(and (pair? subs) (define (render . content)
(let ([d (car (last-pair subs))]) (render-content content d ri))
(and (part-style? d 'index) (if (not (or prev next parent index up-path))
d)))))))]) null
(if (and (not prev) `(,@(if pre-space? '((p nbsp)) null)
(not next) (div ([class "navleft"])
(not parent) ,@(render (make-element
(not index) (if parent
(not up-path)) (make-target-url "index.html" #f)
null "nonavigation")
`(,@(if pre-space? '((p nbsp)) null) contents-content))
(div ([class "navleft"]) ,@(if index
,@(render-content `(nbsp
(append ,@(render (if (eq? d index)
(list (make-element "nonavigation" index-content)
(make-element (make-link-element
(if parent #f index-content (car (part-tags index)))))
(make-target-url "index.html" #f) ,@(if (eq? d index)
"nonavigation") null
contents-content)) ;; FIXME: put the real url of the index file
(if index `((small nbsp ,(search-index-box "doc-index.html")))))
(list null))
'nbsp (div ([class "navright"])
(if (eq? d index) ,@(render
(make-element (make-element
"nonavigation" (if parent
index-content) (make-target-url
(make-link-element (if prev (derive-filename prev) "index.html")
#f #f)
index-content "nonavigation")
(car (part-tags index))))) prev-content)
null)) sep-element
d (make-element
ri)) (if (or parent up-path)
(div ([class "navright"]) (make-target-url
,@(render-content (if parent
(list (if (toc-part? parent)
(make-element (derive-filename parent)
(if parent "index.html")
(make-target-url (if prev up-path)
(derive-filename prev) #f)
"index.html") "nonavigation")
#f) up-content)
"nonavigation") sep-element
prev-content) (make-element
sep-element (if next
(make-element (make-target-url (derive-filename next) #f)
(if (or parent "nonavigation")
up-path) next-content)))
(make-target-url (p nbsp)))))
(if parent
(if (toc-part? parent)
(derive-filename parent)
"index.html")
up-path)
#f)
"nonavigation")
up-content)
sep-element
(make-element
(if next
(make-target-url (derive-filename next) #f)
"nonavigation")
next-content))
d
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))