From c8c67de8b7e0c27923975ce943231121e1ffb5f0 Mon Sep 17 00:00:00 2001 From: execjosh Date: Sat, 16 Jun 2012 02:44:00 +0900 Subject: [PATCH] Also stop at root when extracting CSS color This change adds an additional check for whether the parent element is `null` or `undefined` in `$.color.extract`. This can happen when working with elements that have not yet been added to the DOM under ``. Consider the following example pie chart. var elm = $("
") .css({ width: "240px" , height: "320px" }) var data = [ {label: "One", data: "33"} , {label: "Two", data: "33"} , {label: "Three", data: "33"} ] var opts = { legend: { show: true } , series: { pie: { show: true } } } $.plot(elm, data, opts) elm.appendTo($("body")) When flot inserts each legend row, it tries to use the same color as the corresponding graph part, unless it was explicitly specified in the options. However, in this example, `$.color.extract` runs into an unexpected `null` reference because `` is not an ancestor of `elm`. Specifically, a `TypeError: Cannot read property 'nodeName' of undefined` would be thrown. --- jquery.colorhelpers.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/jquery.colorhelpers.js b/jquery.colorhelpers.js index d3524d7..61c6806 100644 --- a/jquery.colorhelpers.js +++ b/jquery.colorhelpers.js @@ -74,13 +74,18 @@ // if it's "transparent" $.color.extract = function (elem, css) { var c; + var parentElm; do { c = elem.css(css).toLowerCase(); // keep going until we find an element that has color, or - // we hit the body + // we hit the body or root (have no parent) if (c != '' && c != 'transparent') break; - elem = elem.parent(); + parentElm = elem.parent(); + if (null == parentElm.get(0)) { + break; + } + elem = parentElm; } while (!$.nodeName(elem.get(0), "body")); // catch Safari's way of signalling transparent