diff --git a/src/parser.js b/src/parser.js index de6c1c64..b8a3adb9 100644 --- a/src/parser.js +++ b/src/parser.js @@ -643,21 +643,36 @@ getGradientDefs: function(doc) { var linearGradientEls = doc.getElementsByTagName('linearGradient'), radialGradientEls = doc.getElementsByTagName('radialGradient'), - el, i, - gradientDefs = { }; + el, i, j = 0, id, xlink, elList = [ ], + gradientDefs = { }, postProcess = { }; + elList.lenght = linearGradientEls.length + radialGradientEls.length; i = linearGradientEls.length; for (; i--; ) { - el = linearGradientEls[i]; - gradientDefs[el.getAttribute('id')] = el; + elList[j++] = linearGradientEls[i]; } - i = radialGradientEls.length; for (; i--; ) { - el = radialGradientEls[i]; - gradientDefs[el.getAttribute('id')] = el; + elList[j++] = radialGradientEls[i]; } + for (; j--; ) { + el = elList[j]; + xlink = el.getAttribute('xlink:href'); + id = el.getAttribute('id'); + if (xlink) { + postProcess[id] = xlink.substr(1); + } + gradientDefs[id] = el; + } + + for (id in postProcess) { + var el2 = gradientDefs[postProcess[id]].cloneNode(true); + el = gradientDefs[id]; + while (el2.firstChild != null) { + el.appendChild(el2.firstChild); + } + } return gradientDefs; },