Fix the color recognition for fill
parent
be91a1b24f
commit
9ff432a12f
File diff suppressed because one or more lines are too long
|
@ -1682,6 +1682,9 @@ Savage.getRGB = cacher(function (colour) {
|
||||||
return {r: -1, g: -1, b: -1, hex: "none", toString: rgbtoString};
|
return {r: -1, g: -1, b: -1, hex: "none", toString: rgbtoString};
|
||||||
}
|
}
|
||||||
!(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
|
!(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
|
||||||
|
if (!colour) {
|
||||||
|
return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: rgbtoString};
|
||||||
|
}
|
||||||
var res,
|
var res,
|
||||||
red,
|
red,
|
||||||
green,
|
green,
|
||||||
|
@ -1789,12 +1792,16 @@ Savage.rgb = cacher(function (r, g, b, o) {
|
||||||
return "#" + (16777216 | b | (g << 8) | (r << 16)).toString(16).slice(1);
|
return "#" + (16777216 | b | (g << 8) | (r << 16)).toString(16).slice(1);
|
||||||
});
|
});
|
||||||
var toHex = function (color) {
|
var toHex = function (color) {
|
||||||
var i = glob.doc.getElementsByTagName("head")[0];
|
var i = glob.doc.getElementsByTagName("head")[0],
|
||||||
|
red = "rgb(255, 0, 0)";
|
||||||
toHex = cacher(function (color) {
|
toHex = cacher(function (color) {
|
||||||
i.style.color = "inherit";
|
if (color.toLowerCase() == "red") {
|
||||||
|
return red;
|
||||||
|
}
|
||||||
|
i.style.color = red;
|
||||||
i.style.color = color;
|
i.style.color = color;
|
||||||
var out = glob.doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
|
var out = glob.doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
|
||||||
return out == "inherit" ? null : out;
|
return out == red ? null : out;
|
||||||
});
|
});
|
||||||
return toHex(color);
|
return toHex(color);
|
||||||
},
|
},
|
||||||
|
@ -1884,7 +1891,7 @@ Savage.color = function (clr) {
|
||||||
if (is(clr, "string")) {
|
if (is(clr, "string")) {
|
||||||
clr = Savage.getRGB(clr);
|
clr = Savage.getRGB(clr);
|
||||||
}
|
}
|
||||||
if (is(clr, "object") && "r" in clr && "g" in clr && "b" in clr) {
|
if (is(clr, "object") && "r" in clr && "g" in clr && "b" in clr && !("error" in clr)) {
|
||||||
rgb = Savage.rgb2hsl(clr);
|
rgb = Savage.rgb2hsl(clr);
|
||||||
clr.h = rgb.h;
|
clr.h = rgb.h;
|
||||||
clr.s = rgb.s;
|
clr.s = rgb.s;
|
||||||
|
@ -1894,6 +1901,7 @@ Savage.color = function (clr) {
|
||||||
} else {
|
} else {
|
||||||
clr = {hex: "none"};
|
clr = {hex: "none"};
|
||||||
clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;
|
clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;
|
||||||
|
clr.error = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clr.toString = rgbtoString;
|
clr.toString = rgbtoString;
|
||||||
|
@ -3771,6 +3779,9 @@ function wrap(dom) {
|
||||||
proto.gradient = function (str) {
|
proto.gradient = function (str) {
|
||||||
var grad = arrayFirstValue(eve("savage.util.grad.parse", null, str)),
|
var grad = arrayFirstValue(eve("savage.util.grad.parse", null, str)),
|
||||||
el;
|
el;
|
||||||
|
if (!grad) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (grad.type.toLowerCase() == "l") {
|
if (grad.type.toLowerCase() == "l") {
|
||||||
el = this.gradientLinear.apply(this, grad.params);
|
el = this.gradientLinear.apply(this, grad.params);
|
||||||
} else {
|
} else {
|
||||||
|
@ -4012,25 +4023,32 @@ eve.on("savage.util.attr.fill", function (value) {
|
||||||
this.paper.defs.appendChild(value);
|
this.paper.defs.appendChild(value);
|
||||||
value = wrap(value);
|
value = wrap(value);
|
||||||
}
|
}
|
||||||
if (value instanceof Element &&
|
if (value instanceof Element) {
|
||||||
(value.type == "radialGradient" || value.type == "linearGradient" ||
|
if (value.type == "radialGradient" || value.type == "linearGradient" ||
|
||||||
value.type == "pattern")) {
|
value.type == "pattern") {
|
||||||
if (!value.node.id) {
|
if (!value.node.id) {
|
||||||
$(value.node, {
|
$(value.node, {
|
||||||
id: value.id
|
id: value.id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var fill = "url(#" + value.node.id + ")";
|
var fill = "url(#" + value.node.id + ")";
|
||||||
|
} else {
|
||||||
|
fill = value.attr("fill");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fill = Savage.color(value);
|
fill = Savage.color(value);
|
||||||
if (fill.error) {
|
if (fill.error) {
|
||||||
var grad = this.paper.gradient(value);
|
var grad = this.paper.gradient(value);
|
||||||
if (!grad.node.id) {
|
if (grad) {
|
||||||
$(grad.node, {
|
if (!grad.node.id) {
|
||||||
id: grad.id
|
$(grad.node, {
|
||||||
});
|
id: grad.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
fill = "url(#" + grad.node.id + ")";
|
||||||
|
} else {
|
||||||
|
fill = value;
|
||||||
}
|
}
|
||||||
fill = "url(#" + grad.node.id + ")";
|
|
||||||
} else {
|
} else {
|
||||||
fill = Str(fill);
|
fill = Str(fill);
|
||||||
}
|
}
|
||||||
|
@ -4041,8 +4059,11 @@ eve.on("savage.util.attr.fill", function (value) {
|
||||||
var gradrg = /^([lr])(?:\(([^)]*)\))?(.*)$/i;
|
var gradrg = /^([lr])(?:\(([^)]*)\))?(.*)$/i;
|
||||||
eve.on("savage.util.grad.parse", function parseGrad(string) {
|
eve.on("savage.util.grad.parse", function parseGrad(string) {
|
||||||
string = Str(string);
|
string = Str(string);
|
||||||
var tokens = string.match(gradrg),
|
var tokens = string.match(gradrg);
|
||||||
type = tokens[1],
|
if (!tokens) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var type = tokens[1],
|
||||||
params = tokens[2],
|
params = tokens[2],
|
||||||
stops = tokens[3];
|
stops = tokens[3];
|
||||||
params = params.split(/\s*,\s*/).map(function (el) {
|
params = params.split(/\s*,\s*/).map(function (el) {
|
||||||
|
|
49
src/svg.js
49
src/svg.js
|
@ -616,6 +616,9 @@ Savage.getRGB = cacher(function (colour) {
|
||||||
return {r: -1, g: -1, b: -1, hex: "none", toString: rgbtoString};
|
return {r: -1, g: -1, b: -1, hex: "none", toString: rgbtoString};
|
||||||
}
|
}
|
||||||
!(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
|
!(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
|
||||||
|
if (!colour) {
|
||||||
|
return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: rgbtoString};
|
||||||
|
}
|
||||||
var res,
|
var res,
|
||||||
red,
|
red,
|
||||||
green,
|
green,
|
||||||
|
@ -723,12 +726,16 @@ Savage.rgb = cacher(function (r, g, b, o) {
|
||||||
return "#" + (16777216 | b | (g << 8) | (r << 16)).toString(16).slice(1);
|
return "#" + (16777216 | b | (g << 8) | (r << 16)).toString(16).slice(1);
|
||||||
});
|
});
|
||||||
var toHex = function (color) {
|
var toHex = function (color) {
|
||||||
var i = glob.doc.getElementsByTagName("head")[0];
|
var i = glob.doc.getElementsByTagName("head")[0],
|
||||||
|
red = "rgb(255, 0, 0)";
|
||||||
toHex = cacher(function (color) {
|
toHex = cacher(function (color) {
|
||||||
i.style.color = "inherit";
|
if (color.toLowerCase() == "red") {
|
||||||
|
return red;
|
||||||
|
}
|
||||||
|
i.style.color = red;
|
||||||
i.style.color = color;
|
i.style.color = color;
|
||||||
var out = glob.doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
|
var out = glob.doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
|
||||||
return out == "inherit" ? null : out;
|
return out == red ? null : out;
|
||||||
});
|
});
|
||||||
return toHex(color);
|
return toHex(color);
|
||||||
},
|
},
|
||||||
|
@ -818,7 +825,7 @@ Savage.color = function (clr) {
|
||||||
if (is(clr, "string")) {
|
if (is(clr, "string")) {
|
||||||
clr = Savage.getRGB(clr);
|
clr = Savage.getRGB(clr);
|
||||||
}
|
}
|
||||||
if (is(clr, "object") && "r" in clr && "g" in clr && "b" in clr) {
|
if (is(clr, "object") && "r" in clr && "g" in clr && "b" in clr && !("error" in clr)) {
|
||||||
rgb = Savage.rgb2hsl(clr);
|
rgb = Savage.rgb2hsl(clr);
|
||||||
clr.h = rgb.h;
|
clr.h = rgb.h;
|
||||||
clr.s = rgb.s;
|
clr.s = rgb.s;
|
||||||
|
@ -828,6 +835,7 @@ Savage.color = function (clr) {
|
||||||
} else {
|
} else {
|
||||||
clr = {hex: "none"};
|
clr = {hex: "none"};
|
||||||
clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;
|
clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;
|
||||||
|
clr.error = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clr.toString = rgbtoString;
|
clr.toString = rgbtoString;
|
||||||
|
@ -2705,6 +2713,9 @@ function wrap(dom) {
|
||||||
proto.gradient = function (str) {
|
proto.gradient = function (str) {
|
||||||
var grad = arrayFirstValue(eve("savage.util.grad.parse", null, str)),
|
var grad = arrayFirstValue(eve("savage.util.grad.parse", null, str)),
|
||||||
el;
|
el;
|
||||||
|
if (!grad) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (grad.type.toLowerCase() == "l") {
|
if (grad.type.toLowerCase() == "l") {
|
||||||
el = this.gradientLinear.apply(this, grad.params);
|
el = this.gradientLinear.apply(this, grad.params);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2946,25 +2957,32 @@ eve.on("savage.util.attr.fill", function (value) {
|
||||||
this.paper.defs.appendChild(value);
|
this.paper.defs.appendChild(value);
|
||||||
value = wrap(value);
|
value = wrap(value);
|
||||||
}
|
}
|
||||||
if (value instanceof Element &&
|
if (value instanceof Element) {
|
||||||
(value.type == "radialGradient" || value.type == "linearGradient" ||
|
if (value.type == "radialGradient" || value.type == "linearGradient" ||
|
||||||
value.type == "pattern")) {
|
value.type == "pattern") {
|
||||||
if (!value.node.id) {
|
if (!value.node.id) {
|
||||||
$(value.node, {
|
$(value.node, {
|
||||||
id: value.id
|
id: value.id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var fill = "url(#" + value.node.id + ")";
|
var fill = "url(#" + value.node.id + ")";
|
||||||
|
} else {
|
||||||
|
fill = value.attr("fill");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fill = Savage.color(value);
|
fill = Savage.color(value);
|
||||||
if (fill.error) {
|
if (fill.error) {
|
||||||
var grad = this.paper.gradient(value);
|
var grad = this.paper.gradient(value);
|
||||||
if (!grad.node.id) {
|
if (grad) {
|
||||||
$(grad.node, {
|
if (!grad.node.id) {
|
||||||
id: grad.id
|
$(grad.node, {
|
||||||
});
|
id: grad.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
fill = "url(#" + grad.node.id + ")";
|
||||||
|
} else {
|
||||||
|
fill = value;
|
||||||
}
|
}
|
||||||
fill = "url(#" + grad.node.id + ")";
|
|
||||||
} else {
|
} else {
|
||||||
fill = Str(fill);
|
fill = Str(fill);
|
||||||
}
|
}
|
||||||
|
@ -2975,8 +2993,11 @@ eve.on("savage.util.attr.fill", function (value) {
|
||||||
var gradrg = /^([lr])(?:\(([^)]*)\))?(.*)$/i;
|
var gradrg = /^([lr])(?:\(([^)]*)\))?(.*)$/i;
|
||||||
eve.on("savage.util.grad.parse", function parseGrad(string) {
|
eve.on("savage.util.grad.parse", function parseGrad(string) {
|
||||||
string = Str(string);
|
string = Str(string);
|
||||||
var tokens = string.match(gradrg),
|
var tokens = string.match(gradrg);
|
||||||
type = tokens[1],
|
if (!tokens) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var type = tokens[1],
|
||||||
params = tokens[2],
|
params = tokens[2],
|
||||||
stops = tokens[3];
|
stops = tokens[3];
|
||||||
params = params.split(/\s*,\s*/).map(function (el) {
|
params = params.split(/\s*,\s*/).map(function (el) {
|
||||||
|
|
Loading…
Reference in New Issue