1
0
forked from ScoDoc/ScoDoc

js code format

This commit is contained in:
Emmanuel Viennet 2023-09-21 10:24:09 +02:00
parent e918b5bcb4
commit 7b62ab8784
2 changed files with 416 additions and 331 deletions

View File

@ -4,135 +4,165 @@
// console.log('etud_debouche.js loaded'); // console.log('etud_debouche.js loaded');
$(function () { $(function () {
display_itemsuivis(false); display_itemsuivis(false);
}); });
function display_itemsuivis(active) { function display_itemsuivis(active) {
var etudid = $('div#fichedebouche').data("etudid"); var etudid = $("div#fichedebouche").data("etudid");
var readonly = $('div#fichedebouche').data('readonly'); // present ro interface var readonly = $("div#fichedebouche").data("readonly"); // present ro interface
if (!readonly) { if (!readonly) {
$('#adddebouchelink').off("click").click(function (e) { $("#adddebouchelink")
e.preventDefault(); .off("click")
$.post(SCO_URL + "/itemsuivi_create", { etudid: etudid, format: 'json' }).done(item_insert_new); .click(function (e) {
e.preventDefault();
$.post(SCO_URL + "/itemsuivi_create", {
etudid: etudid,
fmt: "json",
}).done(item_insert_new);
return false; return false;
}); });
}
// add existing items
$.get(
SCO_URL + "/itemsuivi_list_etud",
{ etudid: etudid, fmt: "json" },
function (L) {
for (var i in L) {
item_insert(
L[i]["itemsuivi_id"],
L[i]["item_date"],
L[i]["situation"],
L[i]["tags"],
readonly
);
}
} }
// add existing items );
$.get(SCO_URL + "/itemsuivi_list_etud", { etudid: etudid, format: 'json' }, function (L) {
for (var i in L) {
item_insert(L[i]['itemsuivi_id'], L[i]['item_date'], L[i]['situation'], L[i]['tags'], readonly);
}
});
$("div#fichedebouche").accordion({ $("div#fichedebouche").accordion({
heightStyle: "content", heightStyle: "content",
collapsible: true, collapsible: true,
active: active, active: active,
}); });
} }
function item_insert_new(it) { function item_insert_new(it) {
item_insert(it.itemsuivi_id, it.item_date, it.situation, '', false); item_insert(it.itemsuivi_id, it.item_date, it.situation, "", false);
} }
function item_insert(itemsuivi_id, item_date, situation, tags, readonly) { function item_insert(itemsuivi_id, item_date, situation, tags, readonly) {
if (item_date === undefined) if (item_date === undefined) item_date = Date2DMY(new Date());
item_date = Date2DMY(new Date()); if (situation === undefined) situation = "";
if (situation === undefined) if (tags === undefined) tags = "";
situation = '';
if (tags === undefined)
tags = '';
var nodes = item_nodes(itemsuivi_id, item_date, situation, tags, readonly); var nodes = item_nodes(itemsuivi_id, item_date, situation, tags, readonly);
// insert just before last li: // insert just before last li:
if ($('ul.listdebouches li.adddebouche').length > 0) { if ($("ul.listdebouches li.adddebouche").length > 0) {
$('ul.listdebouches').children(':last').before(nodes); $("ul.listdebouches").children(":last").before(nodes);
} else { } else {
// mode readonly, pas de li "ajouter" // mode readonly, pas de li "ajouter"
$('ul.listdebouches').append(nodes); $("ul.listdebouches").append(nodes);
} }
}; }
function item_nodes(itemsuivi_id, item_date, situation, tags, readonly) { function item_nodes(itemsuivi_id, item_date, situation, tags, readonly) {
// console.log('item_nodes: itemsuivi_id=' + itemsuivi_id); // console.log('item_nodes: itemsuivi_id=' + itemsuivi_id);
var sel_mois = 'Situation à la date du <input type="text" class="itemsuividatepicker" size="10" value="' + item_date + '"/><span class="itemsuivi_suppress" onclick="itemsuivi_suppress(\'' + itemsuivi_id + '\')"><img width="10" height="9" border="0" title="" alt="supprimer cet item" src="/ScoDoc/static/icons/delete_small_img.png"/></span>'; var sel_mois =
'Situation à la date du <input type="text" class="itemsuividatepicker" size="10" value="' +
item_date +
'"/><span class="itemsuivi_suppress" onclick="itemsuivi_suppress(\'' +
itemsuivi_id +
'\')"><img width="10" height="9" border="0" title="" alt="supprimer cet item" src="/ScoDoc/static/icons/delete_small_img.png"/></span>';
var h = sel_mois; var h = sel_mois;
// situation // situation
h += '<div class="itemsituation editable" data-type="textarea" data-url="itemsuivi_set_situation" data-placeholder="<em>décrire situation...</em>" data-object="' + itemsuivi_id + '">' + situation + '</div>'; h +=
// tags: '<div class="itemsituation editable" data-type="textarea" data-url="itemsuivi_set_situation" data-placeholder="<em>décrire situation...</em>" data-object="' +
h += '<div class="itemsuivi_tag_edit"><textarea class="itemsuivi_tag_editor">' + tags + '</textarea></div>'; itemsuivi_id +
'">' +
situation +
"</div>";
// tags:
h +=
'<div class="itemsuivi_tag_edit"><textarea class="itemsuivi_tag_editor">' +
tags +
"</textarea></div>";
var nodes = $($.parseHTML('<li class="itemsuivi">' + h + '</li>')); var nodes = $($.parseHTML('<li class="itemsuivi">' + h + "</li>"));
var dp = nodes.find('.itemsuividatepicker'); var dp = nodes.find(".itemsuividatepicker");
dp.blur(function (e) { dp.blur(function (e) {
var date = this.value; var date = this.value;
// console.log('selected text: ' + date); // console.log('selected text: ' + date);
$.post(SCO_URL + "/itemsuivi_set_date", { item_date: date, itemsuivi_id: itemsuivi_id }); $.post(SCO_URL + "/itemsuivi_set_date", {
item_date: date,
itemsuivi_id: itemsuivi_id,
}); });
dp.datepicker({ });
onSelect: function (date, instance) { dp.datepicker({
// console.log('selected: ' + date + 'for itemsuivi_id ' + itemsuivi_id); onSelect: function (date, instance) {
$.post(SCO_URL + "/itemsuivi_set_date", { item_date: date, itemsuivi_id: itemsuivi_id }); // console.log('selected: ' + date + 'for itemsuivi_id ' + itemsuivi_id);
}, $.post(SCO_URL + "/itemsuivi_set_date", {
showOn: 'button', item_date: date,
buttonImage: '/ScoDoc/static/icons/calendar_img.png', itemsuivi_id: itemsuivi_id,
buttonImageOnly: true, });
dateFormat: 'dd/mm/yy', },
duration: 'fast', showOn: "button",
disabled: readonly buttonImage: "/ScoDoc/static/icons/calendar_img.png",
}); buttonImageOnly: true,
dp.datepicker('option', $.extend({ showMonthAfterYear: false }, dateFormat: "dd/mm/yy",
$.datepicker.regional['fr'])); duration: "fast",
disabled: readonly,
});
dp.datepicker(
"option",
$.extend({ showMonthAfterYear: false }, $.datepicker.regional["fr"])
);
if (readonly) { if (readonly) {
// show tags read-only // show tags read-only
readOnlyTags(nodes.find('.itemsuivi_tag_editor')); readOnlyTags(nodes.find(".itemsuivi_tag_editor"));
} } else {
else { // bind tag editor
// bind tag editor nodes.find(".itemsuivi_tag_editor").tagEditor({
nodes.find('.itemsuivi_tag_editor').tagEditor({ initialTags: "",
initialTags: '', placeholder: "Tags...",
placeholder: 'Tags...', onChange: function (field, editor, tags) {
onChange: function (field, editor, tags) { $.post("itemsuivi_tag_set", {
$.post('itemsuivi_tag_set', itemsuivi_id: itemsuivi_id,
{ taglist: tags.join(),
itemsuivi_id: itemsuivi_id,
taglist: tags.join()
});
},
autocomplete: {
delay: 200, // ms before suggest
position: { collision: 'flip' }, // automatic menu position up/down
source: "itemsuivi_tag_search"
},
}); });
},
autocomplete: {
delay: 200, // ms before suggest
position: { collision: "flip" }, // automatic menu position up/down
source: "itemsuivi_tag_search",
},
});
// bind inplace editor // bind inplace editor
nodes.find('div.itemsituation').jinplace(); nodes.find("div.itemsituation").jinplace();
} }
return nodes; return nodes;
}; }
function Date2DMY(date) { function Date2DMY(date) {
var year = date.getFullYear(); var year = date.getFullYear();
var month = (1 + date.getMonth()).toString(); var month = (1 + date.getMonth()).toString();
month = month.length > 1 ? month : '0' + month; month = month.length > 1 ? month : "0" + month;
var day = date.getDate().toString(); var day = date.getDate().toString();
day = day.length > 1 ? day : '0' + day; day = day.length > 1 ? day : "0" + day;
return day + '/' + month + '/' + year; return day + "/" + month + "/" + year;
} }
function itemsuivi_suppress(itemsuivi_id) { function itemsuivi_suppress(itemsuivi_id) {
$.post(SCO_URL + "/itemsuivi_suppress", { itemsuivi_id: itemsuivi_id }); $.post(SCO_URL + "/itemsuivi_suppress", { itemsuivi_id: itemsuivi_id });
// Clear items and rebuild: // Clear items and rebuild:
$("ul.listdebouches li.itemsuivi").remove(); $("ul.listdebouches li.itemsuivi").remove();
display_itemsuivis(0); display_itemsuivis(0);
} }

