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
|
:vivodocumentModifier_rubrics
|
||||||
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
|
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
|
||||||
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
|
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
|
||||||
rdfs:label "Add rubrics in semantic_marks excerpt field" ;
|
rdfs:label "Add rubrics in rubrics field" ;
|
||||||
:hasTargetField "semantic_marks" ;
|
:hasTargetField "rubrics" ;
|
||||||
:hasSelectQuery """
|
:hasSelectQuery """
|
||||||
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
||||||
PREFIX ts_: <https://litvinovg.pro/text_structures#>
|
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>
|
</ul>
|
||||||
</form>
|
</form>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<div id="builder"></div>
|
<#include "queryBuilder.ftl">
|
||||||
<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>
|
|
||||||
|
|
||||||
</section> <!-- #search-home -->
|
</section> <!-- #search-home -->
|
||||||
|
|
||||||
</section> <!-- #intro -->
|
</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