blob: 2df6a5875aa0488a1d5e720be2872a6908f3bd9d [file] [log] [blame]
"use strict";
define(['match/corpusByMatch','match/attachement','util'], function (cbmClass, attClass) {
// Localization values
const loc = KorAP.Locale;
loc.METADATA = loc.METADATA || 'Metadata';
return {
/**
* Create new match object
*/
create : function (match, fields) {
return Object.create(this)._init(match, fields);
},
/**
* Initialize object
*/
_init : function (match, fields) {
this._match = match;
this._fields = fields;
return this;
},
/**
* Get match object
*/
match : function () {
return this._match;
},
/**
* Create match reference view.
*/
element : function () {
if (this._element !== undefined)
return this._element;
if (this._fields === null)
return;
const metaDL = document.createElement('dl');
metaDL.classList.add("flex");
this._element = metaDL;
const fields = this._fields;
// Copy original array position to object
// before sorting by key title
const posInMetaArray = {};
fields.forEach((f,i) => posInMetaArray[f["key"]] = i);
// TODO: Meta fields should be separated
// Sort all meta keys alphabetically
Object.keys(posInMetaArray).sort().forEach(function(k) {
let field = fields[posInMetaArray[k]]; // This is the object
let metaL, dt, metaDescr, metaDD, att;
// Ignore internal IDs
if (k !== "UID" &&
k !== "corpusID" &&
k !== "docID" &&
k !== "textID" &&
k !== "layerInfos") {
metaL = document.createElement('div');
dt = metaL.addE('dt');
dt.addT(k);
dt.setAttribute("title", k);
metaDescr = field["value"];
metaDD = metaL.addE('dd');
metaDD.setAttribute('data-type', field["type"]);
if(metaDescr instanceof Array){
metaDD.classList.add("metakeyvalues");
metaDescr.forEach(function(md) {
if (field["type"] === 'type:attachement') {
att = attClass.create(md);
if (att)
metaDD.addE('div').appendChild(att.inline());
}
else {
metaDD.addE('div').addT(md);
}
});
}
else{
if (field["type"] === 'type:attachement') {
att = attClass.create(field["value"]);
if (att)
metaDD.appendChild(att.inline());
}
else {
metaDD.addT(field["value"]);
};
}
metaDL.appendChild(metaL);
};
});
// Add corpusByMatch assistant
this._corpusByMatch = cbmClass.create(this._element);
return this._element;
}
};
});