blob: 4a40ea5f9b9012d7bb68b50caa3777d84d7ba455 [file] [log] [blame]
/**
*
* Creates and displays corpus statistic
*
* @author Helge Stallkamp
*
*/
define(['util'], function (){
return{
/**
* Create new statistic object
*/
create: function(statistic){
return Object.create(this)._init(statistic);
},
/**
* Initialize statistic object
*/
_init: function(statistic){
if(statistic === undefined){
throw new Error("Missing parameter");
}
else{
this._statistic = statistic;
this._visibleStat = false;
return this;
}
},
/**
* Display statistic object
* as HTML Description List Element
*/
element : function(){
//if this._element already exists return without doing something
if (this._element !== undefined) {
return this._element;
};
//create HTML Description List Element
var statDL = document.createElement('dl');
var statistic = this._statistic;
var keys = Object.keys(statistic);
for(i = 0; i < keys.length; i++){
statSp = statDL.addE('div')
statDT = statSp.addE('dt');
var k = keys[i];
statDT.addT(k);
statDT.setAttribute('title' , k);
statDD = statSp.addE('dd');
statDD.addT(statistic[k]);
}
this._element = statDL;
return this._element;
},
/**
*
* Receive Corpus statistic from the server
*/
getStatistic : function(vc, cb){
//cq = corpusQuery
var cq = encodeURI(vc.toQuery());
try{
KorAP.API.getCorpStat(cq, function(statResponse){
if(statResponse === null){
cb(null);
return;
}
if(statResponse === undefined){
cb(null);
return;
}
//catches notifications
if(statResponse["notifications"] !== null && statResponse["notifications"] !== undefined ){
notif = statResponse["notifications"];
KorAP.log(0, notif[0][1]);
return;
}
cb(statResponse);
});
}
catch(e){
KorAP.log(0, e);
cb(null);
}
},
/**
* Shows corpus statistic
*/
showCorpStat : function(appendEl, vc){
/*
* If corpus statistic is already visible,
* there is no need to show the statistic again.
*/
if(this._visibleStat)
return;
var statTable = document.createElement('div');
statTable.classList.add('stattable', 'loading');
appendEl.appendChild(statTable);
var that = this;
/*
* Get corpus statistic, remove "loading"-image and
* append result to statTable
*/
this.getStatistic(vc, function (statistic) {
if (statistic === null)
return;
statTable.classList.remove('loading');
statisticobj = that.create(statistic);
statTable.appendChild(statisticobj.element());
// Add Close Button
var actions = document.createElement('ul');
actions.classList.add('action', 'image');
var b = actions.addE('li');
b.className = 'close';
b.addE('span').addT('close');
statTable.appendChild(actions);
b.addEventListener('click', function (e){
statTable.parentNode.removeChild(statTable);
that._visibleStat = false;
e.halt();
});
});
//corpus statistic is displayed
this._visibleStat = true;
// Do not load any longer
statTable.classList.remove('loading');
},
}
});