Commit 375c06aa authored by David Schnur's avatar David Schnur

Added an option to control legend sort order.

Added a legend 'sorted' option that allows sorting of legend entries
independent of series order.  It accepts either null/false, true,
'ascending', 'descending' or a comparator function.
parent b57542f1
...@@ -51,7 +51,8 @@ ...@@ -51,7 +51,8 @@
position: "ne", // position of default legend container within plot position: "ne", // position of default legend container within plot
margin: 5, // distance from grid edge to default legend container within plot margin: 5, // distance from grid edge to default legend container within plot
backgroundColor: null, // null means auto-detect 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: { xaxis: {
show: null, // null = auto-detect, true = always, false = never show: null, // null = auto-detect, true = always, false = never
...@@ -2107,18 +2108,47 @@ ...@@ -2107,18 +2108,47 @@
} }
function insertLegend() { function insertLegend() {
placeholder.find(".legend").remove(); placeholder.find(".legend").remove();
if (!options.legend.show) if (!options.legend.show)
return; return;
var fragments = [], rowStarted = false, var fragments = [], entries = [], rowStarted = false,
lf = options.legend.labelFormatter, s, label; 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) { for (var i = 0; i < series.length; ++i) {
s = series[i]; s = series[i];
label = s.label; if (s.label) {
if (!label) entries.push({
continue; 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 (i % options.legend.noColumns == 0) {
if (rowStarted) if (rowStarted)
...@@ -2127,13 +2157,12 @@ ...@@ -2127,13 +2157,12 @@
rowStarted = true; rowStarted = true;
} }
if (lf)
label = lf(label, s);
fragments.push( 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="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">' + label + '</td>'); '<td class="legendLabel">' + entry.label + '</td>'
);
} }
if (rowStarted) if (rowStarted)
fragments.push('</tr>'); fragments.push('</tr>');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment