use text input for filtering, again
This commit is contained in:
@@ -63,7 +63,7 @@ public class PdbController implements HardcodedValues, CollectionUtils {
|
|||||||
|
|
||||||
@RequestMapping(path = "/autocomplete", //
|
@RequestMapping(path = "/autocomplete", //
|
||||||
method = RequestMethod.GET, //
|
method = RequestMethod.GET, //
|
||||||
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, // APPLICATION_FORM_URLENCODED_VALUE
|
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, // APPLICATION_JSON_UTF8_VALUE
|
||||||
produces = MediaType.APPLICATION_JSON_UTF8_VALUE //
|
produces = MediaType.APPLICATION_JSON_UTF8_VALUE //
|
||||||
)
|
)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
<head>
|
<head>
|
||||||
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
|
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
|
||||||
<script type="text/javascript" src="js/search.js"></script>
|
<script type="text/javascript" src="js/search.js"></script>
|
||||||
<script type="text/javascript" src="js/mustache.min.js"></script>
|
<script type="text/javascript" src="js/autocomplete.js"></script>
|
||||||
<link rel="stylesheet" type="text/css" href="css/typography.css">
|
<link rel="stylesheet" type="text/css" href="css/typography.css">
|
||||||
<link rel="stylesheet" type="text/css" href="css/design.css">
|
<link rel="stylesheet" type="text/css" href="css/design.css">
|
||||||
<link rel="stylesheet" type="text/css" href="css/icons.css">
|
<link rel="stylesheet" type="text/css" href="css/icons.css">
|
||||||
<link rel="stylesheet" type="text/css" href="css/loading.css">
|
<link rel="stylesheet" type="text/css" href="css/loading.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/autocomplete.min.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="content">
|
<div id="content">
|
||||||
@@ -15,29 +16,14 @@
|
|||||||
<div id="logo">LOGO</div>
|
<div id="logo">LOGO</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="search-bar">
|
<div id="search-bar">
|
||||||
<div id="filter-bar">
|
<div id="search-input-wrapper">
|
||||||
<button id="add-filter">add</button>
|
<input id="search-input" data-autocomplete="autocomplete"
|
||||||
|
data-autocomplete-empty-message="nothing found" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="button-bar">
|
|
||||||
<button id="search-submit"><i class="fa fa-search"> Search</i></button>
|
<button id="search-submit"><i class="fa fa-search"> Search</i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div id="result-view">
|
<div id="result-view">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:none">
|
|
||||||
<div id="template-filter">
|
|
||||||
<div class="filter">
|
|
||||||
<select class="template-filter-field" name="filter-field" id="filter-field">
|
|
||||||
{{#fields}}
|
|
||||||
<option name="{{name}}">{{name}}</option>
|
|
||||||
{{/fields}}
|
|
||||||
</select>
|
|
||||||
<select class="template-filter-values" name="filter-values" id="filter-values" multiple="multiple">
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -3,99 +3,30 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
$('#search-submit').click(plot);
|
$('#search-submit').click(plot);
|
||||||
|
|
||||||
initFilter();
|
AutoComplete({
|
||||||
|
HttpMethod: "GET",
|
||||||
|
Delay: 300,
|
||||||
|
_QueryArg: function() {
|
||||||
|
var caretIndex = document.getElementById('search-input').selectionStart;
|
||||||
|
return 'caretIndex=' + caretIndex + '&query';
|
||||||
|
},
|
||||||
|
_Post: function(response) {
|
||||||
|
var result = [];
|
||||||
|
var responseObject = JSON.parse(response);
|
||||||
|
responseObject['proposals'].forEach(function(item, index){
|
||||||
|
var proposal = {};
|
||||||
|
proposal['Label'] = item.value;
|
||||||
|
proposal['Value'] = item.proposedQuery;
|
||||||
|
|
||||||
|
result.push(proposal);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(JSON.stringify(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function initFilter() {
|
|
||||||
|
|
||||||
var successCallback = function (fields) {
|
|
||||||
|
|
||||||
var fieldsView = [{name: ""}];
|
|
||||||
fields.forEach(function(item, index){
|
|
||||||
fieldsView.push( {name: item} );
|
|
||||||
});
|
|
||||||
|
|
||||||
var template = $('#template-filter').html();
|
|
||||||
var view = {
|
|
||||||
fields: fieldsView
|
|
||||||
};
|
|
||||||
|
|
||||||
var rendered = Mustache.render(template, view);
|
|
||||||
$('#filter-bar').append(rendered);
|
|
||||||
|
|
||||||
$('#filter-values').hide();
|
|
||||||
|
|
||||||
$('#filter-field').change(function() {
|
|
||||||
if ($(this).val() == ""){
|
|
||||||
$('#filter-values').hide();
|
|
||||||
}else{
|
|
||||||
addFieldValues($(this).val());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#add-filter').click(function(){
|
|
||||||
var field = $('#filter-field').val();
|
|
||||||
var values = $('#filter-values').val();
|
|
||||||
|
|
||||||
if (field != ""
|
|
||||||
&& values != [] )
|
|
||||||
{
|
|
||||||
var query = "";
|
|
||||||
values.forEach(function (value, index) {
|
|
||||||
if (query.length > 0)
|
|
||||||
{
|
|
||||||
query += ",";
|
|
||||||
}
|
|
||||||
query += field+"="+value;
|
|
||||||
} );
|
|
||||||
$('#filter-bar').append(query);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
getFields( successCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
function addFieldValues(field){
|
|
||||||
|
|
||||||
var params = {};
|
|
||||||
params['query'] = "";
|
|
||||||
|
|
||||||
var successCallback = function (values){
|
|
||||||
$('#result-view').text("SUCCESS: " + JSON.stringify(values));
|
|
||||||
|
|
||||||
values.forEach(function (item, index){
|
|
||||||
$('#filter-values').append($('<option>', {
|
|
||||||
value: item,
|
|
||||||
text : item
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#filter-values').show();
|
|
||||||
};
|
|
||||||
|
|
||||||
var errorCallback = function (){
|
|
||||||
$('#result-view').text("FAILED: " + JSON.stringify(e));
|
|
||||||
};
|
|
||||||
|
|
||||||
getJson("fields/"+field+"/values", params, successCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFields( successCallback) {
|
|
||||||
|
|
||||||
var errorCallback = function (){
|
|
||||||
$('#result-view').text("FAILED: " + JSON.stringify(e));
|
|
||||||
};
|
|
||||||
|
|
||||||
var params = {};
|
|
||||||
params['query'] = "";
|
|
||||||
|
|
||||||
getJson("fields", params, successCallback, errorCallback)
|
|
||||||
}
|
|
||||||
|
|
||||||
function showLoadingIcon()
|
function showLoadingIcon()
|
||||||
{
|
{
|
||||||
$('#result-view').html("<div class='center'><div class='uil-cube-css' style='-webkit-transform:scale(0.41)'><div /><div></div><div></div><div></div></div></div>");
|
$('#result-view').html("<div class='center'><div class='uil-cube-css' style='-webkit-transform:scale(0.41)'><div /><div></div><div></div><div></div></div></div>");
|
||||||
@@ -110,7 +41,6 @@ function plot(event){
|
|||||||
request['query'] = $('#search-input').val();
|
request['query'] = $('#search-input').val();
|
||||||
request['height'] = $('#result-view').height()-10;
|
request['height'] = $('#result-view').height()-10;
|
||||||
request['width'] = $('#result-view').width()-10;
|
request['width'] = $('#result-view').width()-10;
|
||||||
request['groupBy'] = $('input[name=groupBy]:checked').val();
|
|
||||||
|
|
||||||
var success = function(response){
|
var success = function(response){
|
||||||
|
|
||||||
@@ -137,15 +67,3 @@ function postJson(url, requestData, successCallback, errorCallback) {
|
|||||||
.fail(errorCallback);
|
.fail(errorCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getJson(url, requestData, successCallback, errorCallback) {
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: url,
|
|
||||||
data: requestData,
|
|
||||||
contentType: 'application/json'
|
|
||||||
})
|
|
||||||
.done(successCallback)
|
|
||||||
.fail(errorCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile project(':pdb-api')
|
compile project(':pdb-api')
|
||||||
compile 'org.lucares:ludb:1.0.20170101101722'
|
compile 'org.lucares:ludb:1.0.20170207192657'
|
||||||
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.6'
|
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.6'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user