From 30478870f2afaf991ee19ab7b4c22d3ddcd7b8cd Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 21 Jun 2010 11:01:59 +0200 Subject: [PATCH] "search json" action: Move the JSON callback method into an own action. --- share/collection.js | 2 +- src/Makefile.am | 1 + src/action_list_graphs.c | 130 +++------------------------------------ src/action_search_json.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++ src/action_search_json.h | 7 +++ src/main.c | 2 + 6 files changed, 174 insertions(+), 122 deletions(-) create mode 100644 src/action_search_json.c create mode 100644 src/action_search_json.h diff --git a/share/collection.js b/share/collection.js index de79a99..026d434 100644 --- a/share/collection.js +++ b/share/collection.js @@ -29,7 +29,7 @@ $(document).ready(function() { { var term = $("#search-input").val (); $.getJSON ("collection.fcgi", - { "action": "list_graphs", "format": "json", "search": term}, + { "action": "search_json", "q": term}, function(data) { var i; diff --git a/src/Makefile.am b/src/Makefile.am index ac11e9f..a77f669 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -17,6 +17,7 @@ collection_fcgi_SOURCES = main.c \ oconfig.c oconfig.h aux_types.h scanner.l parser.y \ action_graph.c action_graph.h \ action_list_graphs.c action_list_graphs.h \ + action_search_json.c action_search_json.h \ common.c common.h \ filesystem.c filesystem.h \ graph_types.h \ diff --git a/src/action_list_graphs.c b/src/action_list_graphs.c index a236517..922308b 100644 --- a/src/action_list_graphs.c +++ b/src/action_list_graphs.c @@ -23,118 +23,6 @@ struct callback_data_s }; typedef struct callback_data_s callback_data_t; -static int json_begin_graph (graph_config_t *cfg) /* {{{ */ -{ - char desc[1024]; - - if (cfg == NULL) - return (EINVAL); - - graph_get_title (cfg, desc, sizeof (desc)); - - printf ("{\"title\":\"%s\",\"instances\":[", desc); - - return (0); -} /* }}} int json_begin_graph */ - -static int json_end_graph (void) /* {{{ */ -{ - printf ("]}"); - - return (0); -} /* }}} int json_end_graph */ - -static int json_print_instance (graph_config_t *cfg, /* {{{ */ - graph_instance_t *inst) -{ - char params[1024]; - char desc[1024]; - - if ((cfg == NULL) || (inst == NULL)) - return (EINVAL); - - memset (desc, 0, sizeof (desc)); - inst_describe (cfg, inst, desc, sizeof (desc)); - - memset (params, 0, sizeof (params)); - inst_get_params (cfg, inst, params, sizeof (params)); - - printf ("{\"description\":\"%s\",\"params\":\"%s\"}", - desc, params); - - return (0); -} /* }}} int json_print_instance */ - -static int print_graph_inst_json (graph_config_t *cfg, /* {{{ */ - graph_instance_t *inst, - void *user_data) -{ - callback_data_t *data = user_data; - - if (data->cfg != cfg) - { - if (!data->first) - { - json_end_graph (); - printf (",\n"); - } - json_begin_graph (cfg); - - data->cfg = cfg; - data->first = 0; - } - else /* if (not first instance) */ - { - printf (",\n"); - } - - json_print_instance (cfg, inst); - - if (data->limit > 0) - data->limit--; - - if (data->limit == 0) - return (1); - - return (0); -} /* }}} int print_graph_inst_json */ - -static int list_graphs_json (const char *term) /* {{{ */ -{ - callback_data_t data; - - time_t now; - char time_buffer[128]; - int status; - - printf ("Content-Type: application/json\n"); - - now = time (NULL); - status = time_to_rfc1123 (now + 300, time_buffer, sizeof (time_buffer)); - if (status == 0) - printf ("Expires: %s\n" - "Cache-Control: public\n", - time_buffer); - printf ("\n"); - - data.cfg = NULL; - data.limit = RESULT_LIMIT; - data.first = 1; - - printf ("[\n"); - if (term == NULL) - gl_instance_get_all (print_graph_inst_json, /* user_data = */ &data); - else - gl_search (term, print_graph_inst_json, /* user_data = */ &data); - - if (!data.first) - json_end_graph (); - - printf ("\n]"); - - return (0); -} /* }}} int list_graphs_json */ - static int print_graph_inst_html (graph_config_t *cfg, /* {{{ */ graph_instance_t *inst, void *user_data) @@ -190,6 +78,14 @@ static int print_search_result (void *user_data) /* {{{ */ page_data_t *pg_data = user_data; callback_data_t cb_data = { NULL, /* limit = */ RESULT_LIMIT, /* first = */ 1 }; + if (pg_data->search_term != NULL) + { + char *search_term_html = html_escape (pg_data->search_term); + printf ("

Search results for "%s"

\n", + search_term_html); + free (search_term_html); + } + printf ("