Fixed issue 220 by creating manual clone function for Opera

git-svn-id: http://svg-edit.googlecode.com/svn/trunk@690 eee81c28-f429-11dd-99c0-75d572ba1ddd
master
Alexis Deveria 2009-09-23 13:43:13 +00:00
parent 2033115a3e
commit 428481b7ef
1 changed files with 26 additions and 6 deletions

View File

@ -550,7 +550,6 @@ function BatchCommand(text) {
var handle = svgroot.suspendRedraw(suspendLength); var handle = svgroot.suspendRedraw(suspendLength);
for (i in attrs) { for (i in attrs) {
console.log([i,attrs[i]]);
node.setAttributeNS(null, i, attrs[i]); node.setAttributeNS(null, i, attrs[i]);
} }
@ -884,10 +883,6 @@ function BatchCommand(text) {
for (i=attrs.length-1; i>=0; i--) { for (i=attrs.length-1; i>=0; i--) {
attr = attrs.item(i); attr = attrs.item(i);
if (attr.nodeValue != "") { if (attr.nodeValue != "") {
//Opera bug turns N.N to N,N in some locales
if (window.opera && attr.nodeName == 'opacity' && /^\d+,\d+$/.test(attr.nodeValue)) {
attr.nodeValue = attr.nodeValue.replace(',','.');
}
out.push(" "); out.push(" ");
// map various namespaces to our fixed namespace prefixes // map various namespaces to our fixed namespace prefixes
// TODO: put this into a map and do a look-up instead of if-else // TODO: put this into a map and do a look-up instead of if-else
@ -3787,6 +3782,31 @@ function BatchCommand(text) {
// this creates deep DOM copies (clones) of all selected elements // this creates deep DOM copies (clones) of all selected elements
this.cloneSelectedElements = function() { this.cloneSelectedElements = function() {
var copyElem = function(el) {
// Manual clone function for Opera/Win/non-EN.
// Needed because cloneNode changes "." to "," on float values
if(!window.opera) return el.cloneNode(true);
var new_el = document.createElementNS(svgns, el.nodeName);
$.each(el.attributes, function(i, attr) {
var ns = attr.nodeName == 'href'?xlinkns:null;
new_el.setAttributeNS(ns, attr.nodeName, attr.nodeValue);
});
$.each(el.childNodes, function(i, child) {
switch(child.nodeType) {
case 1: // element node
new_el.appendChild(copyElem(child));
break;
case 3: // text node
new_el.textContent = child.nodeValue;
break;
default:
break;
}
});
return new_el;
}
var batchCmd = new BatchCommand("Clone Elements"); var batchCmd = new BatchCommand("Clone Elements");
// find all the elements selected (stop at first null) // find all the elements selected (stop at first null)
var len = selectedElements.length; var len = selectedElements.length;
@ -3802,7 +3822,7 @@ function BatchCommand(text) {
var i = copiedElements.length; var i = copiedElements.length;
while (i--) { while (i--) {
// clone each element and replace it within copiedElements // clone each element and replace it within copiedElements
var elem = copiedElements[i] = copiedElements[i].cloneNode(true); var elem = copiedElements[i] = copyElem(copiedElements[i]);
elem.removeAttribute("id"); elem.removeAttribute("id");
elem.id = getNextId(); elem.id = getNextId();
current_layer.appendChild(elem); current_layer.appendChild(elem);