diff --git a/static/js/index.advanced-search-form.js b/static/js/index.advanced-search-form.js index f918d58..06e6a24 100644 --- a/static/js/index.advanced-search-form.js +++ b/static/js/index.advanced-search-form.js @@ -84,7 +84,7 @@ var searchGroups = $("div#search-groups"); $(".search-group#selected ." + fieldId).datepicker(); } else - $("div.search-group#selected ." + fieldId).remove() + $("div.search-group#selected #" + fieldId).remove() }); }()); @@ -97,16 +97,55 @@ function createSearchGroupInput(fieldId){ return [ "
", "
" + fieldId.replace(/-/g, " ") + "
", - "", + "", "Regex", "
" ].join(""); } +/* + * Create a query from advanced-search groups. + */ function assembleQuery(){ var groups = searchGroups.children(".search-group"); var groupQueries = []; - for(var group = 0; group < groups.length; group++) - console.log(group); + for(var group = 0; group < groups.length; group++){ + var inputs = groups[group].querySelectorAll("input[type=text]"); + var groupQuery = [] + for(var field = 0; field < inputs.length; field++) + if(inputs[field].value.length > 0) + groupQuery.push(genFieldQueryString(inputs[field])); + + groupQueries.push(groupQuery.join(" AND ")); + } + + // console.log(groupQueries.join(" OR ")); +} + +/* + * Generate a processed query string for an input field's value. + * + * @param field An `input[type=text]` DOM element. + */ +function genFieldQueryString(field){ + var terms = field.value.replace(/\\/g, "\\\\").replace(/\"/g, "\\\""); + if(field.value.indexOf('"') >= 0) + return '"' + field.getAttribute("name") + ":" + terms + '"'; + return terms; } + +(function testQueryStringGeneration(){ + var sampleStrings = [ + "A B", + "A \\ B", + '"A \\" B"', + '"A \\" B" C D "A B"', + ]; + for(var string = 0; string < sampleStrings.length; string++) + console.log([ + (sampleStrings[string] + " ").slice(0, 12), + ":", + " " + genFieldQueryString($("").val(sampleStrings[string])[0]) + ].join("")); +})(); diff --git a/templates/index.html b/templates/index.html index 8a29071..a1f6633 100644 --- a/templates/index.html +++ b/templates/index.html @@ -84,11 +84,17 @@
language
- + Regex
+ + + +