diff options
Diffstat (limited to 'app/assets/javascripts/index/query_generator.js')
-rw-r--r-- | app/assets/javascripts/index/query_generator.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/app/assets/javascripts/index/query_generator.js b/app/assets/javascripts/index/query_generator.js new file mode 100644 index 0000000..17cb798 --- /dev/null +++ b/app/assets/javascripts/index/query_generator.js @@ -0,0 +1,93 @@ +function updateDropdown(self) { + getThirdParent(self).querySelector('button > span:first-child').innerHTML = self.innerHTML; +} + +function buildAdvancedQuery(){ + var query = "" + document.querySelectorAll('#search-container > .row').forEach(function(element) { + var term = element.querySelector('.form-control').value; + + if(!term.replace(/\s/g, '').length){ + return; + }else{ + term = parseSearchTerm(term); + } + + var operator = parseOperator(element.querySelector('.pgo-query-operator > span:first-child').innerHTML); + var field = element.querySelector('.pgo-query-field > span:first-child').innerHTML; + + query += operator + field + ":" + term + " "; + }); + document.getElementById('q').value = query; +} + +function parseOperator(operator){ + switch(operator) { + case "should match": + return ""; + case "must match": + return "+"; + case "must not match": + return "-"; + default: + return ""; + } +} + +function parseSearchTerm(term){ + if (/\s/.test(term) && !/^\".*\"$/.test(term)) { + return "\"" + term + "\"" + }else{ + return term + } +} + +function addInput(self){ + var new_input = document.querySelector('#search-container > .row').cloneNode(true); + resetInput(new_input); + document.querySelector('#search-container').append(new_input); + checkDeleteButtons(); + checkAddButtons(); +} + +function resetInput(input) { + input.querySelector('.form-control').value = ''; + input.querySelector('.pgo-query-operator > span:first-child').innerHTML = 'should match'; + input.querySelector('.pgo-query-field > span:first-child').innerHTML = 'name'; +} + +function deleteInput(self){ + getThirdParent(self).removeChild(getSecondParent(self)); + checkDeleteButtons(); + checkAddButtons(); +} + +function checkDeleteButtons(){ + if(document.querySelectorAll('#search-container > .row').length == 1){ + document.querySelectorAll('.pgo-query-delete-btn').forEach(function(element) { + element.style.display = 'none'; + }); + }else{ + document.querySelectorAll('.pgo-query-delete-btn').forEach(function(element) { + element.style.display = 'block'; + }); + } +} + +function checkAddButtons(){ + document.querySelectorAll('.pgo-query-add-btn').forEach(function(element) { + element.style.display = 'none'; + }); + + document.querySelectorAll('.pgo-query-add-btn')[document.querySelectorAll('.pgo-query-add-btn').length - 1].style.display = 'block'; +} + +function getThirdParent(self) { + return self.parentElement.parentElement.parentElement; +} + +function getSecondParent(self) { + return self.parentElement.parentElement; +} + +checkDeleteButtons();
\ No newline at end of file |