Fixed mirroring - made collections work
diff --git a/Changes b/Changes
index b0efd68..2f8972c 100755
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
0.16 2015-06-18
- Update to new KoralQuery API.
+ WARNING! This version is no longer compatible
+ with old responses of Krill.
- Introduced new notifications engine.
0.15 2015-05-21
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 4e37a9b..0e49091 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -5,6 +5,7 @@
'tutorial',
'lib/domReady',
'hint/array',
+ 'vc/array',
'lib/alertify',
'api',
'mailToChiffre',
@@ -16,6 +17,7 @@
tutClass,
domReady,
hintArray,
+ vcArray,
alertifyClass) {
// Set hint array for hint helper
@@ -62,12 +64,17 @@
vcname = document.createElement('span');
vcname.setAttribute('id', 'vc-choose');
+ var currentVC = loc.VC_allCorpora;
+ if (KorAP.koralQuery !== undefined && KorAP.koralQuery["collection"]) {
+ currentVC = loc.VC_oneCollection;
+ };
+
vcname.appendChild(
document.createTextNode(
- document.getElementById('vc-name').value ||
- (KorAP.currentVC !== undefined) ? loc.VC_oneCollection : loc.VC_allCorpora
+ document.getElementById('vc-name').value || currentVC
)
);
+
input.parentNode.insertBefore(vcname, input);
};
@@ -133,7 +140,7 @@
// The vc is not visible
else {
if (vc === undefined)
- vc = _getCurrentVC(vcClass);
+ vc = _getCurrentVC(vcClass, vcArray);
view.appendChild(vc.element());
this.classList.add('active');
};
@@ -164,18 +171,20 @@
obj.tutorial.initDocLinks(document);
// There is a currentQuery
- if (KorAP.currentQuery !== undefined) {
+ /*
+ if (KorAP.koralQuery !== undefined) {
var kq = document.createElement('div');
kq.setAttribute('id', 'koralquery');
var kqInner = document.createElement('div');
kq.appendChild(kqInner);
- kqInner.innerHTML = JSON.stringify(KorAP.currentQuery, null, ' ');
+ kqInner.innerHTML = JSON.stringify(KorAP.koralQuery, null, ' ');
hljs.highlightBlock(kqInner);
var sb = document.getElementById('search');
sb.insertBefore(kq, sb.firstChild);
};
+ */
/**
* Add VC creation on submission.
@@ -184,7 +193,7 @@
if (form !== undefined) {
form.addEventListener('submit', function (e) {
if (vc === undefined)
- vc = _getCurrentVC(vcClass);
+ vc = _getCurrentVC(vcClass, vcArray);
if (vc !== undefined)
input.value = vc.toQuery();
@@ -205,18 +214,11 @@
});
// Render Virtual collection
-// TODO:: Use currentQuery!!!
-function _getCurrentVC (vcClass) {
- var vc = vcClass.create([
- ['title', 'string'],
- ['subTitle', 'string'],
- ['pubDate', 'date'],
- ['author', 'string'],
- ['corpusID', 'string']
- ]);
- if (KorAP.currentVC !== undefined)
- vc.fromJson(KorAP.currentVC);
-
+function _getCurrentVC (vcClass, vcArray) {
+ var vc = vcClass.create(vcArray);
+ if (KorAP.koralQuery !== undefined && KorAP.koralQuery["collection"]) {
+ vc.fromJson(KorAP.koralQuery["collection"]);
+ };
return vc;
};
diff --git a/dev/js/src/loc/de.js b/dev/js/src/loc/de.js
index a9eb389..fce90a1 100644
--- a/dev/js/src/loc/de.js
+++ b/dev/js/src/loc/de.js
@@ -5,10 +5,13 @@
// EMPTY, DELETE
// Virtual collection:
+ /*
loc.VC_subTitle = 'Untertitel';
loc.VC_title = 'Titel';
loc.VC_pubDate = 'Veröffentlichungsdatum';
loc.VC_pubPlace = 'Veröffentlichungsort';
+ */
+
loc.VC_allCorpora = 'allen Korpora';
loc.VC_oneCollection = 'einer Kollektion';
diff --git a/dev/js/src/vc/array.js b/dev/js/src/vc/array.js
new file mode 100644
index 0000000..6473a48
--- /dev/null
+++ b/dev/js/src/vc/array.js
@@ -0,0 +1,36 @@
+define(function () {
+ return [
+ ['author', 'string'],
+ ['biblEditionStatement', 'string'],
+ ['corpusAuthor', 'string'],
+ ['corpusEditor', 'string'],
+ ['corpusSigle', 'string'],
+ ['corpusSubTitle', 'string'],
+ ['corpusTitle', 'string'],
+ ['creationDate', 'date'],
+ ['docAuthor', 'string'],
+ ['docEditor', 'string'],
+ ['docSigle', 'string'],
+ ['docSubTitle', 'string'],
+ ['docTitle', 'string'],
+ ['editor', 'string'],
+ ['fileEditionStatement', 'string'],
+ ['keywords', 'string'],
+ ['language', 'string'],
+ ['license', 'string'],
+ ['pages', 'string'],
+ ['pubDate', 'date'],
+ ['publisher', 'string'],
+ ['pubPlace', 'date'],
+ ['reference', 'string'],
+ ['subTitle', 'string'],
+ ['textClass', 'string'],
+ ['textColumn', 'string'],
+ ['textDomain', 'string'],
+ ['textSigle', 'string'],
+ ['textType', 'string'],
+ ['textTypeArt', 'string'],
+ ['textTypeRef', 'string'],
+ ['title', 'string']
+ ]
+});
diff --git a/dev/scss/main/koralquery.scss b/dev/scss/main/koralquery.scss
index d569d77..1aec746 100644
--- a/dev/scss/main/koralquery.scss
+++ b/dev/scss/main/koralquery.scss
@@ -8,6 +8,8 @@
white-space: pre;
background-color: $dark-orange;
> div {
+ overflow-x: auto;
+ font-size: 85%;
background-color: $nearly-white;
margin: {
top: 2pt;
diff --git a/kalamar.conf b/kalamar.conf
index 18c7d0a..1bdf667 100644
--- a/kalamar.conf
+++ b/kalamar.conf
@@ -5,8 +5,8 @@
},
Search => {
engine => 'Kalamar::API',
- api => 'http://10.0.10.13:7070/api/v0.1/'
-# api => 'http://localhost:9999/api/v0.1/'
+# api => 'http://10.0.10.13:7070/api/v0.1/'
+ api => 'http://localhost:9999/api/v0.1/'
},
CHI => {
default => {
diff --git a/lib/Kalamar.pm b/lib/Kalamar.pm
index 7369598..0fd7d3d 100644
--- a/lib/Kalamar.pm
+++ b/lib/Kalamar.pm
@@ -4,7 +4,7 @@
use Mojo::JSON 'decode_json';
# Minor version - may be patched from package.json
-our $VERSION = '0.15';
+our $VERSION = '0.16';
# TODO: The FAQ-Page has a contact form for new questions
# TODO: Embed query serialization
diff --git a/lib/Kalamar/API.pm b/lib/Kalamar/API.pm
index 4ae79e3..74dc1c4 100644
--- a/lib/Kalamar/API.pm
+++ b/lib/Kalamar/API.pm
@@ -28,6 +28,7 @@
api_response
benchmark
query_jsonld
+ collection
collection_jsonld/]);
$index_class->attr(no_cache => 0);
};
@@ -55,6 +56,8 @@
# Cache based on URL
$index->_api_cache('total-' . $url->to_string);
+ # TODO: Make this user dependent for collections!!!!
+
my %param = @_;
# Set context based on parameter
@@ -290,9 +293,6 @@
# Response was fine
if (my $res = $tx->success) {
- # Set api response for debugging
- $index->api_response($res->body); # if $c->kalamar_test_port;
-
# Json failure
my $json;
unless ($json = $res->json) {
@@ -300,6 +300,9 @@
return;
};
+ # Set api response as jsonld
+ $index->api_response($json);
+
# expected response for matches
if ($type eq 'matches') {
$self->_process_response_matches($index, $json);
@@ -332,8 +335,11 @@
sub _process_response_matches {
my ($self, $index, $json) = @_;
+ # Process meta
+ my $meta = $json->{meta};
+
# Reformat benchmark counter
- my $benchmark = $json->{benchmark};
+ my $benchmark = $meta->{benchmark};
if ($benchmark && $benchmark =~ s/\s+(m)?s$//) {
$benchmark = sprintf("%.2f", $benchmark) . ($1 ? $1 : '') . 's';
};
@@ -342,77 +348,23 @@
$index->benchmark($benchmark);
# Set time exceeded
- if ($json->{timeExceeded} && $json->{timeExceeded} eq Mojo::JSON::true) {
+ if ($meta->{timeExceeded} && $meta->{timeExceeded} eq Mojo::JSON::true) {
$index->time_exceeded(1);
};
# Set result values
- $index->items_per_page($json->{itemsPerPage});
+ $index->items_per_page($meta->{itemsPerPage});
+
# Bouncing query
- if ($json->{query}) {
- $index->query_jsonld($json->{query});
- }
+# if ($json->{query}) {
+# $index->query_jsonld($json->{query});
+# };
+
# Legacy
- elsif ($json->{request}->{query}) {
- $index->query_jsonld($json->{request}->{query});
- };
-
- # Temporary:
- my $collection_query = {
- '@type' => "koral:docGroup",
- "operation" => "operation:or",
- "operands" => [
- {
- '@type' => "koral:docGroup",
- "operation" => "operation:and",
- "operands" => [
- {
- '@type' => "koral:doc",
- "key" => "title",
- "match" => "match:eq",
- "value" => "Der Birnbaum",
- "type" => "type:string"
- },
- {
- '@type' => "koral:doc",
- "key" => "pubPlace",
- "match" => "match:eq",
- "value" => "Mannheim",
- "type" => "type:string"
- },
- {
- '@type' => "koral:docGroup",
- "operation" => "operation:or",
- "operands" => [
- {
- '@type' => "koral:doc",
- "key" => "subTitle",
- "match" => "match:eq",
- "value" => "Aufzucht oder Pflege",
- "type" => "type:string"
- },
- {
- '@type' => "koral:doc",
- "key" => "subTitle",
- "match" => "match:eq",
- "value" => "Gedichte",
- "type" => "type:string"
- }
- ]
- }
- ]
- },
- {
- '@type' => "koral:doc",
- "key" => "pubDate",
- "match" => "match:geq",
- "value" => "2015-03-05",
- "type" => "type:date"
- }
- ]
- };
-
+ # elsif ($json->{request}->{query}) {
+ # $index->query_jsonld($json->{request}->{query});
+ # };
# Bouncing collection query
if ($json->{collection}) {
@@ -420,24 +372,21 @@
}
# Legacy
- elsif ($json->{request}->{collection}) {
- $index->collection_jsonld($json->{request}->{collection});
- };
-
- # Temp
- $index->collection_jsonld($collection_query);
+ # elsif ($json->{request}->{collection}) {
+ # $index->collection_jsonld($json->{request}->{collection});
+ # };
$index->results(_map_matches($json->{matches}));
# Total results not set by stash
if ($index->total_results == -1) {
- if ($json->{totalResults} && $json->{totalResults} > -1) {
+ if ($meta->{totalResults} && $meta->{totalResults} > -1) {
my $c = $index->controller;
$c->app->log->debug('Cache total result');
- $c->chi->set($index->_api_cache => $json->{totalResults}, '120min');
- $index->total_results($json->{totalResults});
+ $c->chi->set($index->_api_cache => $meta->{totalResults}, '120min');
+ $index->total_results($meta->{totalResults});
};
};
};
@@ -483,7 +432,10 @@
# Check json response error message
if ($json) {
+
+ # Legacy, but still in use by Kustvakt
if ($json->{error}) {
+
# Temp
$json->{error} =~ s/;\s+null$//;
$c->notify(error => $json->{error});
@@ -581,6 +533,9 @@
# Set cutoff from param
$index->cutoff(delete $param{cutoff});
+ # Set collection from param
+ $index->collection(delete $param{collection});
+
# Set query language
$index->query_language(delete $param{query_language} // 'poliqarp');
@@ -593,9 +548,9 @@
$query{ql} = $index->query_language;
$query{page} = $index->start_page if $index->start_page;
$query{count} = $index->items_per_page if $index->items_per_page;
+ $query{cq} = $index->collection if $index->collection;
$query{cutoff} = 'true' if $index->cutoff;
- # Todo: support corpus and collection
# Create query url
my $url = Mojo::URL->new($index->api);
$url->query(\%query);
@@ -726,3 +681,58 @@
L<BSD-2 License|https://raw.githubusercontent.com/KorAP/Kalamar/master/LICENSE>.
=cut
+
+ # Temporary:
+ my $collection_query = {
+ '@type' => "koral:docGroup",
+ "operation" => "operation:or",
+ "operands" => [
+ {
+ '@type' => "koral:docGroup",
+ "operation" => "operation:and",
+ "operands" => [
+ {
+ '@type' => "koral:doc",
+ "key" => "title",
+ "match" => "match:eq",
+ "value" => "Der Birnbaum",
+ "type" => "type:string"
+ },
+ {
+ '@type' => "koral:doc",
+ "key" => "pubPlace",
+ "match" => "match:eq",
+ "value" => "Mannheim",
+ "type" => "type:string"
+ },
+ {
+ '@type' => "koral:docGroup",
+ "operation" => "operation:or",
+ "operands" => [
+ {
+ '@type' => "koral:doc",
+ "key" => "subTitle",
+ "match" => "match:eq",
+ "value" => "Aufzucht oder Pflege",
+ "type" => "type:string"
+ },
+ {
+ '@type' => "koral:doc",
+ "key" => "subTitle",
+ "match" => "match:eq",
+ "value" => "Gedichte",
+ "type" => "type:string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ '@type' => "koral:doc",
+ "key" => "pubDate",
+ "match" => "match:geq",
+ "value" => "2015-03-05",
+ "type" => "type:date"
+ }
+ ]
+ };
diff --git a/lib/Kalamar/Controller/Search.pm b/lib/Kalamar/Controller/Search.pm
index 8445c9f..a29d9d3 100644
--- a/lib/Kalamar/Controller/Search.pm
+++ b/lib/Kalamar/Controller/Search.pm
@@ -17,6 +17,7 @@
my %param = (
query_language => scalar $c->param('ql'),
query => $query,
+ collection => scalar $c->param('collection')
);
# May be not relevant
diff --git a/templates/layouts/main.html.ep b/templates/layouts/main.html.ep
index 9050f77..7f6f811 100644
--- a/templates/layouts/main.html.ep
+++ b/templates/layouts/main.html.ep
@@ -20,13 +20,13 @@
<div id="kalamar-bg"></div>
% unless ($embedded) {
- %= include 'partial/header'
+ %= include 'partial/header'
% }
% my $aside = content_for('sidebar');
<aside tabindex="0" class="<% unless (length($aside) > 0) { %>off<% } elsif (stash('sidebar_active')) { %>active<% } %>">
<div>
- %= $aside
+ %= $aside
</div>
</aside>
@@ -40,6 +40,6 @@
<%= doc_link_to 'V '. $Kalamar::VERSION, 'korap', 'kalamar' %>
</footer>
% };
-%= notifications 'Kalamar::Plugin::Notifications'
+ %= notifications 'Kalamar::Plugin::Notifications'
</body>
</html>
diff --git a/templates/query.html.ep b/templates/query.html.ep
index a25a5e5..b3e52fd 100644
--- a/templates/query.html.ep
+++ b/templates/query.html.ep
@@ -1,9 +1,9 @@
-% use Mojo::JSON;
+% use Mojo::JSON 'encode_json';
-%= javascript begin
- KorAP.currentQuery = <%== Mojo::JSON::encode_json(search->query_jsonld) %>;
-% end
-
-<pre>
-%== search->api_response
-</pre>
+% if (search->api_response) {
+%= javascript begin
+% my $kq_hash = search->api_response;
+% $kq_hash->{matches} = ["..."];
+ KorAP.koralQuery = <%= b(encode_json($kq_hash))->decode %>;
+% end
+% };
diff --git a/templates/search.html.ep b/templates/search.html.ep
index 47ec86a..f34f00f 100644
--- a/templates/search.html.ep
+++ b/templates/search.html.ep
@@ -1,5 +1,4 @@
% layout 'main', title => loc('searchtitle', q => search->query, ql => search->query_language);
-% use Mojo::JSON 'encode_json';
<div class="resultinfo">
<div id="pagination"><%= pagination(search->start_page, search->total_pages, url_with->query(['p' => '{page}'])) =%></div>
@@ -17,12 +16,7 @@
% };
</div>
-% if (search->collection_jsonld) {
-%= javascript begin
-KorAP.currentVC = <%== encode_json search->collection_jsonld %>;
-% end
-% };
-
+%= include 'query'
<div id="search">
% if (search->total_results != 0 && search->results->size) {
@@ -35,5 +29,3 @@
<p id="no-results"><%== loc 'noMatches', q => search->query %></p>
% }
</div>
-
-%= include 'query'