blob: 603a230f6f9b046f1bfe82523eff759ece67c89c [file] [log] [blame]
/**
* The match panel.
*
* @author Nils Diewald
*/
"use strict";
define([
'panel',
'match/treeitem',
'view/match/tokentable',
'view/match/meta',
'view/match/relations',
'buttongroup/menu',
], function (panelClass,treeItemClass,tableView,metaView,relationsView,buttonGroupMenuClass) {
// Override
KorAP.API.getMatchInfo = KorAP.API.getMatchInfo || function () {
KorAP.log(0, 'KorAP.API.getMatchInfo() not implemented')
return {};
};
const loc = KorAP.Locale;
loc.SHOWANNO = loc.SHOWANNO || 'Tokens';
loc.SHOW_META = loc.SHOW_META || 'Metadata';
loc.ADDTREE = loc.ADDTREE || 'Relations';
return {
create : function (match) {
return Object.create(panelClass)._init(['matchinfo']).upgradeTo(this)._init(match);
},
// Initialize match panel
_init : function (match) {
this._match = match;
const a = this.actions;
// TODO:
// Ugly hack!
const cl = a.element().classList;
cl.remove('matchinfo');
cl.add('button-matchinfo');
// Add meta button
a.add(
loc.SHOW_META, {'cls':['metatable']}, function (e) {
this.addMeta();
}
);
// Add token annotation button
a.add(
loc.SHOWANNO, {'cls':['info']}, function (e) {
this.addTable();
}
);
// Add relations button
a.add(
loc.ADDTREE, {'cls':['tree']}, function (e) {
// Get global tree menu
if (KorAP.TreeMenu === undefined) {
KorAP.TreeMenu = buttonGroupMenuClass.create([], treeItemClass);
KorAP.TreeMenu.element().setAttribute('id', 'treeMenu');
};
const tm = KorAP.TreeMenu;
// Set panel
tm.panel(this);
// Reread list
tm.readItems(this._treeMenuList());
// Reposition and show menu
tm.show();
tm.button(this.button);
tm.focus();
}
);
// If plugins are enabled, add all buttons for the match panel
if (KorAP.Plugin) {
const matchButtons = KorAP.Plugin.buttonGroup("match");
if (matchButtons) {
// Add all matchbuttons in order
matchButtons.forEach(m => a.add.apply(a, m));
};
};
return this;
},
/**
* Add meta view to panel
*/
addMeta : function () {
const t = this;
if (t._metaView && t._metaView.shown())
return;
t._metaView = metaView.create(t._match);
t.add(t._metaView);
},
/**
* Add table view to panel
*/
addTable : function () {
const t = this;
if (t._tableView && t._tableView.shown())
return;
t._tableView = tableView.create(t._match);
t.add(t._tableView);
},
/**
* Add Tree view to panel
*/
addTree : function (foundry, layer, type) {
this.add(
relationsView.create(this._match, foundry, layer, type)
);
},
// Return tree menu list
_treeMenuList : function () {
if (this._menuList)
return this._menuList;
// Join spans and relations
let treeLayers = []
const match = this._match;
match.getSpans().forEach(i => treeLayers.push(i));
match.getRels().forEach(i => treeLayers.push(i));
// Get spans
treeLayers = treeLayers.sort(
function (a, b) {
if (a.foundry < b.foundry) {
return -1;
}
else if (a.foundry > b.foundry) {
return 1;
}
else if (a.layer < b.layer) {
return -1;
}
else if (a.layer > b.layer) {
return 1;
};
return 0;
});
let menuList = [];
// Show tree views
treeLayers.forEach(
s =>
// Add foundry/layer to menu list
menuList.push([
s.foundry + '/' + s.layer,
s.foundry,
s.layer,
s.type
]));
// Create tree menu
this._menuList = menuList;
return menuList;
}
}
});