From 84476b3c9569ce727b0a0a6bbc878eaee7565643 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Fri, 21 Aug 2020 09:14:06 +0200 Subject: [PATCH] query builder first try --- .../themes/iph/templates/queryBuilder.ftl | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl b/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl index 28bbd48f..61cbd800 100644 --- a/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl @@ -1,5 +1,6 @@
+ @@ -50,7 +51,44 @@ if (!$.isEmptyObject(result)) { alert(JSON.stringify(result, null, 2)); } + }); + + $('#btn-search').on('click', function() { + var json_result = $('#builder').queryBuilder('getRules'); + var query_string = format_query_string(json_result,""); + if (!$.isEmptyObject(query_string)) { + window.open("${urls.base}/customsearch?querytext=" + query_string,"_self") + } + //if (!$.isEmptyObject(json_result)) { + // alert(JSON.stringify(json_result, null, 2)); + // alert(query_string); + //} + }); + + function format_query_string(json_query, string_query){ + if ('condition' in json_query && 'rules' in json_query ){ + if (json_query.rules.length > 1 ) { + string_query +=" ( "; + var i; + for (i = 0; i < json_query.rules.length; i++) { + string_query = format_query_string(json_query.rules[i], string_query); + if (i + 1 < json_query.rules.length){ + string_query += " " + json_query.condition + " "; + } + } + string_query +=" ) "; + } else { + string_query = format_query_string(json_query.rules[0], string_query); + } + } else if ( 'field' in json_query && 'value' in json_query ){ + if ('operator' in json_query && json_query.operator.startsWith("not_")){ + string_query += "NOT "; + } + string_query += json_query.field + ":\"" + json_query.value.toString().replace(/['"]+/g, '') + "\""; + } + return string_query; + } <#macro freeField field > { @@ -75,6 +113,6 @@ }, - operators: ['equal', 'not_equal'] + operators: ['contains', 'not_contains'] },