-
Deleted User authoredDeleted User authored
create_arbo.js 3.55 KiB
function request(address) {
var xhr = new XMLHttpRequest();
/*xhr.onreadystatechange = function () {
//if (xhr.readyState == 4)
//alert("reponse = " + xhr.responseText);
};*/
xhr.open("GET", "http://127.0.0.1:5000/"+address, false);
xhr.send();
return (xhr.responseText);
}
function have_a_father(labels_tab, father_id) {
/**
* Search in labels_tab if there is a father of a child.
* If it as father return his position else return -1.
*/
for (var i = 0; labels_tab[i]; i++) {
if (labels_tab[i][0] == father_id)
return (i);
}
return (-1);
}
function add_in_tab(tab, add, posi) {
/**
* Put add in tab[posi] without remove the previous value.
*/
var result = [];
for (var i = 0; i < posi; i++)
result[i] = tab[i];
result.push(add);
for(var i = posi; tab[i]; i++)
result.push(tab[i]);
return(result);
}
function order_labels_list(labels_tab) {
/**
* Organise labels_tab in this order:
* Before: [[DadA, ...], [DadB, ...], [ChildA, ...], [ChildA, ...]]
* After : [[DadA, ...], [ChildA, ...], [ChildA, ...], [DadB, ...]]
* Dad before his childs. It's for print labels in the order.
* In the first loop we retrieve labels without father and in the
* second we add their childs at their right.
*/
var labels_tab_final = [];
var posi_father = -1;
for (var i = 0; labels_tab[i]; i++) {
if (!labels_tab[i][2])
labels_tab_final.push(labels_tab[i]);
}
for (var i = 0; labels_tab[i]; i++) {
posi_father = -1;
if (labels_tab[i][2]) {
posi_father = have_a_father(labels_tab_final, labels_tab[i][2]);
if (posi_father != -1)
labels_tab_final = add_in_tab(labels_tab_final, labels_tab[i], posi_father + 1);
}
}
return (labels_tab_final);
}
function revstr(str) {
/**
* Return reverse string pass in parameter.
*/
for (var i = 0, inter = '', str = str.split(''); i < str.length / 2; i++) {
inter = str[i];
str[i] = str[str.length - 1 - i];
str[str.length - 1 - i] = inter;
}
return (str.join(''));
}
function create_tab_lvl_intent(labels_tab) {
/**
* Create tab in each case represent a number of father
* of the label.
*/
var result = [];
var len = 0;
for (var i = 0; labels_tab[i]; i++) {
var inter = labels_tab[i];
while (inter[2] != undefined) {
len++;
inter = labels_tab[have_a_father(labels_tab, inter[2])];
}
//console.log(labels_tab[i][1]+' '+len);
result.push(len);
len = 0;
}
return (result);
}
function intent(labels_tab, tab_lvl_intent) {
/**
* Create a new labels_tab and add \t to label name due
* to tab_lvl_intent.
*/
var result = labels_tab;
for (var i = 0; i < tab_lvl_intent.length; i++) {
if (tab_lvl_intent[i] != 0) {
labels_tab[i][1] = revstr(labels_tab[i][1]);
labels_tab[i][1] = labels_tab[i][1].split('');
for (var p = 0; p < tab_lvl_intent[i]; p++) {
if ((p == 0 && tab_lvl_intent[i] <= 1) ||
(p == tab_lvl_intent[i] - 1))
labels_tab[i][1].push('────├');
else
labels_tab[i][1].push('────');
}
labels_tab[i][1] = labels_tab[i][1].join('');
labels_tab[i][1] = revstr(labels_tab[i][1]);
}
else {
var inter = '[' + labels_tab[i][1] + ']';
labels_tab[i][1] = inter;
}
result[i].push(0);
}
return (result);
}
function order_intent_labels_tab() {
/**
* Order labels tab and add the right number of \t before labels
* name.
*/
var labels_tab = JSON.parse(request("get_datas/labels"))
labels_tab = order_labels_list(labels_tab);
var lvl_intent = create_tab_lvl_intent(labels_tab);
var intent_labels_tab = intent(labels_tab, lvl_intent);
//console.log(intent_labels_tab);
return (intent_labels_tab);
}