summaryrefslogtreecommitdiff
path: root/html.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2024-05-15 05:57:21 +0200
committerdefault <nobody@localhost>2024-05-15 05:57:21 +0200
commit34311714ce725da9fae9fea3b29a4988977c79bd (patch)
treee834d3f2bdc6e3d54ab4dc0f101e0650e139f3f0 /html.c
parent281f934f74c662d3c2e58db556f3046a736a2f00 (diff)
User search can also be done by tag.
Diffstat (limited to 'html.c')
-rw-r--r--html.c57
1 files changed, 38 insertions, 19 deletions
diff --git a/html.c b/html.c
index 2b0436e..6351823 100644
--- a/html.c
+++ b/html.c
@@ -748,7 +748,7 @@ static xs_html *html_user_body(snac *user, int read_only)
xs_html_sctag("input",
xs_html_attr("type", "text"),
xs_html_attr("name", "q"),
- xs_html_attr("title", L("Search posts by content (regular expression)")),
+ xs_html_attr("title", L("Search posts by content (regular expression) or #tag")),
xs_html_attr("placeholder", L("Content search")))));
}
@@ -2588,25 +2588,44 @@ int html_get_handler(const xs_dict *req, const char *q_path,
char *q = xs_dict_get(q_vars, "q");
if (q && *q) {
- /** search by content **/
- int to = 0;
- int msecs = atoi(xs_dict_get_def(q_vars, "msecs", "0"));
- xs *tl = content_search(&snac, q, 1, skip, show, msecs, &to);
- xs *title = NULL;
- xs *page = xs_fmt("/admin?q=%s&msecs=%d", q, msecs + 10);
- int tl_len = xs_list_len(tl);
-
- if (tl_len)
- title = xs_fmt(L("Search results for '%s'"), q);
- else
- if (skip)
- title = xs_fmt(L("No more matches for '%s'"), q);
- else
- title = xs_fmt(L("Nothing found for '%s'"), q);
+ if (*q == '#') {
+ /** search by tag **/
+ xs *tl = tag_search(q, skip, show + 1);
+ int more = 0;
+ if (xs_list_len(tl) >= show + 1) {
+ /* drop the last one */
+ tl = xs_list_del(tl, -1);
+ more = 1;
+ }
- *body = html_timeline(&snac, tl, 0, skip, tl_len, to || tl_len == show, title, page, 0);
- *b_size = strlen(*body);
- status = 200;
+ xs *page = xs_fmt("/admin?q=%%23%s", q + 1);
+ xs *title = xs_fmt(L("Search results for tag %s"), q);
+
+ *body = html_timeline(&snac, tl, 0, skip, show, more, title, page, 0);
+ *b_size = strlen(*body);
+ status = 200;
+ }
+ else {
+ /** search by content **/
+ int to = 0;
+ int msecs = atoi(xs_dict_get_def(q_vars, "msecs", "0"));
+ xs *tl = content_search(&snac, q, 1, skip, show, msecs, &to);
+ xs *title = NULL;
+ xs *page = xs_fmt("/admin?q=%s&msecs=%d", q, msecs + 10);
+ int tl_len = xs_list_len(tl);
+
+ if (tl_len)
+ title = xs_fmt(L("Search results for '%s'"), q);
+ else
+ if (skip)
+ title = xs_fmt(L("No more matches for '%s'"), q);
+ else
+ title = xs_fmt(L("Nothing found for '%s'"), q);
+
+ *body = html_timeline(&snac, tl, 0, skip, tl_len, to || tl_len == show, title, page, 0);
+ *b_size = strlen(*body);
+ status = 200;
+ }
}
else {
double t = history_mtime(&snac, "timeline.html_");