From a129f9178f66947029514da8368b46a18e92c5bf Mon Sep 17 00:00:00 2001 From: nekobit Date: Sat, 18 Jun 2022 06:23:43 +0000 Subject: [PATCH] Search page pagination w/out JS FossilOrigin-Name: e40f45e2d41593d47060e5a7daa0aadadc95ea3e55965f1bc7fa026f06e53251 --- dist/treebird20.css | 8 +++- src/main.c | 2 +- src/search.c | 94 +++++++++++++++++++++++++++++++++++++++++- src/search.h | 2 +- static/search_all.tmpl | 26 +++++++++--- 5 files changed, 123 insertions(+), 9 deletions(-) diff --git a/dist/treebird20.css b/dist/treebird20.css index 69bdff7..8db091c 100644 --- a/dist/treebird20.css +++ b/dist/treebird20.css @@ -56,11 +56,17 @@ ul border-radius: 5px; } -.hidden +.hidden, +.search-page-hidden + .search-page { display: none; } +.search-page-hidden:checked + .search-page +{ + display: block; +} + .pointer { cursor: pointer; diff --git a/src/main.c b/src/main.c index e758804..16fe7b7 100644 --- a/src/main.c +++ b/src/main.c @@ -89,7 +89,7 @@ int main(void) { "/search/statuses", content_search_statuses }, { "/search/accounts", content_search_accounts }, { "/search/hashtags", content_search_hashtags }, - { "/search", content_search_statuses }, + { "/search", content_search_all }, { "/lists/for/:", content_tl_list }, { "/lists", content_lists }, { "/federated", content_tl_federated }, diff --git a/src/search.c b/src/search.c index 236380a..2204ed5 100644 --- a/src/search.c +++ b/src/search.c @@ -30,6 +30,7 @@ // Pages #include "../static/search.ctmpl" +#include "../static/search_all.ctmpl" void search_page(struct session* ssn, mastodont_t* api, enum search_tab tab, char* content) { @@ -55,7 +56,98 @@ void search_page(struct session* ssn, mastodont_t* api, enum search_tab tab, cha // Output render_base_page(&b, ssn, api); - free(out_data); + free(out_data); +} + +void content_search_all(struct session* ssn, mastodont_t* api, char** data) +{ + char* out_data = NULL; + char* statuses_html = NULL; + char* accounts_html = NULL; + char* tags_html = NULL, + * tags_graph = NULL, + * tags_bars = NULL, + * tags_page = NULL; + struct mstdnt_storage storage = { 0 }; + struct mstdnt_search_args args = { + .account_id = NULL, + .type = 0, + .resolve = 0, + .following = 0, + .with_relationships = 0, + .max_id = NULL, + .min_id = NULL, + .since_id = NULL, + .offset = 0, + .limit = 20, + }; + struct mstdnt_search_results results = { 0 }; + + if (mastodont_search(api, + keystr(ssn->query.query), + &storage, + &args, + &results) == 0) + { + // Statuses, make sure to set the highlight word + struct construct_statuses_args statuses_args = { + .highlight_word = keystr(ssn->query.query), + }; + + statuses_html = construct_statuses(ssn, api, results.statuses, results.statuses_len, &statuses_args, NULL); + if (!statuses_html) + statuses_html = construct_error("No statuses", E_ERROR, 1, NULL); + + // Accounts + accounts_html = construct_accounts(api, results.accts, results.accts_len, 0, NULL); + if (!accounts_html) + accounts_html = construct_error("No accounts", E_ERROR, 1, NULL); + + // Hashtags + tags_html = construct_hashtags(results.tags, results.tags_len, NULL); + if (!tags_html) + tags_html = construct_error("No hashtags", E_ERROR, 1, NULL); + + tags_bars = construct_hashtags_graph(results.tags, + results.tags_len, + 14, + NULL); + if (tags_bars) + tags_graph = construct_bar_graph_container(tags_bars, NULL); + + free(tags_bars); + } + + easprintf(&tags_page, "%s%s", STR_NULL_EMPTY(tags_graph), tags_html); + + // Construct search page + struct search_all_template tdata = { + .accounts = "Accounts", + .hashtags = "Hashtags", + .statuses = "Statuses", + .statuses_results = statuses_html, + .hashtags_results = tags_page, + .accounts_results = accounts_html + }; + out_data = tmpl_gen_search_all(&tdata, NULL); + + struct base_page b = { + .category = BASE_CAT_NONE, + .content = out_data, + .sidebar_left = NULL + }; + + // Output + render_base_page(&b, ssn, api); + free(out_data); + + free(statuses_html); + free(accounts_html); + free(tags_html); + free(tags_graph); + free(tags_page); + mstdnt_cleanup_search_results(&results); + mastodont_storage_cleanup(&storage); } void content_search_statuses(struct session* ssn, mastodont_t* api, char** data) diff --git a/src/search.h b/src/search.h index afdd1d4..667eece 100644 --- a/src/search.h +++ b/src/search.h @@ -29,7 +29,7 @@ enum search_tab }; void search_page(struct session* ssn, mastodont_t* api, enum search_tab tab, char* content); - +void content_search_all(struct session* ssn, mastodont_t* api, char** data); void content_search_statuses(struct session* ssn, mastodont_t* api, char** data); void content_search_accounts(struct session* ssn, mastodont_t* api, char** data); void content_search_hashtags(struct session* ssn, mastodont_t* api, char** data); diff --git a/static/search_all.tmpl b/static/search_all.tmpl index 4921de0..6a45d41 100644 --- a/static/search_all.tmpl +++ b/static/search_all.tmpl @@ -1,18 +1,34 @@
- - + - +
- {{%s:results}} + +
+ {{%s:statuses_results}} +
+ +
+ {{%s:accounts_results}} +
+ +
+ {{%s:hashtags_results}} +