Fixed issue 183: Removing unused gradients causes a problem for Undo
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1784 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
afc874626f
commit
1ef20a3afc
|
@ -190,6 +190,7 @@ var userAgent = navigator.userAgent,
|
||||||
var visElems_arr = visElems.split(',');
|
var visElems_arr = visElems.split(',');
|
||||||
// var hidElems = 'clipPath,defs,desc,feGaussianBlur,filter,linearGradient,marker,mask,metadata,pattern,radialGradient,stop,switch,symbol,title,textPath';
|
// var hidElems = 'clipPath,defs,desc,feGaussianBlur,filter,linearGradient,marker,mask,metadata,pattern,radialGradient,stop,switch,symbol,title,textPath';
|
||||||
|
|
||||||
|
var ref_attrs = ["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"];
|
||||||
|
|
||||||
|
|
||||||
// Update config with new one if given
|
// Update config with new one if given
|
||||||
|
@ -712,6 +713,22 @@ var convertToNum, convertToUnit, setUnitAttr, unitConvertAttrs;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
var restoreRefElems = function(elem) {
|
||||||
|
// Look for missing reference elements, restore any found
|
||||||
|
var attrs = $(elem).attr(ref_attrs);
|
||||||
|
for(var o in attrs) {
|
||||||
|
var val = attrs[o];
|
||||||
|
if (val && val.indexOf('url(') === 0) {
|
||||||
|
var id = getUrlFromAttr(val).substr(1);
|
||||||
|
var ref = getElem(id);
|
||||||
|
if(!ref) {
|
||||||
|
findDefs().appendChild(removedElements[id]);
|
||||||
|
delete removedElements[id];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Group: Undo/Redo history management
|
// Group: Undo/Redo history management
|
||||||
|
|
||||||
this.undoCmd = {};
|
this.undoCmd = {};
|
||||||
|
@ -841,6 +858,9 @@ var InsertElementCommand = this.undoCmd.insertElement = function(elem, text) {
|
||||||
// Re-Inserts the new element
|
// Re-Inserts the new element
|
||||||
this.apply = function() {
|
this.apply = function() {
|
||||||
this.elem = this.parent.insertBefore(this.elem, this.elem.nextSibling);
|
this.elem = this.parent.insertBefore(this.elem, this.elem.nextSibling);
|
||||||
|
|
||||||
|
restoreRefElems(this.elem);
|
||||||
|
|
||||||
if (this.parent == svgcontent) {
|
if (this.parent == svgcontent) {
|
||||||
identifyLayers();
|
identifyLayers();
|
||||||
}
|
}
|
||||||
|
@ -894,8 +914,11 @@ var RemoveElementCommand = this.undoCmd.removeElement = function(elem, parent, t
|
||||||
delete svgTransformLists[this.elem.id];
|
delete svgTransformLists[this.elem.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
this.elem = this.parent.insertBefore(this.elem, this.elem.nextSibling);
|
this.parent.insertBefore(this.elem, this.elem.nextSibling);
|
||||||
if (this.parent == svgcontent) {
|
|
||||||
|
restoreRefElems(this.elem);
|
||||||
|
|
||||||
|
if (this.parent === svgcontent) {
|
||||||
identifyLayers();
|
identifyLayers();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -2035,7 +2058,10 @@ var cur_shape = all_properties.shape,
|
||||||
extensions = {},
|
extensions = {},
|
||||||
|
|
||||||
// Canvas point for the most recent right click
|
// Canvas point for the most recent right click
|
||||||
lastClickPoint = null;
|
lastClickPoint = null,
|
||||||
|
|
||||||
|
// Map of deleted reference elements
|
||||||
|
removedElements = {}
|
||||||
|
|
||||||
// Clipboard for cut, copy&pasted elements
|
// Clipboard for cut, copy&pasted elements
|
||||||
canvas.clipBoard = [];
|
canvas.clipBoard = [];
|
||||||
|
@ -2417,11 +2443,6 @@ var copyElem = function(el) {
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// id - String with the element's new ID
|
// id - String with the element's new ID
|
||||||
function getElem(id) {
|
function getElem(id) {
|
||||||
// if(svgroot.getElementById) {
|
|
||||||
// // getElementById lookup
|
|
||||||
// return svgroot.getElementById(id);
|
|
||||||
// } else
|
|
||||||
|
|
||||||
if(svgroot.querySelector) {
|
if(svgroot.querySelector) {
|
||||||
// querySelector lookup
|
// querySelector lookup
|
||||||
return svgroot.querySelector('#'+id);
|
return svgroot.querySelector('#'+id);
|
||||||
|
@ -7789,8 +7810,9 @@ var removeUnusedDefElems = this.removeUnusedDefElems = function() {
|
||||||
while (i--) {
|
while (i--) {
|
||||||
var defelem = defelems[i];
|
var defelem = defelems[i];
|
||||||
var id = defelem.id;
|
var id = defelem.id;
|
||||||
if(defelem_uses.indexOf(id) == -1) {
|
if(defelem_uses.indexOf(id) < 0) {
|
||||||
// Not found, so remove
|
// Not found, so remove (but remember)
|
||||||
|
removedElements[id] = defelem;
|
||||||
defelem.parentNode.removeChild(defelem);
|
defelem.parentNode.removeChild(defelem);
|
||||||
numRemoved++;
|
numRemoved++;
|
||||||
}
|
}
|
||||||
|
@ -8140,7 +8162,6 @@ this.randomizeIds = function() {
|
||||||
// g - The parent element of the tree to give unique IDs
|
// g - The parent element of the tree to give unique IDs
|
||||||
var uniquifyElems = this.uniquifyElems = function(g) {
|
var uniquifyElems = this.uniquifyElems = function(g) {
|
||||||
var ids = {};
|
var ids = {};
|
||||||
var ref_attrs = ["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"];
|
|
||||||
var ref_elems = ["filter", "linearGradient", "pattern", "radialGradient", "textPath", "use"];
|
var ref_elems = ["filter", "linearGradient", "pattern", "radialGradient", "textPath", "use"];
|
||||||
|
|
||||||
walkTree(g, function(n) {
|
walkTree(g, function(n) {
|
||||||
|
|
Loading…
Reference in New Issue