summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2016-04-29 10:45:36 +0000
committerIngo Schwarze <schwarze@openbsd.org>2016-04-29 10:45:36 +0000
commitd1471c37bb7804a19aac397002d39e899baee2ba (patch)
tree8eada0c75d99769d00e6a9a5013f3b3a31200827
parent7461763ab84e11bc9196e323a3081fa4dcf6b21e (diff)
downloadmandoc-d1471c37bb7804a19aac397002d39e899baee2ba.tar.gz
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.
-rw-r--r--cgi.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/cgi.c b/cgi.c
index 22dbe0c9..096b7ff9 100644
--- a/cgi.c
+++ b/cgi.c
@@ -59,6 +59,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 *);
@@ -79,7 +84,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 *);
@@ -367,7 +372,7 @@ resp_end_html(void)
}
static void
-resp_searchform(const struct req *req)
+resp_searchform(const struct req *req, enum focus focus)
{
int i;
@@ -382,9 +387,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. */
@@ -507,7 +515,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"
@@ -524,7 +532,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>");
@@ -588,7 +596,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\">");
@@ -908,7 +917,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();
}