blob: 2cec7af7490c7f2ed16dd75a6f301282746c5e8c [file] [log] [blame]
Akrone51eaa32020-11-10 09:35:53 +01001"use strict";
Akrond4b000b2018-01-28 18:33:14 +01002
Akrone51eaa32020-11-10 09:35:53 +01003define(['match/corpusByMatch','match/attachement','util'], function (cbmClass, attClass) {
Akronff1b1f32020-10-18 11:41:29 +02004
Akronbd342982018-01-25 18:01:46 +01005 // Localization values
Akron0b489ad2018-02-02 16:49:32 +01006 const loc = KorAP.Locale;
Akron0ad7cd22018-02-08 18:03:06 +01007 loc.METADATA = loc.METADATA || 'Metadata';
Akronbd342982018-01-25 18:01:46 +01008
Akron24866cf2018-01-23 20:22:01 +01009 return {
10
11 /**
12 * Create new match object
13 */
Akron0ad7cd22018-02-08 18:03:06 +010014 create : function (match, fields) {
15 return Object.create(this)._init(match, fields);
Akron24866cf2018-01-23 20:22:01 +010016 },
17
Akronff1b1f32020-10-18 11:41:29 +020018
Akron24866cf2018-01-23 20:22:01 +010019 /**
20 * Initialize object
21 */
Akron0ad7cd22018-02-08 18:03:06 +010022 _init : function (match, fields) {
Akron24866cf2018-01-23 20:22:01 +010023 this._match = match;
Akron0ad7cd22018-02-08 18:03:06 +010024 this._fields = fields;
Akron24866cf2018-01-23 20:22:01 +010025 return this;
26 },
27
Akronff1b1f32020-10-18 11:41:29 +020028
Akron24866cf2018-01-23 20:22:01 +010029 /**
30 * Get match object
31 */
32 match : function () {
33 return this._match;
34 },
35
Akronff1b1f32020-10-18 11:41:29 +020036
Akron24866cf2018-01-23 20:22:01 +010037 /**
38 * Create match reference view.
39 */
Akron0ad7cd22018-02-08 18:03:06 +010040 element : function () {
Akron24aa0052020-11-10 11:00:34 +010041 if (this._el !== undefined)
42 return this._el;
Akronbd342982018-01-25 18:01:46 +010043
Akron0ad7cd22018-02-08 18:03:06 +010044 if (this._fields === null)
45 return;
Akronbd342982018-01-25 18:01:46 +010046
Akronff1b1f32020-10-18 11:41:29 +020047 const metaDL = document.createElement('dl');
Akron2f979122018-07-25 17:00:23 +020048 metaDL.classList.add("flex");
Akronbd342982018-01-25 18:01:46 +010049
Akron24aa0052020-11-10 11:00:34 +010050 this._el = metaDL;
Akron24866cf2018-01-23 20:22:01 +010051
Akronff1b1f32020-10-18 11:41:29 +020052 const fields = this._fields;
Akron0ad7cd22018-02-08 18:03:06 +010053
Akronabd6e352018-11-19 15:36:42 +010054 // Copy original array position to object
55 // before sorting by key title
Akronff1b1f32020-10-18 11:41:29 +020056 const posInMetaArray = {};
Akronb50964a2020-10-12 11:44:37 +020057 fields.forEach((f,i) => posInMetaArray[f["key"]] = i);
Akronabd6e352018-11-19 15:36:42 +010058
Akron24866cf2018-01-23 20:22:01 +010059 // TODO: Meta fields should be separated
Akronff1b1f32020-10-18 11:41:29 +020060
Akronabd6e352018-11-19 15:36:42 +010061 // Sort all meta keys alphabetically
Akron678c26f2020-10-09 08:52:50 +020062 Object.keys(posInMetaArray).sort().forEach(function(k) {
63 let field = fields[posInMetaArray[k]]; // This is the object
Akron7dd32822018-10-01 19:38:31 +020064
Akronff1b1f32020-10-18 11:41:29 +020065 let metaL, dt, metaDescr, metaDD, att;
Akrone3b566d2026-03-05 17:40:10 +010066 const isNotInIndex = field["comment"] === "notinindex";
Akronff1b1f32020-10-18 11:41:29 +020067
Akron7dd32822018-10-01 19:38:31 +020068 // Ignore internal IDs
Akron24866cf2018-01-23 20:22:01 +010069 if (k !== "UID" &&
70 k !== "corpusID" &&
71 k !== "docID" &&
72 k !== "textID" &&
Akron24866cf2018-01-23 20:22:01 +010073 k !== "layerInfos") {
74
Akronff1b1f32020-10-18 11:41:29 +020075 metaL = document.createElement('div');
Akrone3b566d2026-03-05 17:40:10 +010076
Akronff1b1f32020-10-18 11:41:29 +020077 dt = metaL.addE('dt');
Akronc4568382018-03-06 20:16:12 +010078 dt.addT(k);
79 dt.setAttribute("title", k);
hebasta24fbc9e2018-04-12 13:47:50 +020080
Akronff1b1f32020-10-18 11:41:29 +020081 metaDescr = field["value"];
Akrond45a1702018-11-19 18:15:17 +010082 metaDD = metaL.addE('dd');
83 metaDD.setAttribute('data-type', field["type"]);
Akrone3b566d2026-03-05 17:40:10 +010084 if (isNotInIndex) {
85 metaDD.classList.add("notinindex");
86 };
Akrona0ea3c32018-12-14 18:33:48 +010087
hebasta24fbc9e2018-04-12 13:47:50 +020088 if(metaDescr instanceof Array){
Akronb50964a2020-10-12 11:44:37 +020089 metaDD.classList.add("metakeyvalues");
90 metaDescr.forEach(function(md) {
Akrona0ea3c32018-12-14 18:33:48 +010091 if (field["type"] === 'type:attachement') {
Akronff1b1f32020-10-18 11:41:29 +020092 att = attClass.create(md);
Akrona0ea3c32018-12-14 18:33:48 +010093 if (att)
94 metaDD.addE('div').appendChild(att.inline());
95 }
96 else {
Akronb50964a2020-10-12 11:44:37 +020097 metaDD.addE('div').addT(md);
Akrona0ea3c32018-12-14 18:33:48 +010098 }
Akronb50964a2020-10-12 11:44:37 +020099 });
hebasta24fbc9e2018-04-12 13:47:50 +0200100 }
101 else{
Akrona0ea3c32018-12-14 18:33:48 +0100102 if (field["type"] === 'type:attachement') {
Akronff1b1f32020-10-18 11:41:29 +0200103 att = attClass.create(field["value"]);
Akrona0ea3c32018-12-14 18:33:48 +0100104 if (att)
Akronff1b1f32020-10-18 11:41:29 +0200105 metaDD.appendChild(att.inline());
Akrona0ea3c32018-12-14 18:33:48 +0100106 }
107 else {
108 metaDD.addT(field["value"]);
109 };
hebasta24fbc9e2018-04-12 13:47:50 +0200110 }
Akron7dd32822018-10-01 19:38:31 +0200111
Akronbd342982018-01-25 18:01:46 +0100112 metaDL.appendChild(metaL);
Akron24866cf2018-01-23 20:22:01 +0100113 };
Akron678c26f2020-10-09 08:52:50 +0200114 });
Akron7dd32822018-10-01 19:38:31 +0200115
Akronabd6e352018-11-19 15:36:42 +0100116 // Add corpusByMatch assistant
Akron24aa0052020-11-10 11:00:34 +0100117 this._corpusByMatch = cbmClass.create(this._el);
Akronabd6e352018-11-19 15:36:42 +0100118
Akron24aa0052020-11-10 11:00:34 +0100119 return this._el;
Akronaeceda72018-02-02 20:44:06 +0100120 }
Akron24866cf2018-01-23 20:22:01 +0100121 };
Akron30ee5142015-06-26 01:50:14 +0200122});