Fill queryBuiler with fields and filters

This commit is contained in:
Georgy Litvinov 2020-08-20 17:03:44 +02:00
parent af1372ef3c
commit ae141a822a
5 changed files with 125 additions and 92 deletions

View file

@ -22,8 +22,8 @@
:vivodocumentModifier_rubrics
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Add rubrics in semantic_marks excerpt field" ;
:hasTargetField "semantic_marks" ;
rdfs:label "Add rubrics in rubrics field" ;
:hasTargetField "rubrics" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>

View file

@ -0,0 +1,41 @@
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<freemarker:queryBuilder.ftl> display:hasDataGetter display:customSearchFieldsDataGetter .
<freemarker:queryBuilder.ftl> display:hasDataGetter display:customSearchFiltersDataGetter .
display:customSearchFieldsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
display:saveToVar "searchFields" ;
display:query """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX search: <https://litvinovg.pro/search_ontology#>
SELECT ?name ?field ?hasFilters
WHERE {
?searchField rdf:type search:searchField .
?searchField rdfs:label ?name .
?searchField search:indexField ?field .
BIND (exists { ?filters search:filterFiled ?searchField } AS ?hasFilters)
} ORDER BY ?name
""" .
display:customSearchFiltersDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
display:saveToVar "searchFilters" ;
display:query """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX search: <https://litvinovg.pro/search_ontology#>
SELECT ?name ?field ?id
WHERE {
?searchFilter rdf:type search:filter .
?searchFilter rdfs:label ?name .
?searchFilter search:id ?id .
?searchFilter search:filterFiled ?searchField .
?searchField search:indexField ?field .
} ORDER BY ?field ?name
""" .

View file

@ -1,80 +0,0 @@
var rules_basic = {
condition: 'AND',
rules: [{
id: 'text',
operator: 'contains',
value: 2
}, {
id: 'keywords',
operator: 'contains',
value: 1
}]
};
$('#builder').queryBuilder({
filters: [{
id: 'text',
label: 'Текст',
type: 'string',
operators: ['contains', 'not_contains']
}, {
id: 'keywords',
label: 'Ключевые слова',
type: 'string',
operators: ['contains', 'not_contains']
}, {
id: 'title',
label: 'Название',
type: 'string',
operators: ['contains', 'not_contains']
}, {
id: 'bibliography',
label: 'Библиография',
type: 'string',
operators: ['contains', 'not_contains']
}, {
id: 'classgroup',
label: 'Тип документа',
type: 'integer',
input: 'select',
values: {
1: 'Статья',
2: 'Отрывок'
},
operators: ['contains']
}, {
id: 'rubrics',
label: 'Рубрикация',
type: 'integer',
input: 'select',
values: {
1: 'История философии',
2: 'Логика',
3: 'Философия языка',
4: 'Этика',
5: 'Эстетика',
6: 'Философия техники'
},
operators: ['contains', 'not_contains']
} ],
lang_code: 'ru',
rules: rules_basic
});
$('#btn-reset').on('click', function() {
$('#builder').queryBuilder('reset');
});
$('#btn-set').on('click', function() {
$('#builder').queryBuilder('setRules', rules_basic);
});
$('#btn-get').on('click', function() {
var result = $('#builder').queryBuilder('getRules');
if (!$.isEmptyObject(result)) {
alert(JSON.stringify(result, null, 2));
}
});

View file

@ -59,16 +59,7 @@
</ul>
</form>
</fieldset>
<div id="builder"></div>
<div class="btn-group">
<button id="btn-reset" class="btn btn-warning reset" data-target="basic">Reset</button>
<button id="btn-set" class="btn btn-success set-json" data-target="basic">Set rules</button>
<button id="btn-get" class="btn btn-primary parse-json" data-target="basic">Get rules</button>
</div>
<script src="themes/iph/js/query-builder.standalone.min.js"></script>
<script src="themes/iph/js/query-builder.ru.js"></script>
<script src="themes/iph/js/query-builder-config.js"></script>
<#include "queryBuilder.ftl">
</section> <!-- #search-home -->
</section> <!-- #intro -->

View file

@ -0,0 +1,81 @@
<div id="builder"></div>
<div class="btn-group">
<button id="btn-reset" class="btn btn-warning reset" data-target="basic">Reset</button>
<button id="btn-set" class="btn btn-success set-json" data-target="basic">Set rules</button>
<button id="btn-get" class="btn btn-primary parse-json" data-target="basic">Get rules</button>
</div>
<script src="themes/iph/js/query-builder.standalone.min.js"></script>
<script src="themes/iph/js/query-builder.ru.js"></script>
<script src="themes/iph/js/query-builder-config.js"></script>
<script>
var rules_basic = {
condition: 'AND',
rules: [{
id: 'ALLTEXT',
operator: 'contains',
value: 2
}, {
id: 'keywords',
operator: 'contains',
value: 1
}]
};
$('#builder').queryBuilder({
filters: [
<#list searchFields as field>
<#if field.hasFilters == "true">
<@multivalueField field=field />
<#else>
<@freeField field=field />
</#if>
</#list>
],
lang_code: 'ru',
rules: rules_basic
});
$('#btn-reset').on('click', function() {
$('#builder').queryBuilder('reset');
});
$('#btn-set').on('click', function() {
$('#builder').queryBuilder('setRules', rules_basic);
});
$('#btn-get').on('click', function() {
var result = $('#builder').queryBuilder('getRules');
if (!$.isEmptyObject(result)) {
alert(JSON.stringify(result, null, 2));
}
});
</script>
<#macro freeField field >
{
id: '${field.field}',
label: '${field.name}',
type: 'string',
operators: ['contains', 'not_contains']
},
</#macro>
<#macro multivalueField field >
{
id: '${field.field}',
label: '${field.name}',
type: 'string',
input: 'select',
values: {
<#list searchFilters as filter>
<#if filter.field == field.field>
'${filter.id}':'${filter.name}',
</#if>
</#list>
},
operators: ['equal', 'not_equal']
},
</#macro>