diff --git a/collects/scribble/html-render.ss b/collects/scribble/html-render.ss
index 3b7bc89b..3d9a73e2 100644
--- a/collects/scribble/html-render.ss
+++ b/collects/scribble/html-render.ss
@@ -76,7 +76,8 @@
,@(map (lambda (x) (if (string? x) x (format "~a" x))) body)
"\n"))))
- #reader scribble/reader
+ #reader scribble/reader (begin ; easier to format
+
(define search-script
@script{
var search_nodes = null;
@@ -99,9 +100,15 @@
search_nodes.push(all_links[i]);
}
var search_box = document.getElementById("search_box");
- if (location.search.indexOf('?q=') == 0) {
- var search = location.search.substring(3)
- search_box.value = search;
+ if (location.search.length > 0) {
+ var paramstrs = location.search.substring(1).split(/[@";"&]/);
+ 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);
search_box.focus();
@@ -143,11 +150,30 @@
}
}})
- #reader scribble/reader
(define search-field
@`p{Search: @(input ((type "text") (id "search_box")
- (onChange "delayed_search(this.value,event);")
- (onKeyUp "delayed_search(this.value,event);")))})
+ (onchange "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
@@ -471,100 +497,83 @@
(define/public (derive-filename d) "bad.html")
(define/private (navigation d ri pre-space?)
- (let ([parent (part-parent d ri)])
- (let*-values ([(prev next) (find-siblings d ri)]
- [(prev) (if prev
- (let loop ([prev prev])
- (if (and (toc-part? prev)
- (pair? (part-parts prev)))
- (loop (car (last-pair (part-parts prev))))
- prev))
- (and parent
- (toc-part? parent)
- parent))]
- [(next) (cond
- [(and (toc-part? d)
- (pair? (part-parts d)))
- (car (part-parts d))]
- [(and (not next)
- parent
- (toc-part? parent))
- (let-values ([(prev next)
- (find-siblings parent ri)])
- next)]
- [else next])]
- [(index) (let loop ([d d])
- (let ([p (part-parent d ri)])
- (if p
- (loop p)
- (let ([subs (part-parts d)])
- (and (pair? subs)
- (let ([d (car (last-pair subs))])
- (and (part-style? d 'index)
- d)))))))])
- (if (and (not prev)
- (not next)
- (not parent)
- (not index)
- (not up-path))
- null
- `(,@(if pre-space? '((p nbsp)) null)
- (div ([class "navleft"])
- ,@(render-content
- (append
- (list
- (make-element
- (if parent
- (make-target-url "index.html" #f)
- "nonavigation")
- contents-content))
- (if index
- (list
- 'nbsp
- (if (eq? d index)
- (make-element
- "nonavigation"
- index-content)
- (make-link-element
- #f
- index-content
- (car (part-tags index)))))
- null))
- d
- ri))
- (div ([class "navright"])
- ,@(render-content
- (list
- (make-element
- (if parent
- (make-target-url (if prev
- (derive-filename prev)
- "index.html")
- #f)
- "nonavigation")
- prev-content)
- sep-element
- (make-element
- (if (or parent
- up-path)
- (make-target-url
- (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 parent (part-parent d ri))
+ (let*-values ([(prev next) (find-siblings d ri)]
+ [(prev) (if prev
+ (let loop ([prev prev])
+ (if (and (toc-part? prev)
+ (pair? (part-parts prev)))
+ (loop (car (last-pair (part-parts prev))))
+ prev))
+ (and parent (toc-part? parent) parent))]
+ [(next) (cond
+ [(and (toc-part? d)
+ (pair? (part-parts d)))
+ (car (part-parts d))]
+ [(and (not next) parent (toc-part? parent))
+ (let-values ([(prev next)
+ (find-siblings parent ri)])
+ next)]
+ [else next])]
+ [(index) (let loop ([d d])
+ (let ([p (part-parent d ri)])
+ (if p
+ (loop p)
+ (let ([subs (part-parts d)])
+ (and (pair? subs)
+ (let ([d (car (last-pair subs))])
+ (and (part-style? d 'index)
+ d)))))))])
+ (define (render . content)
+ (render-content content d ri))
+ (if (not (or prev next parent index up-path))
+ null
+ `(,@(if pre-space? '((p nbsp)) null)
+ (div ([class "navleft"])
+ ,@(render (make-element
+ (if parent
+ (make-target-url "index.html" #f)
+ "nonavigation")
+ contents-content))
+ ,@(if index
+ `(nbsp
+ ,@(render (if (eq? d index)
+ (make-element "nonavigation" index-content)
+ (make-link-element
+ #f index-content (car (part-tags index)))))
+ ,@(if (eq? d index)
+ null
+ ;; FIXME: put the real url of the index file
+ `((small nbsp ,(search-index-box "doc-index.html")))))
+ null))
+ (div ([class "navright"])
+ ,@(render
+ (make-element
+ (if parent
+ (make-target-url
+ (if prev (derive-filename prev) "index.html")
+ #f)
+ "nonavigation")
+ prev-content)
+ sep-element
+ (make-element
+ (if (or parent up-path)
+ (make-target-url
+ (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)))
+ (p nbsp)))))
(define/override (render-one d ri fn)
(render-one-part d ri fn null))