aboutsummaryrefslogtreecommitdiffstatshomepage
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
commit22f540e56224b1bec2f64e281a39ba412dbe02bd (patch)
tree4f6a42fffee68a0f2e8f105535a055293320b96f
parent94dbcb25aa21fe37df578471931747f29c29a793 (diff)
downloadmandoc-22f540e56224b1bec2f64e281a39ba412dbe02bd.tar.gz
mandoc-22f540e56224b1bec2f64e281a39ba412dbe02bd.tar.zst
mandoc-22f540e56224b1bec2f64e281a39ba412dbe02bd.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.
-rw-r--r--cgi.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/cgi.c b/cgi.c
index 0cd320c7..779b9eb6 100644
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.130 2016/04/28 17:59:14 schwarze Exp $ */
+/* $Id: cgi.c,v 1.131 2016/04/29 10:45:36 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@usta.de>
@@ -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();
}