From c62cb30720faacb6ca0315505aae3e156de27a4b Mon Sep 17 00:00:00 2001 From: David Schnur Date: Tue, 17 Jul 2012 19:24:40 -0400 Subject: [PATCH] Optimize and tidy up calculation of neededColors. --- jquery.flot.js | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/jquery.flot.js b/jquery.flot.js index 8908bf7..847e1e3 100644 --- a/jquery.flot.js +++ b/jquery.flot.js @@ -416,31 +416,36 @@ } function fillInSeriesOptions() { - var i; - - // collect what we already got of colors - var neededColors = series.length, - usedColors = [], - assignedColors = []; + + var neededColors = series.length, maxIndex = 0, i; + + // Subtract the number of series that already have fixed + // colors from the number we need to generate. + for (i = 0; i < series.length; ++i) { var sc = series[i].color; if (sc != null) { - --neededColors; - if (typeof sc == "number") - assignedColors.push(sc); - else - usedColors.push($.color.parse(series[i].color)); + neededColors--; + if (typeof sc == "number" && sc > maxIndex) { + maxIndex = sc; + } } } - - // we might need to generate more colors if higher indices - // are assigned - for (i = 0; i < assignedColors.length; ++i) { - neededColors = Math.max(neededColors, assignedColors[i] + 1); + + // If any of the user colors are numeric indexes, then we + // need to generate at least as many as the highest index. + + if (maxIndex > neededColors) { + neededColors = maxIndex + 1; } - // produce colors as needed + // Generate as many colors as necessary, using the provided + // colors as a base and alternatingly increasing/decreasing + // their luminosity in steps that grow smaller each time we + // hit the edge of the color space. + var colors = [], variation = 0; + i = 0; while (colors.length < neededColors) { var c; @@ -464,7 +469,8 @@ } } - // fill in the options + // Finalize the series options, filling in their colors + var colori = 0, s; for (i = 0; i < series.length; ++i) { s = series[i];