summaryrefslogtreecommitdiffstats
path: root/usr.bin/mandoc/cgi.c
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2016-04-29 10:45:06 +0000
committerschwarze <schwarze@openbsd.org>2016-04-29 10:45:06 +0000
commit84f05c93d0a41183a2b3387e428cce8977d27cb6 (patch)
tree82af5e37fd2edc6b974ff948f75e4d123e6b17df /usr.bin/mandoc/cgi.c
parentFix keys parsing again to correctly accept Unicode when not prefixed (diff)
downloadwireguard-openbsd-84f05c93d0a41183a2b3387e428cce8977d27cb6.tar.xz
wireguard-openbsd-84f05c93d0a41183a2b3387e428cce8977d27cb6.zip
Only focus on the query input box when no manual page is displayed,
that is, for the index page, for the noresult page, and for the result of an apropos(1) query with more than one page. As noted by bentley@, when a manual page is displayed, it is more important that people can quickly use the space bar for paging and Ctrl-F for searching.
Diffstat (limited to 'usr.bin/mandoc/cgi.c')
-rw-r--r--usr.bin/mandoc/cgi.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/usr.bin/mandoc/cgi.c b/usr.bin/mandoc/cgi.c
index d4e7bf7eb2d..164713e6de3 100644
--- a/usr.bin/mandoc/cgi.c
+++ b/usr.bin/mandoc/cgi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cgi.c,v 1.69 2016/04/28 17:59:00 schwarze Exp $ */
+/* $OpenBSD: cgi.c,v 1.70 2016/04/29 10:45:06 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@usta.de>
@@ -57,6 +57,11 @@ struct req {
int isquery; /* QUERY_STRING used, not PATH_INFO */
};
+enum focus {
+ FOCUS_NONE = 0,
+ FOCUS_QUERY
+};
+
static void html_print(const char *);
static void html_putchar(char);
static int http_decode(char *);
@@ -77,7 +82,7 @@ static void resp_catman(const struct req *, const char *);
static void resp_copy(const char *);
static void resp_end_html(void);
static void resp_format(const struct req *, const char *);
-static void resp_searchform(const struct req *);
+static void resp_searchform(const struct req *, enum focus);
static void resp_show(const struct req *, const char *);
static void set_query_attr(char **, char **);
static int validate_filename(const char *);
@@ -365,7 +370,7 @@ resp_end_html(void)
}
static void
-resp_searchform(const struct req *req)
+resp_searchform(const struct req *req, enum focus focus)
{
int i;
@@ -380,9 +385,12 @@ resp_searchform(const struct req *req)
printf( "<table><tr><td>\n"
"<input type=\"text\" name=\"query\" value=\"");
- if (NULL != req->q.query)
+ if (req->q.query != NULL)
html_print(req->q.query);
- puts("\" size=\"40\" autofocus>");
+ printf( "\" size=\"40\"");
+ if (focus == FOCUS_QUERY)
+ printf(" autofocus");
+ puts(">");
/* Write submission and reset buttons. */
@@ -505,7 +513,7 @@ pg_index(const struct req *req)
{
resp_begin_html(200, NULL);
- resp_searchform(req);
+ resp_searchform(req, FOCUS_QUERY);
printf("<p>\n"
"This web interface is documented in the\n"
"<a href=\"/%s%smandoc/man8/man.cgi.8\">man.cgi</a>\n"
@@ -522,7 +530,7 @@ static void
pg_noresult(const struct req *req, const char *msg)
{
resp_begin_html(200, NULL);
- resp_searchform(req);
+ resp_searchform(req, FOCUS_QUERY);
puts("<p>");
puts(msg);
puts("</p>");
@@ -586,7 +594,8 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
}
resp_begin_html(200, NULL);
- resp_searchform(req);
+ resp_searchform(req,
+ req->q.equal || sz == 1 ? FOCUS_NONE : FOCUS_QUERY);
if (sz > 1) {
puts("<div class=\"results\">");
@@ -906,7 +915,7 @@ pg_show(struct req *req, const char *fullpath)
}
resp_begin_html(200, NULL);
- resp_searchform(req);
+ resp_searchform(req, FOCUS_NONE);
resp_show(req, file);
resp_end_html();
}