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); }