|
|
|
|
@ -51,7 +51,8 @@
|
|
|
|
|
position: "ne", // position of default legend container within plot
|
|
|
|
|
margin: 5, // distance from grid edge to default legend container within plot
|
|
|
|
|
backgroundColor: null, // null means auto-detect
|
|
|
|
|
backgroundOpacity: 0.85 // set to 0 to avoid background
|
|
|
|
|
backgroundOpacity: 0.85, // set to 0 to avoid background
|
|
|
|
|
sorted: null // default to no legend sorting
|
|
|
|
|
},
|
|
|
|
|
xaxis: {
|
|
|
|
|
show: null, // null = auto-detect, true = always, false = never
|
|
|
|
|
@ -2105,21 +2106,50 @@
|
|
|
|
|
c.normalize();
|
|
|
|
|
return c.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function insertLegend() {
|
|
|
|
|
|
|
|
|
|
placeholder.find(".legend").remove();
|
|
|
|
|
|
|
|
|
|
if (!options.legend.show)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
var fragments = [], rowStarted = false,
|
|
|
|
|
|
|
|
|
|
var fragments = [], entries = [], rowStarted = false,
|
|
|
|
|
lf = options.legend.labelFormatter, s, label;
|
|
|
|
|
|
|
|
|
|
// Build a list of legend entries, with each having a label and a color
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < series.length; ++i) {
|
|
|
|
|
s = series[i];
|
|
|
|
|
label = s.label;
|
|
|
|
|
if (!label)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
if (s.label) {
|
|
|
|
|
entries.push({
|
|
|
|
|
label: lf ? lf(s.label, s) : s.label,
|
|
|
|
|
color: s.color
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Sort the legend using either the default or a custom comparator
|
|
|
|
|
|
|
|
|
|
if (options.legend.sorted) {
|
|
|
|
|
if ($.isFunction(options.legend.sorted)) {
|
|
|
|
|
entries.sort(options.legend.sorted);
|
|
|
|
|
} else {
|
|
|
|
|
var ascending = options.legend.sorted != "descending";
|
|
|
|
|
entries.sort(function(a, b) {
|
|
|
|
|
return a.label == b.label ? 0 : (
|
|
|
|
|
(a.label < b.label) != ascending ? 1 : -1 // Logical XOR
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Generate markup for the list of entries, in their final order
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < entries.length; ++i) {
|
|
|
|
|
|
|
|
|
|
entry = entries[i];
|
|
|
|
|
|
|
|
|
|
if (i % options.legend.noColumns == 0) {
|
|
|
|
|
if (rowStarted)
|
|
|
|
|
fragments.push('</tr>');
|
|
|
|
|
@ -2127,16 +2157,15 @@
|
|
|
|
|
rowStarted = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (lf)
|
|
|
|
|
label = lf(label, s);
|
|
|
|
|
|
|
|
|
|
fragments.push(
|
|
|
|
|
'<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden"></div></div></td>' +
|
|
|
|
|
'<td class="legendLabel">' + label + '</td>');
|
|
|
|
|
'<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' +
|
|
|
|
|
'<td class="legendLabel">' + entry.label + '</td>'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (rowStarted)
|
|
|
|
|
fragments.push('</tr>');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fragments.length == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|