Add appending of unspecified documents
diff --git a/public/js/src/vc.js b/public/js/src/vc.js
index 290531a..52bf129 100644
--- a/public/js/src/vc.js
+++ b/public/js/src/vc.js
@@ -5,7 +5,7 @@
// TODO: Implement "toQuery"
/*
- * Error codes:
+ Error codes:
701: "JSON-LD group has no @type attribute"
704: "Operation needs operand list"
802: "Match type is not supported by value type"
@@ -40,10 +40,12 @@
loc.DEL = loc.DEL || '×';
loc.EMPTY = loc.EMPTY || '⋯'
+
function _bool (bool) {
return (bool === undefined || bool === false) ? false : true;
};
+
function _removeChildren (node) {
// Remove everything underneath
while (node.firstChild)
@@ -60,8 +62,15 @@
// Add 'and'-criterion
KorAP._and = function (e) {
var obj = this.parentNode.refTo;
+ if (obj.ldType() === 'docGroup') {
+ console.log('~~~~~~~~~');
+ }
+ else if (obj.ldType() === 'doc') {
+ obj.parent().newAfter(obj);
+ };
};
+
// Remove doc or docGroup
KorAP._delete = function (e) {
var obj = this.parentNode.refTo;
@@ -71,13 +80,19 @@
obj.parent().clean();
};
+
+ /**
+ * Virtual Collection
+ */
KorAP.VirtualCollection = {
ldType : function () {
return null;
},
+
create : function () {
return Object.create(KorAP.VirtualCollection);
},
+
clean : function () {
if (this._root.ldType() !== "non") {
this._root.destroy();
@@ -85,6 +100,7 @@
};
return this;
},
+
render : function (json) {
var obj = Object.create(KorAP.VirtualCollection);
@@ -112,6 +128,7 @@
return obj;
},
+
root : function (obj) {
if (arguments.length === 1) {
var e = this.element();
@@ -146,17 +163,22 @@
return this._element;
},
+
+ update : function () {
+ this._root.update();
+ return this;
+ },
+
toJson : function () {
return this._root.toJson();
},
- toString : function () {
- return this._root.toString();
- },
- update : function () {
- this._root.update();
+
+ toQuery : function () {
+ return this._root.toQuery();
}
};
+
/**
* Operators for criteria
*/
@@ -168,6 +190,7 @@
op.del(del);
return op;
},
+
update : function () {
// Init the element
if (this._element === undefined)
@@ -232,16 +255,19 @@
this.update();
return this._element;
},
+
and : function (bool) {
if (arguments.length === 1)
this._and = _bool(bool);
return this._and;
},
+
or : function (bool) {
if (arguments.length === 1)
this._or = _bool(bool);
return this._or;
},
+
del : function (bool) {
if (arguments.length === 1)
this._del = _bool(bool);
@@ -264,6 +290,7 @@
return obj;
},
+
update : function () {
if (this._element === undefined)
@@ -291,13 +318,12 @@
return this.element();
},
+
element : function () {
if (this._element !== undefined)
return this._element;
-
this._element = document.createElement('div');
- this._element.setAttribute('class', 'unspecified');
-
+ this._element.setAttribute('class', 'doc unspecified');
this.update();
return this._element;
}
@@ -305,7 +331,7 @@
/**
- * Virtual collection doc criterion.
+ * Document criterion
*/
KorAP.Doc = {
_ldType : "doc",
@@ -410,6 +436,7 @@
return div;
*/
},
+
// Deserialize from json
fromJson : function (json) {
if (json === undefined)
@@ -512,6 +539,7 @@
return this;
},
+
key : function (value) {
if (arguments.length === 1) {
this._key = value;
@@ -519,6 +547,7 @@
};
return this._key;
},
+
matchop : function (match) {
if (arguments.length === 1) {
this._matchop = match.replace(/^match:/, '');
@@ -526,6 +555,7 @@
};
return this._matchop || "eq";
},
+
type : function (type) {
if (arguments.length === 1) {
this._type = type;
@@ -533,6 +563,7 @@
};
return this._type || "string";
},
+
value : function (value) {
if (arguments.length === 1) {
this._value = value;
@@ -540,6 +571,7 @@
};
return this._value;
},
+
toJson : function () {
if (!this.matchop() || !this.key())
return {};
@@ -552,7 +584,8 @@
"type" : "type:" + this.type()
};
},
- toString : function () {
+
+ toQuery : function () {
if (!this.matchop() || !this.key())
return "";
@@ -593,12 +626,13 @@
break;
};
- return "...";
+ return "";
}
};
+
/**
- * Virtual collection group criterion.
+ * Document group criterion
*/
KorAP.DocGroup = {
_ldType : "docGroup",
@@ -611,6 +645,17 @@
obj._parent = parent;
return obj;
},
+
+ newAfter : function (obj) {
+ for (var i in this._operands) {
+ if (this._operands[i] === obj) {
+ var operand = KorAP.UnspecifiedDoc.create(this);
+ this._operands.splice(i + 1, 0, operand);
+ return this.update();
+ };
+ };
+ },
+
append : function (operand) {
// Append unspecified object
@@ -660,6 +705,7 @@
return;
};
},
+
update : function () {
// There is only one operand in group
if (this._operands.length === 1) {
@@ -713,6 +759,7 @@
return this;
},
+
element : function () {
if (this._element !== undefined)
return this._element;
@@ -725,6 +772,7 @@
return this._element;
},
+
operation : function (op) {
if (arguments.length === 1) {
if (KorAP._validGroupOpRE.test(op)) {
@@ -737,9 +785,11 @@
};
return this._op || 'and';
},
+
operands : function () {
return this._operands;
},
+
getOperand : function (index) {
return this._operands[index];
},
@@ -836,6 +886,7 @@
return this;
},
+
toJson : function () {
var opArray = new Array();
for (var i in this._operands) {
@@ -847,17 +898,21 @@
"operands" : opArray
};
},
- toString : function () {
+
+ toQuery : function () {
return this._operands.
map(function (op) {
- return op.ldType() === 'docGroup' ? '(' + op.toString() + ')' : op.toString()
- }).
- join(this.operation() === 'or' ? ' | ' : ' & ')
+ return (op.ldType() === 'docGroup') ?
+ '(' + op.toQuery() + ')' :
+ op.toQuery();
+ }).join(this.operation() === 'or' ? ' | ' : ' & ')
}
};
- // Abstract JsonLD object
+ /**
+ * Abstract JsonLD criterion object
+ */
KorAP.JsonLD = {
_changed : false,
@@ -928,7 +983,8 @@
"@type" : "korap:" + this.ldType()
};
},
- toString : function () {
+
+ toQuery : function () {
return loc.EMPTY;
}
};