Skip to content
Snippets Groups Projects
create_arbo.js 3.56 KiB
Newer Older
Deleted User's avatar
Deleted User committed
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);
Deleted User's avatar
Deleted User committed
	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);
Deleted User's avatar
Deleted User committed
	return (intent_labels_tab);
}