Introduce vc fragments for corpusByMatch
Change-Id: I0376bc646555181efa76608fe80f63c12aec80e0
diff --git a/dev/js/src/vc/fragment.js b/dev/js/src/vc/fragment.js
new file mode 100644
index 0000000..a1892c8
--- /dev/null
+++ b/dev/js/src/vc/fragment.js
@@ -0,0 +1,131 @@
+/**
+ * Create a virtual corpus fragment,
+ * that can be shown and merge with the
+ * main VC.
+ *
+ * @author Nils Diewald
+ */
+
+define(['util'], function () {
+ "use strict";
+
+ // Create a VC doc
+ function _doc (op) {
+ var doc = document.createElement('div');
+ doc.setAttribute('class','doc');
+
+ var key = doc.addE('span');
+ key.setAttribute('class','key');
+ key.addT(op[0]);
+
+ var match = doc.addE('span');
+ match.setAttribute('class','match');
+ match.addT('eq');
+
+ var value = doc.addE('span');
+ value.setAttribute('class', 'value');
+ value.addT(op[1]);
+
+ return doc;
+ };
+
+
+ return {
+
+ create : function () {
+ var obj = Object.create(this);
+ obj._operands = [];
+ return obj;
+ },
+
+
+ /**
+ * Add document constraint to fragment
+ */
+ add : function (key, value, type) {
+ for (var i in this._operands) {
+ var op = this._operands[i];
+ if (op[0] === key && op[1] === value) {
+ array.splice(index, 1);
+ };
+ };
+ this._operands.push([key, value, type]);
+ this.update();
+ },
+
+
+ /**
+ * Remove document constraint from fragment
+ */
+ remove : function (key, value) {
+ for (var i in this._operands) {
+ var op = this._operands[i];
+ if (op[0] === key && op[1] === value) {
+ this._operands.splice(i, 1);
+ this.update();
+ return;
+ };
+ };
+ return;
+ },
+
+
+ /**
+ * Add fragment constraints to VC.
+ */
+ mergeWithVC : function () {
+ },
+
+
+ /**
+ * Get the element associated with the virtual corpus
+ */
+ element : function () {
+ if (this._element !== undefined) {
+ return this._element;
+ };
+
+ this._element = document.createElement('div');
+ this._element.classList.add('vc', 'fragment');
+ return this._element;
+ },
+
+
+ /**
+ * Update the whole object based on the underlying data structure
+ */
+ update : function() {
+
+ // <div class="docGroup" data-operation="and">
+ // <div class="doc">
+ // <span class="key">author</span>
+ // <span class="match">eq</span>
+ // <span class="value">Baum</span>
+ // </div>
+ // </div>
+ var root;
+ var l = this._operands.length;
+ if (l > 1) {
+
+ root = document.createElement('div');
+ root.setAttribute('class','docGroup');
+ root.setAttribute('data-operation', 'and');
+
+ for (var i in this._operands) {
+ root.appendChild(_doc(this._operands[i]));
+ };
+ }
+ else if (l == 1) {
+ root = _doc(this._operands[0]);
+ };
+
+ var e = this.element();
+ if (e.firstChild)
+ e.replaceChild(root, e.firstChild);
+ else
+ e.appendChild(root);
+
+ return this;
+ }
+ }
+});