diff --git a/breezewiki.rkt b/breezewiki.rkt index aeaaa89..dfb405e 100644 --- a/breezewiki.rkt +++ b/breezewiki.rkt @@ -10,6 +10,7 @@ (make-reloadable-entry-point (quote varname) filename)))) (require-reloadable "src/page-category.rkt" page-category) +(require-reloadable "src/page-global-search.rkt" page-global-search) (require-reloadable "src/page-home.rkt" page-home) (require-reloadable "src/page-not-found.rkt" page-not-found) (require-reloadable "src/page-proxy.rkt" page-proxy) @@ -31,6 +32,7 @@ (dispatcher-tree ; order of these does not matter page-category + page-global-search page-home page-not-found page-proxy diff --git a/dist.rkt b/dist.rkt index 596a1b9..a626695 100644 --- a/dist.rkt +++ b/dist.rkt @@ -4,6 +4,7 @@ "src/dispatcher-tree.rkt") (require (only-in "src/page-category.rkt" page-category)) +(require (only-in "src/page-global-search.rkt" page-global-search)) (require (only-in "src/page-home.rkt" page-home)) (require (only-in "src/page-not-found.rkt" page-not-found)) (require (only-in "src/page-proxy.rkt" page-proxy)) @@ -20,6 +21,7 @@ (dispatcher-tree ; order of these does not matter page-category + page-global-search page-home page-not-found page-proxy diff --git a/src/dispatcher-tree.rkt b/src/dispatcher-tree.rkt index 5800876..16f6c71 100644 --- a/src/dispatcher-tree.rkt +++ b/src/dispatcher-tree.rkt @@ -42,6 +42,7 @@ (sequencer:make (pathprocedure:make "/" (hash-ref ds 'page-home)) (pathprocedure:make "/proxy" (hash-ref ds 'page-proxy)) + (pathprocedure:make "/search" (hash-ref ds 'page-global-search)) (filter:make #rx"^/[a-z-]+/wiki/Category:.+$" (lift:make (hash-ref ds 'page-category))) (filter:make #rx"^/[a-z-]+/wiki/.+$" (lift:make (hash-ref ds 'page-wiki))) (filter:make #rx"^/[a-z-]+/search$" (lift:make (hash-ref ds 'page-search))) diff --git a/src/page-global-search.rkt b/src/page-global-search.rkt new file mode 100644 index 0000000..4364dea --- /dev/null +++ b/src/page-global-search.rkt @@ -0,0 +1,25 @@ +#lang racket/base +(require racket/dict + ; web server libs + net/url + web-server/http + "application-globals.rkt" + "url-utils.rkt" + "xexpr-utils.rkt") + +(provide + page-global-search) + +(define (page-global-search req) + (define wikiname (dict-ref (url-query (request-uri req)) 'wikiname #f)) + (define q (dict-ref (url-query (request-uri req)) 'q #f)) + (response-handler + (if (not (and wikiname q)) + (response/output + #:code 400 + #:mime-type "text/plain" + (λ (out) + (displayln "Requires wikiname and q parameters." out))) + (generate-redirect (format "/~a/search?~a" + wikiname + (params->query `(("q" . ,q)))))))) diff --git a/src/page-home.rkt b/src/page-home.rkt index 3c84511..7c7aaa1 100644 --- a/src/page-home.rkt +++ b/src/page-home.rkt @@ -27,11 +27,20 @@ (p "It removes ads, videos, and suggested content, leaving you with a clean page that doesn't slow down your device or use up your data.") (p "BreezeWiki can also be called an \"alternative frontend for Fandom\".") (p ,(format "To use BreezeWiki, just replace \"fandom.com\" with \"~a\", and you'll instantly be teleported to a better world." - (if (config-true? 'canonical_origin) - (url-host (string->url (config-get 'canonical_origin))) - "breezewiki.com"))) + (if (config-true? 'canonical_origin) + (url-host (string->url (config-get 'canonical_origin))) + "breezewiki.com"))) (p "If you'd like to be automatically sent to BreezeWiki every time in the future, " (a (@ (href "https://docs.breezewiki.com/Automatic_Redirection.html")) "check out the tutorial in the manual.")) + (h2 "Find a page") + (form (@ (action "/search")) + (label (@ (class "paired__label")) + "Wiki name" + (input (@ (name "wikiname") (class "paired__input") (type "text") (placeholder "pokemon") (required)))) + (label (@ (class "paired__label")) + "Search query" + (input (@ (name "q") (class "paired__input") (type "text") (placeholder "Eevee") (required)))) + (button "Search")) (h2 "Example pages") (ul ,@(map (λ (x)