Hopefully finally fixed gradient serialization issues in Opera/Win/Non-en
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@945 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
d4fcca35ae
commit
0278caccd8
|
@ -49,6 +49,22 @@ if(!window.console) {
|
|||
this.dir = function(str) {};
|
||||
};
|
||||
}
|
||||
$.cloneNode = function(el) {
|
||||
if(!window.opera) return el.cloneNode(true);
|
||||
// manually create a copy of the element
|
||||
opera.postError(ns.svg, el.nodeName);
|
||||
var new_el = document.createElementNS(ns.svg, el.nodeName);
|
||||
$.each(el.attributes, function(i, attr) {
|
||||
new_el.setAttributeNS(ns.svg, attr.nodeName, attr.nodeValue);
|
||||
});
|
||||
$.each(el.childNodes, function(i, child) {
|
||||
if(child.nodeType == 1) {
|
||||
new_el.appendChild($.cloneNode(child));
|
||||
}
|
||||
});
|
||||
return new_el;
|
||||
}
|
||||
|
||||
$.jGraduate = {
|
||||
Paint:
|
||||
function(opt) {
|
||||
|
@ -69,7 +85,7 @@ $.jGraduate = {
|
|||
break;
|
||||
case "linearGradient":
|
||||
this.solidColor = null;
|
||||
this.linearGradient = options.copy.linearGradient.cloneNode(true);
|
||||
this.linearGradient = $.cloneNode(options.copy.linearGradient);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -77,7 +93,7 @@ $.jGraduate = {
|
|||
else if (options.linearGradient) {
|
||||
this.type = "linearGradient";
|
||||
this.solidColor = null;
|
||||
this.linearGradient = options.linearGradient.cloneNode(true);
|
||||
this.linearGradient = $.cloneNode(options.linearGradient);
|
||||
}
|
||||
// create solid color paint
|
||||
else if (options.solidColor) {
|
||||
|
@ -209,7 +225,8 @@ jQuery.fn.jGraduate =
|
|||
// if we are sent a gradient, import it
|
||||
if ($this.paint.type == "linearGradient") {
|
||||
$this.paint.linearGradient.id = id+'_jgraduate_grad';
|
||||
$this.paint.linearGradient = svg.appendChild(document.importNode($this.paint.linearGradient, true));
|
||||
// $this.paint.linearGradient = svg.appendChild(document.importNode($this.paint.linearGradient, true));
|
||||
$this.paint.linearGradient = svg.appendChild($.cloneNode($this.paint.linearGradient));
|
||||
}
|
||||
else { // we create a gradient
|
||||
var grad = svg.appendChild(document.createElementNS(ns.svg, 'linearGradient'));
|
||||
|
|
|
@ -229,7 +229,6 @@ function svg_edit_setup() {
|
|||
var getPaint = function(color, opac) {
|
||||
// update the editor's fill paint
|
||||
var opts = null;
|
||||
|
||||
if (color.substr(0,5) == "url(#") {
|
||||
opts = {
|
||||
alpha: opac,
|
||||
|
@ -825,6 +824,7 @@ function svg_edit_setup() {
|
|||
var clickClear = function(){
|
||||
if( confirm(uiStrings.QwantToClear) ) {
|
||||
svgCanvas.clear();
|
||||
populateLayers();
|
||||
updateContextPanel();
|
||||
}
|
||||
};
|
||||
|
@ -1413,6 +1413,7 @@ function svg_edit_setup() {
|
|||
if (paint.type == "linearGradient") {
|
||||
svgbox.removeChild(oldgrad);
|
||||
var newgrad = svgbox.appendChild(document.importNode(paint.linearGradient, true));
|
||||
svgCanvas.fixOperaXML(newgrad, paint.linearGradient)
|
||||
newgrad.id = "gradbox_"+picker;
|
||||
rectbox.setAttribute("fill", "url(#gradbox_" + picker + ")");
|
||||
}
|
||||
|
|
|
@ -982,7 +982,6 @@ function BatchCommand(text) {
|
|||
node.nodeValue = node.nodeValue.replace(/^\s+|\s+$/g, "");
|
||||
}
|
||||
if (node.nodeType != 1) return;
|
||||
|
||||
var doc = node.ownerDocument;
|
||||
var parent = node.parentNode;
|
||||
// can parent ever be null here? I think the root node's parent is the document...
|
||||
|
@ -1054,7 +1053,7 @@ function BatchCommand(text) {
|
|||
var i = lgrads.length;
|
||||
while (i--) {
|
||||
var grad = lgrads[i];
|
||||
var id = grad.getAttribute('id');
|
||||
var id = grad.id;
|
||||
var url_id = 'url(#' + id + ')';
|
||||
if($.inArray(url_id, grad_uses) == -1) {
|
||||
// Not found, so remove
|
||||
|
@ -1166,7 +1165,7 @@ function BatchCommand(text) {
|
|||
// importNode, like cloneNode, causes the comma-to-period
|
||||
// issue in Opera/Win/non-en. Thankfully we can compare to the original XML
|
||||
// and simply use the original value when necessary
|
||||
var fixOperaXML = function(elem, orig_el) {
|
||||
this.fixOperaXML = function(elem, orig_el) {
|
||||
var x_attrs = elem.attributes;
|
||||
$.each(x_attrs, function(i, attr) {
|
||||
if(attr.nodeValue.indexOf(',') == -1) return;
|
||||
|
@ -1174,14 +1173,18 @@ function BatchCommand(text) {
|
|||
var ns = attr.nodeName == 'href' ? xlinkns :
|
||||
attr.prefix == "xml" ? xmlns : null;
|
||||
var good_attrval = orig_el.getAttribute(attr.nodeName);
|
||||
elem.setAttributeNS(ns, attr.nodeName, good_attrval);
|
||||
if(ns) {
|
||||
elem.setAttributeNS(ns, attr.nodeName, good_attrval);
|
||||
} else {
|
||||
elem.setAttribute(attr.nodeName, good_attrval);
|
||||
}
|
||||
});
|
||||
|
||||
var childs = elem.childNodes;
|
||||
var o_childs = orig_el.childNodes;
|
||||
$.each(childs, function(i, child) {
|
||||
if(child.nodeType == 1) {
|
||||
fixOperaXML(child, o_childs[i]);
|
||||
canvas.fixOperaXML(child, o_childs[i]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -3881,7 +3884,7 @@ function BatchCommand(text) {
|
|||
|
||||
// Fix XML for Opera/Win/Non-EN
|
||||
if(window.opera) {
|
||||
fixOperaXML(svgcontent, newDoc.documentElement);
|
||||
canvas.fixOperaXML(svgcontent, newDoc.documentElement);
|
||||
}
|
||||
|
||||
svgcontent.setAttribute('id', 'svgcontent');
|
||||
|
@ -4685,7 +4688,9 @@ function BatchCommand(text) {
|
|||
var defs = findDefs();
|
||||
// no duplicate found, so import gradient into defs
|
||||
if (!duplicate_grad) {
|
||||
var orig_grad = grad;
|
||||
grad = defs.appendChild( svgdoc.importNode(grad, true) );
|
||||
canvas.fixOperaXML(grad, orig_grad);
|
||||
// get next id and set it on the grad
|
||||
grad.id = getNextId();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue