blob: 5bda78cc554b057b8dfa27f87323ca7fe8bc94cb [file] [log] [blame]
/**
* An unspecified criterion in a virtual corpus.
* Inherits everything from jsonld
*/
"use strict";
define([
'vc/jsonld',
'vc/doc',
'vc/docgroupref',
'util'
], function (jsonldClass, docClass, docGroupRefClass) {
// Localize empty string
const loc = KorAP.Locale;
loc.EMPTY = loc.EMPTY || '⋯';
return {
// The ld-type
_ldType : "non",
/**
* Create new unspecified criterion
* with a link to the parent object
*/
create : function (parent) {
const obj = Object.create(jsonldClass).
upgradeTo(this);
if (parent !== undefined)
obj._parent = parent;
return obj;
},
/**
* Set the key; this will spawn a new doc
*/
key : function (v) {
// Not replaceable
if (this._parent === undefined)
return null;
let newDoc;
const keyType = KorAP._vcKeyMenu.typeOf(v);
// Set JSON-LD type
if (keyType && keyType === 'ref') {
newDoc = docGroupRefClass.create(this._parent);
}
else {
newDoc = docClass.create(this._parent);
newDoc.key(v);
newDoc.type(keyType);
};
// Unspecified document on root
if (this._parent.ldType() === null) {
this._parent.root(newDoc);
this.destroy();
}
// Unspecified document in group
else {
this._parent.replaceOperand(this, newDoc);
};
this._parent.update();
return newDoc;
},
/**
* Update the element
*/
update : function () {
const t = this;
if (t._el === undefined)
return t.element();
// Remove element content
_removeChildren(t._el);
const ellipsis = document.createElement('span');
ellipsis.addT(loc.EMPTY);
// Click on empty criterion
ellipsis.addEventListener('click', t.onclick.bind(t));
t._el.appendChild(ellipsis);
// Set ref - TODO: Cleanup!
t._el.refTo = t;
// Set operators
if (t._parent !== undefined &&
t.parent().ldType() !== null) {
t._el.appendChild(
t.operators(
false,
false,
true
).element()
);
};
return t.element();
},
/**
* Get the associated element
*/
element : function () {
const t = this;
if (t._el !== undefined)
return t._el;
t._el = document.createElement('div');
t._el.setAttribute('class', 'doc unspecified');
t.update();
return t._el;
},
incomplete : function () {
return true;
},
/**
* Click on the unspecified object
*/
onclick : function () {
// Get the key menu
const menu = KorAP._vcKeyMenu;
// Add key menu element at the correct position
this._el.insertBefore(
menu.element(),
this._el.firstChild
);
const that = this;
// Set released method
menu.released(function (key) {
// Set chosen key and type - will return a doc
that.key(key).update();
this.hide();
});
menu.show();
menu.focus();
}
};
});