Fill queryBuiler with fields and filters
This commit is contained in:
parent
af1372ef3c
commit
ae141a822a
5 changed files with 125 additions and 92 deletions
|
@ -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#>
|
||||
|
|
|
@ -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
|
||||
""" .
|
||||
|
|
@ -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));
|
||||
}
|
||||
});
|
|
@ -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 -->
|
||||
|
|
81
webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl
Normal file
81
webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl
Normal 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>
|
Loading…
Add table
Reference in a new issue