Minor changes in the vc api
diff --git a/dev/demo/alldemo.js b/dev/demo/alldemo.js
index 29dd405..547a09f 100644
--- a/dev/demo/alldemo.js
+++ b/dev/demo/alldemo.js
@@ -224,13 +224,13 @@
"operands":[
{
"@type":"koral:doc",
- "key":"Titel",
+ "key":"title",
"value":"Der Birnbaum",
"match":"match:eq"
},
{
"@type":"koral:doc",
- "key":"Veröffentlichungsort",
+ "key":"pubPlace",
"value":"Mannheim",
"match":"match:eq"
},
@@ -240,13 +240,13 @@
"operands":[
{
"@type":"koral:doc",
- "key":"Untertitel",
+ "key":"subTitle",
"value":"Aufzucht und Pflege",
"match":"match:eq"
},
{
"@type":"koral:doc",
- "key":"Untertitel",
+ "key":"subTitle",
"value":"Gedichte",
"match":"match:eq",
"rewrites" : [
@@ -263,7 +263,7 @@
},
{
"@type":"koral:doc",
- "key":"Veröffentlichungsdatum",
+ "key":"pubDate",
"type":"type:date",
"value":"2015-03-05",
"match":"match:geq"
@@ -428,6 +428,9 @@
KorAP.hintArray = hintArray;
+ // Set current virtual collection
+ KorAP.currentVC = vcExample;
+
// Parse and show the table
// Override getMatchInfo API call
KorAP.API.getMatchInfo = function(match, callObj, cb) {
diff --git a/dev/demo/vcdemo.js b/dev/demo/vcdemo.js
index ff93f27..e92b324 100644
--- a/dev/demo/vcdemo.js
+++ b/dev/demo/vcdemo.js
@@ -77,12 +77,12 @@
// Create a new virtual collection by passing a based json object and
// field menu information
- var vc = vcClass.render(json, [
+ var vc = vcClass.create([
['title', 'string'],
['subTitle', 'string'],
['pubDate', 'date'],
['author', 'string']
- ]);
+ ]).fromJson(json);
document.getElementById('vc').appendChild(vc.element());
// show the current JSON serialization
diff --git a/dev/js/spec/vcSpec.js b/dev/js/spec/vcSpec.js
index 3dd0749..792dc3e 100644
--- a/dev/js/spec/vcSpec.js
+++ b/dev/js/spec/vcSpec.js
@@ -21,10 +21,7 @@
for (var prop in overwrites) {
newObj[prop] = overwrites[prop];
};
- if (objClass === vcClass)
- return objClass.render(newObj);
- else
- return objClass.create().fromJson(newObj);
+ return objClass.create().fromJson(newObj);
}
}
};
@@ -625,7 +622,7 @@
});
it('should be replaceable on root', function () {
- var vc = vcClass.render();
+ var vc = vcClass.create();
expect(vc.toQuery()).toEqual("");
expect(vc.root().ldType()).toEqual("non");
@@ -874,7 +871,7 @@
});
it('should be initializable', function () {
- var vc = vcClass.render();
+ var vc = vcClass.create();
expect(vc.element().getAttribute('class')).toEqual('vc');
expect(vc.root().element().getAttribute('class')).toEqual('doc unspecified');
@@ -883,7 +880,7 @@
});
it('should be based on a doc', function () {
- var vc = vcClass.render({
+ var vc = vcClass.create().fromJson({
"@type" : "koral:doc",
"key":"Titel",
"value":"Baum",
@@ -905,7 +902,7 @@
});
it('should be based on a docGroup', function () {
- var vc = vcClass.render(simpleGroupFactory.create().toJson());
+ var vc = vcClass.create().fromJson(simpleGroupFactory.create().toJson());
expect(vc.element().getAttribute('class')).toEqual('vc');
expect(vc.root().element().getAttribute('class')).toEqual('docGroup');
@@ -1122,7 +1119,7 @@
});
it('should flatten on import', function () {
- var vc = vcClass.create().render({
+ var vc = vcClass.create().fromJson({
"@type":"koral:docGroup",
"operation":"operation:or",
"operands":[
@@ -1247,7 +1244,7 @@
});
it('should clean on root docs', function () {
- var vc = vcClass.render({
+ var vc = vcClass.create().fromJson({
"@type": 'koral:doc',
"key": 'pubDate',
"match": 'match:eq',
@@ -1265,7 +1262,7 @@
});
it('should remove on nested docs', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:and',
@@ -1295,7 +1292,7 @@
});
it('should clean on doc groups', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:and',
@@ -1369,7 +1366,7 @@
});
it('should remove on nested doc groups (list flattening)', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:or',
@@ -1480,7 +1477,7 @@
});
it('should add new unspecified doc with "and"', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:and',
@@ -1525,7 +1522,7 @@
});
it('should add new unspecified doc with "or"', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:and',
@@ -1724,7 +1721,7 @@
});
it('should wrap on root', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:and',
@@ -1758,7 +1755,7 @@
});
it('should add on root (case "and")', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:doc',
"key": 'pubDate',
@@ -1780,7 +1777,7 @@
});
it('should add on root (case "or")', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:doc',
"key": 'pubDate',
@@ -1801,7 +1798,7 @@
});
it('should support multiple sub groups per group', function () {
- var vc = vcClass.render(
+ var vc = vcClass.create().fromJson(
{
"@type": 'koral:docGroup',
'operation' : 'operation:or',
@@ -1857,8 +1854,9 @@
});
});
- describe('KorAP.Rewrite', function () {
+
+ describe('KorAP.Rewrite', function () {
it('should be initializable', function () {
var rewrite = rewriteClass.create({
"@type" : "koral:rewrite",
@@ -1902,10 +1900,41 @@
expect(doc.element().classList.contains('doc')).toBeTruthy();
expect(doc.element().classList.contains('rewritten')).toBeTruthy();
});
- /*
- it('should be deserialized by docGroups', function () {
- });
- */
+
+ xit('should be deserialized by docGroups', function () {
+ var docGroup = docGroupClass.create(
+ undefined,
+ {
+ "@type" : "koral:docGroup",
+ "operation" : "operation:or",
+ "operands" : [
+ {
+ "@type" : "doc",
+ "key" : "pubDate",
+ "type" : "type:date",
+ "value" : "2014-12-05"
+ },
+ {
+ "@type" : "doc",
+ "key" : "pubDate",
+ "type" : "type:date",
+ "value" : "2014-12-06"
+ }
+ ],
+ "rewrites" : [
+ {
+ "@type" : "koral:rewrite",
+ "operation" : "operation:modification",
+ "src" : "querySerializer",
+ "scope" : "tree"
+ }
+ ]
+ }
+ );
+
+ expect(doc.element().classList.contains('docgroup')).toBeTruthy();
+ expect(doc.element().classList.contains('rewritten')).toBe(false);
+ });
});
/*
describe('KorAP.DocKey', function () {
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 66bc081..cd0adfc 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -70,11 +70,37 @@
)
);
input.parentNode.insertBefore(vcname, input);
-
+
+ /**
+ * Toggle the Virtual Collection builder
+ */
+ var vc;
vcname.onclick = function () {
- var vc = vcClass.render(vcExample);
var view = document.getElementById('vc-view');
- view.appendChild(vc.element());
+
+ // The vc is visible
+ if (this.classList.contains('active')) {
+ view.removeChild(vc.element());
+ this.classList.remove('active');
+ }
+
+ // The vc is not visible
+ else {
+ // The vc is not rendered yet
+ if (vc === undefined) {
+ vc = vcClass.create([
+ ['title', 'string'],
+ ['subTitle', 'string'],
+ ['pubDate', 'date'],
+ ['author', 'string']
+ ]);
+
+ if (KorAP.currentVC !== undefined)
+ vc.fromJson(KorAP.currentVC);
+ };
+ view.appendChild(vc.element());
+ this.classList.add('active');
+ };
};
};
diff --git a/dev/js/src/vc.js b/dev/js/src/vc.js
index 80f6627..c816883 100644
--- a/dev/js/src/vc.js
+++ b/dev/js/src/vc.js
@@ -131,32 +131,25 @@
* Create a new virtual collection.
*/
create : function (keyList) {
- return Object.create(this)._init(keyList);
- },
-
- clean : function () {
- if (this._root.ldType() !== "non") {
- this._root.destroy();
- this.root(unspecDocClass.create(this));
- };
- return this;
+ var obj = Object.create(this)._init(keyList);
+ obj._root = unspecDocClass.create(obj);
+ return obj;
},
/**
* Create and render a new virtual collection
* based on a KoralQuery collection document
*/
- render : function (json, keyList) {
- var obj = Object.create(this)._init(keyList);
+ fromJson : function (json) {
if (json !== undefined) {
// Parse root document
if (json['@type'] == 'koral:doc') {
- obj._root = docClass.create(obj, json);
+ this._root = docClass.create(this, json);
}
// parse root group
else if (json['@type'] == 'koral:docGroup') {
- obj._root = docGroupClass.create(obj, json);
+ this._root = docGroupClass.create(this, json);
}
// Unknown collection type
else {
@@ -167,13 +160,21 @@
else {
// Add unspecified object
- obj._root = unspecDocClass.create(obj);
+ this._root = unspecDocClass.create(this);
};
// Init element and update
- obj.update();
+ this.update();
- return obj;
+ return this;
+ },
+
+ clean : function () {
+ if (this._root.ldType() !== "non") {
+ this._root.destroy();
+ this.root(unspecDocClass.create(this));
+ };
+ return this;
},
/**
diff --git a/dev/js/src/vc/doc.js b/dev/js/src/vc/doc.js
index 10a49a8..5571cf7 100644
--- a/dev/js/src/vc/doc.js
+++ b/dev/js/src/vc/doc.js
@@ -335,10 +335,13 @@
if (arguments.length === 1) {
var m = match.replace(/^match:/, '');
if (
- (
- (this._type === 'string' || this._type === 'regex') &&
- KorAP._validStringMatchRE.test(m)
- ) ||
+ (this._type === undefined)
+ ||
+ (
+ (this._type === 'string' || this._type === 'regex') &&
+ KorAP._validStringMatchRE.test(m)
+ )
+ ||
(this._type === 'date' && KorAP._validDateMatchRE.test(m))
) {
this._matchop = m;