View File

@ -6,12 +6,11 @@
// Ce code utilise d3.js // Ce code utilise d3.js
$().ready(function () { $().ready(function () {
var etudid = $("#etudid")[0].value; var etudid = $("#etudid")[0].value;
var formsemestre_id = $("#formsemestre_id")[0].value; var formsemestre_id = $("#formsemestre_id")[0].value;
get_notes_and_draw(formsemestre_id, etudid); get_notes_and_draw(formsemestre_id, etudid);
}); });
var WIDTH = 460; // taille du canvas SVG var WIDTH = 460; // taille du canvas SVG
var HEIGHT = WIDTH; var HEIGHT = WIDTH;
var CX = WIDTH / 2; // coordonnees centre du cercle var CX = WIDTH / 2; // coordonnees centre du cercle
@ -24,258 +23,314 @@ var R_AXIS_TICS = [4, 6, 8, 10, 12, 14, 16, 18, 20];
var NB_TICS = R_TICS.length; var NB_TICS = R_TICS.length;
function get_notes_and_draw(formsemestre_id, etudid) { function get_notes_and_draw(formsemestre_id, etudid) {
console.log("get_notes(" + formsemestre_id + ", " + etudid + " )"); console.log("get_notes(" + formsemestre_id + ", " + etudid + " )");
/* Recupère le bulletin de note et extrait tableau de notes */ /* Recupère le bulletin de note et extrait tableau de notes */
/* /*
var notes = [ var notes = [
{ 'module' : 'E1', { 'module' : 'E1',
'note' : 13, 'note' : 13,
'moy' : 16 }, 'moy' : 16 },
]; ];
*/ */
var query = SCO_URL + "/Notes/formsemestre_bulletinetud?formsemestre_id=" + formsemestre_id + "&etudid=" + etudid + "&format=json&version=selectedevals&force_publishing=1" var query =
SCO_URL +
"/Notes/formsemestre_bulletinetud?formsemestre_id=" +
formsemestre_id +
"&etudid=" +
etudid +
"&fmt=json&version=selectedevals&force_publishing=1";
$.get(query, '', function (bul) { $.get(query, "", function (bul) {
var notes = []; var notes = [];
bul.ue.forEach( bul.ue.forEach(function (ue, i, ues) {
function (ue, i, ues) { ue["module"].forEach(function (m, i) {
ue['module'].forEach(function (m, i) { notes.push({
notes.push({ code: m["code"],
'code': m['code'], titre: m["titre"],
'titre': m['titre'], note: m["note"]["value"],
'note': m['note']['value'], moy: m["note"]["moy"],
'moy': m['note']['moy'] });
}); });
});
});
draw_radar(notes);
}); });
draw_radar(notes);
});
} }
function draw_radar(notes) { function draw_radar(notes) {
/* Calcul coordonnées des éléments */ /* Calcul coordonnées des éléments */
var nmod = notes.length; var nmod = notes.length;
var angle = 2 * Math.PI / nmod; var angle = (2 * Math.PI) / nmod;
for (var i = 0; i < notes.length; i++) { for (var i = 0; i < notes.length; i++) {
var d = notes[i]; var d = notes[i];
var cx = Math.sin(i * angle); var cx = Math.sin(i * angle);
var cy = - Math.cos(i * angle); var cy = -Math.cos(i * angle);
d["x_v"] = CX + RR * d.note / 20 * cx; d["x_v"] = CX + ((RR * d.note) / 20) * cx;
d["y_v"] = CY + RR * d.note / 20 * cy; d["y_v"] = CY + ((RR * d.note) / 20) * cy;
d["x_moy"] = CX + RR * d.moy / 20 * cx; d["x_moy"] = CX + ((RR * d.moy) / 20) * cx;
d["y_moy"] = CY + RR * d.moy / 20 * cy; d["y_moy"] = CY + ((RR * d.moy) / 20) * cy;
d["x_20"] = CX + RR * cx; d["x_20"] = CX + RR * cx;
d["y_20"] = CY + RR * cy; d["y_20"] = CY + RR * cy;
d["x_label"] = CX + (RR + 25) * cx - 10 d["x_label"] = CX + (RR + 25) * cx - 10;
d["y_label"] = CY + (RR + 25) * cy + 10; d["y_label"] = CY + (RR + 25) * cy + 10;
d["tics"] = []; d["tics"] = [];
// Coords des tics sur chaque axe // Coords des tics sur chaque axe
for (var j = 0; j < NB_TICS; j++) {
var r = R_TICS[j] / 20 * RR;
d["tics"][j] = { "x": CX + r * cx, "y": CY + r * cy };
}
}
var notes_circ = notes.slice(0);
notes_circ.push(notes[0])
var notes_circ_valid = notes_circ.filter(function (e, i, a) { return e.note != 'NA' && e.note != '-'; });
var notes_valid = notes.filter(function (e, i, a) { return e.note != 'NA' && e.note != '-'; })
/* Crée l'élément SVG */
g = d3.select("#radar_bulletin").append("svg")
.attr("class", "radar")
.attr("width", WIDTH + 100)
.attr("height", HEIGHT);
/* Centre */
g.append("circle").attr("cy", CY)
.attr("cx", CX)
.attr("r", 2)
.attr("class", "radar_center_mark");
/* Lignes "tics" */
for (var j = 0; j < NB_TICS; j++) { for (var j = 0; j < NB_TICS; j++) {
var ligne_tics = d3.svg.line() var r = (R_TICS[j] / 20) * RR;
.x(function (d) { return d["tics"][j]["x"]; }) d["tics"][j] = { x: CX + r * cx, y: CY + r * cy };
.y(function (d) { return d["tics"][j]["y"]; });
g.append("svg:path")
.attr("class", "radar_disk_tic")
.attr("id", "radar_disk_tic_" + R_TICS[j])
.attr("d", ligne_tics(notes_circ));
} }
}
/* Lignes radiales pour chaque module */ var notes_circ = notes.slice(0);
g.selectAll("radar_rad") notes_circ.push(notes[0]);
.data(notes) var notes_circ_valid = notes_circ.filter(function (e, i, a) {
.enter().append("line") return e.note != "NA" && e.note != "-";
.attr("x1", CX) });
.attr("y1", CY) var notes_valid = notes.filter(function (e, i, a) {
.attr("x2", function (d) { return d["x_20"]; }) return e.note != "NA" && e.note != "-";
.attr("y2", function (d) { return d["y_20"]; }) });
.attr("class", "radarrad");
/* Crée l'élément SVG */
g = d3
.select("#radar_bulletin")
.append("svg")
.attr("class", "radar")
.attr("width", WIDTH + 100)
.attr("height", HEIGHT);
/* Lignes entre notes */ /* Centre */
var ligne = d3.svg.line() g.append("circle")
.x(function (d) { return d["x_v"]; }) .attr("cy", CY)
.y(function (d) { return d["y_v"]; }); .attr("cx", CX)
.attr("r", 2)
.attr("class", "radar_center_mark");
/* Lignes "tics" */
for (var j = 0; j < NB_TICS; j++) {
var ligne_tics = d3.svg
.line()
.x(function (d) {
return d["tics"][j]["x"];
})
.y(function (d) {
return d["tics"][j]["y"];
});
g.append("svg:path") g.append("svg:path")
.attr("class", "radarnoteslines") .attr("class", "radar_disk_tic")
.attr("d", ligne(notes_circ_valid)); .attr("id", "radar_disk_tic_" + R_TICS[j])
.attr("d", ligne_tics(notes_circ));
}
var ligne_moy = d3.svg.line() /* Lignes radiales pour chaque module */
.x(function (d) { return d["x_moy"]; }) g.selectAll("radar_rad")
.y(function (d) { return d["y_moy"]; }) .data(notes)
.enter()
.append("line")
.attr("x1", CX)
.attr("y1", CY)
.attr("x2", function (d) {
return d["x_20"];
})
.attr("y2", function (d) {
return d["y_20"];
})
.attr("class", "radarrad");
g.append("svg:path") /* Lignes entre notes */
.attr("class", "radarmoylines") var ligne = d3.svg
.attr("d", ligne_moy(notes_circ_valid)); .line()
.x(function (d) {
return d["x_v"];
})
.y(function (d) {
return d["y_v"];
});
/* Points (notes) */ g.append("svg:path")
g.selectAll("circle1") .attr("class", "radarnoteslines")
.data(notes_valid) .attr("d", ligne(notes_circ_valid));
.enter().append("circle")
.attr("cx", function (d) { return d["x_v"]; })
.attr("cy", function (d) { return d["y_v"]; })
.attr("r", function (x, i) { return 3; })
.style("stroke-width", 1)
.style("stroke", "black")
.style("fill", "blue")
.on("mouseover", function (d) {
var rwidth = 310;
var x = d["x_v"];
if ((x - CX) < 0) {
x = x + 5;
if (x + rwidth + 12 > WIDTH) {
x = WIDTH - rwidth - 12;
}
}
else {
if ((x - CX) > 0) {
x = x - rwidth - 5;
if (x < 12) {
x = 12;
}
}
else {
x = CX - rwidth / 2;
}
}
var yrect = d["y_v"];
var ytext = d["y_v"];
if ((yrect - CY) > 0) {
yrect = yrect - 5 - 20;
ytext = ytext - 5 - 20 + 16;
}
else {
yrect = yrect + 5;
ytext = ytext + 5 + 16;
}
var r = g.append("rect")
.attr('class', 'radartip')
.attr("x", x)
.attr("y", yrect);
var txt = g.append("text").text("Note: " + d.note + "/20, moyenne promo: " + d.moy + "/20") var ligne_moy = d3.svg
.attr('class', 'radartip') .line()
.attr("x", x + 5) .x(function (d) {
.attr("y", ytext); return d["x_moy"];
r.attr("width", rwidth).attr("height", 20); })
}) .y(function (d) {
.on("mouseout", function (d) { return d["y_moy"];
d3.selectAll(".radartip").remove() });
});
/* Valeurs des notes */ g.append("svg:path")
g.selectAll("notes_labels") .attr("class", "radarmoylines")
.data(notes_valid) .attr("d", ligne_moy(notes_circ_valid));
.enter().append("text")
.text(function (d) { return d["note"]; })
.attr("x", function (d) {
return d["x_v"];
})
.attr("y", function (d) {
if (d["y_v"] > CY)
return d["y_v"] + 16;
else
return d["y_v"] - 8;
})
.attr("class", "note_label");
/* Petits points sur les moyennes */ /* Points (notes) */
g.selectAll("circle2") g.selectAll("circle1")
.data(notes_valid) .data(notes_valid)
.enter().append("circle") .enter()
.attr("cx", function (d) { return d["x_moy"]; }) .append("circle")
.attr("cy", function (d) { return d["y_moy"]; }) .attr("cx", function (d) {
.attr("r", function (x, i) { return 2; }) return d["x_v"];
.style("stroke-width", 0) })
.style("stroke", "black") .attr("cy", function (d) {
.style("fill", "rgb(20,90,50)"); return d["y_v"];
})
.attr("r", function (x, i) {
return 3;
})
.style("stroke-width", 1)
.style("stroke", "black")
.style("fill", "blue")
.on("mouseover", function (d) {
var rwidth = 310;
var x = d["x_v"];
if (x - CX < 0) {
x = x + 5;
if (x + rwidth + 12 > WIDTH) {
x = WIDTH - rwidth - 12;
}
} else {
if (x - CX > 0) {
x = x - rwidth - 5;
if (x < 12) {
x = 12;
}
} else {
x = CX - rwidth / 2;
}
}
var yrect = d["y_v"];
var ytext = d["y_v"];
if (yrect - CY > 0) {
yrect = yrect - 5 - 20;
ytext = ytext - 5 - 20 + 16;
} else {
yrect = yrect + 5;
ytext = ytext + 5 + 16;
}
var r = g
.append("rect")
.attr("class", "radartip")
.attr("x", x)
.attr("y", yrect);
/* Valeurs sur axe */ var txt = g
g.selectAll("textaxis") .append("text")
.data(R_AXIS_TICS) .text("Note: " + d.note + "/20, moyenne promo: " + d.moy + "/20")
.enter().append("text") .attr("class", "radartip")
.text(String) .attr("x", x + 5)
.attr("x", CX - 10) .attr("y", ytext);
.attr("y", function (x, i) { return CY - x * RR / 20 + 6; }) r.attr("width", rwidth).attr("height", 20);
.attr("class", "textaxis"); })
.on("mouseout", function (d) {
d3.selectAll(".radartip").remove();
});
/* Noms des modules */ /* Valeurs des notes */
g.selectAll("text_modules") g.selectAll("notes_labels")
.data(notes) .data(notes_valid)
.enter().append("text") .enter()
.text(function (d) { return d['code']; }) .append("text")
.attr("x", function (d) { return d['x_label']; }) .text(function (d) {
.attr("y", function (d) { return d['y_label']; }) return d["note"];
.attr("dx", 0) })
.attr("dy", 0) .attr("x", function (d) {
.on("mouseover", function (d) { return d["x_v"];
var x = d["x_label"]; })
var yrect = d["y_label"]; .attr("y", function (d) {
var ytext = d["y_label"]; if (d["y_v"] > CY) return d["y_v"] + 16;
var titre = d['titre'].replace("&apos;", "'").substring(0, 64); else return d["y_v"] - 8;
var rwidth = titre.length * 9; // rough estimate of string width in pixels })
if ((x - CX) < 0) { .attr("class", "note_label");
x = x + 5;
if (x + rwidth + 12 > WIDTH) { /* Petits points sur les moyennes */
x = WIDTH - rwidth - 12; g.selectAll("circle2")
} .data(notes_valid)
} .enter()
else { .append("circle")
if ((x - CX) > 0) { .attr("cx", function (d) {
x = x - rwidth - 5; return d["x_moy"];
if (x < 12) { })
x = 12; .attr("cy", function (d) {
} return d["y_moy"];
} })
else { .attr("r", function (x, i) {
x = CX - rwidth / 2; return 2;
} })
} .style("stroke-width", 0)
if ((yrect - CY) > 0) { .style("stroke", "black")
yrect = yrect - 5 - 20; .style("fill", "rgb(20,90,50)");
ytext = ytext - 5 - 20 + 16;
} /* Valeurs sur axe */
else { g.selectAll("textaxis")
yrect = yrect + 5; .data(R_AXIS_TICS)
ytext = ytext + 5 + 16; .enter()
} .append("text")
var r = g.append("rect") .text(String)
.attr('class', 'radartip') .attr("x", CX - 10)
.attr("x", x) .attr("y", function (x, i) {
.attr("y", yrect) return CY - (x * RR) / 20 + 6;
.attr("height", 20) })
.attr("width", rwidth); .attr("class", "textaxis");
var txt = g.append("text").text(titre)
.attr('class', 'radartip') /* Noms des modules */
.attr("x", x + 5) g.selectAll("text_modules")
.attr("y", ytext); .data(notes)
}) .enter()
.on("mouseout", function (d) { .append("text")
d3.selectAll(".radartip").remove() .text(function (d) {
}); return d["code"];
})
.attr("x", function (d) {
return d["x_label"];
})
.attr("y", function (d) {
return d["y_label"];
})
.attr("dx", 0)
.attr("dy", 0)
.on("mouseover", function (d) {
var x = d["x_label"];
var yrect = d["y_label"];
var ytext = d["y_label"];
var titre = d["titre"].replace("&apos;", "'").substring(0, 64);
var rwidth = titre.length * 9; // rough estimate of string width in pixels
if (x - CX < 0) {
x = x + 5;
if (x + rwidth + 12 > WIDTH) {
x = WIDTH - rwidth - 12;
}
} else {
if (x - CX > 0) {
x = x - rwidth - 5;
if (x < 12) {
x = 12;
}
} else {
x = CX - rwidth / 2;
}
}
if (yrect - CY > 0) {
yrect = yrect - 5 - 20;
ytext = ytext - 5 - 20 + 16;
} else {
yrect = yrect + 5;
ytext = ytext + 5 + 16;
}
var r = g
.append("rect")
.attr("class", "radartip")
.attr("x", x)
.attr("y", yrect)
.attr("height", 20)
.attr("width", rwidth);
var txt = g
.append("text")
.text(titre)
.attr("class", "radartip")
.attr("x", x + 5)
.attr("y", ytext);
})
.on("mouseout", function (d) {
d3.selectAll(".radartip").remove();
});
} }