diff --git a/editor/browsersupport.js b/editor/browsersupport.js
index 76395f55..a8b3f1df 100644
--- a/editor/browsersupport.js
+++ b/editor/browsersupport.js
@@ -12,11 +12,13 @@
(function() {
-if (window.svgedit == undefined) {
+if (!window.svgedit) {
window.svgedit = {};
}
-svgedit.BrowserSupport = {};
+if (!svgedit.BrowserSupport) {
+ svgedit.BrowserSupport = {};
+}
var svgns = 'http://www.w3.org/2000/svg';
var userAgent = navigator.userAgent;
@@ -27,7 +29,7 @@ svgedit.BrowserSupport.isWebkit = userAgent.indexOf("AppleWebKit") >= 0;
svgedit.BrowserSupport.isGecko = userAgent.indexOf('Gecko/') >= 0;
// segList functions (for FF1.5 and 2.0)
-function getPathReplaceItem() {
+function supportPathReplaceItem() {
var path = document.createElementNS(svgns,'path');
path.setAttribute('d','M0,0 10,10');
var seglist = path.pathSegList;
@@ -39,7 +41,7 @@ function getPathReplaceItem() {
return false;
}
-function getPathInsertItemBefore() {
+function supportPathInsertItemBefore() {
var path = document.createElementNS(svgns,'path');
path.setAttribute('d','M0,0 10,10');
var seglist = path.pathSegList;
@@ -52,7 +54,7 @@ function getPathInsertItemBefore() {
}
// text character positioning
-function getTextCharPos() {
+function supportTextCharPos() {
var retValue = false;
var svgcontent = document.createElementNS(svgns, 'svg');
document.documentElement.appendChild(svgcontent);
@@ -67,12 +69,12 @@ function getTextCharPos() {
return retValue;
}
-function getEditableText() {
+function supportEditableText() {
// TODO: Find better way to check support for this
return svgedit.BrowserSupport.isOpera;
}
-function getGoodDecimals() {
+function supportGoodDecimals() {
// Correct decimals on clone attributes (Opera < 10.5/win/non-en)
var rect = document.createElementNS(svgns,'rect');
rect.setAttribute('x',.1);
@@ -85,17 +87,17 @@ function getGoodDecimals() {
return retValue;
}
-function getNonScalingStroke() {
+function supportNonScalingStroke() {
var rect = document.createElementNS(svgns,'rect');
rect.setAttribute('style','vector-effect:non-scaling-stroke');
return rect.style.vectorEffect === 'non-scaling-stroke';
}
-svgedit.BrowserSupport.pathReplaceItem = getPathReplaceItem();
-svgedit.BrowserSupport.pathInsertItemBefore = getPathInsertItemBefore();
-svgedit.BrowserSupport.textCharPos = getTextCharPos();
-svgedit.BrowserSupport.editableText = getEditableText();
-svgedit.BrowserSupport.goodDecimals = getGoodDecimals();
-svgedit.BrowserSupport.nonScalingStroke = getNonScalingStroke();
+svgedit.BrowserSupport.pathReplaceItem = supportPathReplaceItem();
+svgedit.BrowserSupport.pathInsertItemBefore = supportPathInsertItemBefore();
+svgedit.BrowserSupport.textCharPos = supportTextCharPos();
+svgedit.BrowserSupport.editableText = supportEditableText();
+svgedit.BrowserSupport.goodDecimals = supportGoodDecimals();
+svgedit.BrowserSupport.nonScalingStroke = supportNonScalingStroke();
})();
\ No newline at end of file
diff --git a/editor/math.js b/editor/math.js
index 0b5806b0..b77f249c 100644
--- a/editor/math.js
+++ b/editor/math.js
@@ -184,4 +184,33 @@ svgedit.math.transformListToTransform = function(tlist, min, max) {
return svg.createSVGTransformFromMatrix(m);
};
+
+// Function: svgedit.math.snapToAngle
+// Returns a 45 degree angle coordinate associated with the two given
+// coordinates
+//
+// Parameters:
+// x1 - First coordinate's x value
+// x2 - Second coordinate's x value
+// y1 - First coordinate's y value
+// y2 - Second coordinate's y value
+//
+// Returns:
+// Object with the following values:
+// x - The angle-snapped x value
+// y - The angle-snapped y value
+// snapangle - The angle at which to snap
+svgedit.math.snapToAngle = function(x1,y1,x2,y2) {
+ var snap = Math.PI/4; // 45 degrees
+ var dx = x2 - x1;
+ var dy = y2 - y1;
+ var angle = Math.atan2(dy,dx);
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ var snapangle= Math.round(angle/snap)*snap;
+ var x = x1 + dist*Math.cos(snapangle);
+ var y = y1 + dist*Math.sin(snapangle);
+ //console.log(x1,y1,x2,y2,x,y,angle)
+ return {x:x, y:y, a:snapangle};
+};
+
})();
\ No newline at end of file
diff --git a/editor/svg-editor.html b/editor/svg-editor.html
index 3bdcb746..13694771 100644
--- a/editor/svg-editor.html
+++ b/editor/svg-editor.html
@@ -34,13 +34,7 @@
-
-
-
-
-
-
-script type="text/javascript" src="locale/locale.min.js">
+
diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js
index 94478585..071efa42 100644
--- a/editor/svgcanvas.js
+++ b/editor/svgcanvas.js
@@ -1444,13 +1444,20 @@ var SelectorManager;
var SVGEditTransformList = svgedit.SVGTransformList;
var svgTransformLists = {};
-// Group: Helper functions
-
// "Import" from svgutils.js
var walkTree = this.walkTree = svgedit.Utilities.walkTree;
var walkTreePost = this.walkTreePost = svgedit.Utilities.walkTreePost;
var getUrlFromAttr = this.getUrlFromAttr = svgedit.Utilities.getUrlFromAttr;
+// "Import" from math.js.
+var transformPoint = svgedit.math.transformPoint;
+var isIdentity = svgedit.math.isIdentity;
+var matrixMultiply = this.matrixMultiply = svgedit.math.matrixMultiply;
+var hasMatrixTransform = this.hasMatrixTransform = svgedit.math.hasMatrixTransform;
+var transformBox = this.transformBox = svgedit.math.transformBox;
+var transformListToTransform = this.transformListToTransform = svgedit.math.transformListToTransform;
+var snapToAngle = svgedit.math.snapToAngle;
+
// Function: assignAttributes
// Assigns multiple attributes to an element.
//
@@ -3611,14 +3618,6 @@ var recalculateDimensions = this.recalculateDimensions = function(selected) {
// Root Current Transformation Matrix in user units
var root_sctm = null;
-// "Import" math.js.
-var transformPoint = svgedit.math.transformPoint;
-var isIdentity = svgedit.math.isIdentity;
-var matrixMultiply = this.matrixMultiply = svgedit.math.matrixMultiply;
-var hasMatrixTransform = this.hasMatrixTransform = svgedit.math.hasMatrixTransform;
-var transformBox = this.transformBox = svgedit.math.transformBox;
-var transformListToTransform = this.transformListToTransform = svgedit.math.transformListToTransform;
-
// Function: getMatrix
// Get the matrix object for a given element
//
@@ -4296,7 +4295,7 @@ var getMouseTarget = this.getMouseTarget = function(evt) {
dy = snapToGrid(dy);
}
- if(evt.shiftKey) { var xya = Utils.snapToAngle(start_x,start_y,x,y); x=xya.x; y=xya.y; }
+ if(evt.shiftKey) { var xya = snapToAngle(start_x,start_y,x,y); x=xya.x; y=xya.y; }
if (dx != 0 || dy != 0) {
var len = selectedElements.length;
@@ -4481,7 +4480,7 @@ var getMouseTarget = this.getMouseTarget = function(evt) {
var x2 = x;
var y2 = y;
- if(evt.shiftKey) { var xya=Utils.snapToAngle(start_x,start_y,x2,y2); x2=xya.x; y2=xya.y; }
+ if(evt.shiftKey) { var xya = snapToAngle(start_x,start_y,x2,y2); x2=xya.x; y2=xya.y; }
shape.setAttributeNS(null, "x2", x2);
shape.setAttributeNS(null, "y2", y2);
@@ -4575,7 +4574,7 @@ var getMouseTarget = this.getMouseTarget = function(evt) {
if(evt.shiftKey) {
var x1 = path.dragging?path.dragging[0]:start_x;
var y1 = path.dragging?path.dragging[1]:start_y;
- var xya=Utils.snapToAngle(x1,y1,x,y);
+ var xya = snapToAngle(x1,y1,x,y);
x=xya.x; y=xya.y;
}
@@ -6558,7 +6557,7 @@ var pathActions = this.pathActions = function() {
var last = drawn_path.pathSegList.getItem(num -1);
var lastx = last.x, lasty = last.y;
- if(evt.shiftKey) { var xya=Utils.snapToAngle(lastx,lasty,x,y); x=xya.x; y=xya.y; }
+ if(evt.shiftKey) { var xya = snapToAngle(lastx,lasty,x,y); x=xya.x; y=xya.y; }
// Use the segment defined by stretchy
var s_seg = stretchy.pathSegList.getItem(1);
diff --git a/editor/svgutils.js b/editor/svgutils.js
index 4d58aac2..40c4652d 100644
--- a/editor/svgutils.js
+++ b/editor/svgutils.js
@@ -20,8 +20,11 @@ if (!svgedit.Utilities) {
svgedit.Utilities = {};
}
+// Constants
+
// String used to encode base64.
-svgedit.Utilities._keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+var KEYSTR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+var XLINKNS = "http://www.w3.org/1999/xlink";
// Function: svgedit.Utilities.toXml
// Converts characters in a string to XML-friendly entities.
@@ -65,7 +68,6 @@ svgedit.Utilities.encode64 = function(input) {
// input = svgedit.Utilities.encodeUTF8(input); // convert non-ASCII characters
input = svgedit.Utilities.convertToXMLReferences(input);
if(window.btoa) return window.btoa(input); // Use native if available
- var _keyStr = svgedit.Utilities._keyStr;
var output = new Array( Math.floor( (input.length + 2) / 3 ) * 4 );
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
@@ -87,10 +89,10 @@ svgedit.Utilities.encode64 = function(input) {
enc4 = 64;
}
- output[p++] = _keyStr.charAt(enc1);
- output[p++] = _keyStr.charAt(enc2);
- output[p++] = _keyStr.charAt(enc3);
- output[p++] = _keyStr.charAt(enc4);
+ output[p++] = KEYSTR.charAt(enc1);
+ output[p++] = KEYSTR.charAt(enc2);
+ output[p++] = KEYSTR.charAt(enc3);
+ output[p++] = KEYSTR.charAt(enc4);
} while (i < input.length);
return output.join('');
@@ -109,10 +111,10 @@ svgedit.Utilities.decode64 = function(input) {
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
- enc1 = _keyStr.indexOf(input.charAt(i++));
- enc2 = _keyStr.indexOf(input.charAt(i++));
- enc3 = _keyStr.indexOf(input.charAt(i++));
- enc4 = _keyStr.indexOf(input.charAt(i++));
+ enc1 = KEYSTR.indexOf(input.charAt(i++));
+ enc2 = KEYSTR.indexOf(input.charAt(i++));
+ enc3 = KEYSTR.indexOf(input.charAt(i++));
+ enc4 = KEYSTR.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
@@ -190,34 +192,6 @@ svgedit.Utilities.rectsIntersect = function(r1, r2) {
(r2.y+r2.height) > r1.y;
};
-// Function: snapToAngle
-// Returns a 45 degree angle coordinate associated with the two given
-// coordinates
-//
-// Parameters:
-// x1 - First coordinate's x value
-// x2 - Second coordinate's x value
-// y1 - First coordinate's y value
-// y2 - Second coordinate's y value
-//
-// Returns:
-// Object with the following values:
-// x - The angle-snapped x value
-// y - The angle-snapped y value
-// snapangle - The angle at which to snap
-svgedit.Utilities.snapToAngle = function(x1,y1,x2,y2) {
- var snap = Math.PI/4; // 45 degrees
- var dx = x2 - x1;
- var dy = y2 - y1;
- var angle = Math.atan2(dy,dx);
- var dist = Math.sqrt(dx * dx + dy * dy);
- var snapangle= Math.round(angle/snap)*snap;
- var x = x1 + dist*Math.cos(snapangle);
- var y = y1 + dist*Math.sin(snapangle);
- //console.log(x1,y1,x2,y2,x,y,angle)
- return {x:x, y:y, a:snapangle};
-},
-
// Function: text2xml
// Cross-browser compatible method of converting a string to an XML tree
// found this function here: http://groups.google.com/group/jquery-dev/browse_thread/thread/c6d11387c580a77f
@@ -323,13 +297,13 @@ svgedit.Utilities.getUrlFromAttr = function(attrVal) {
// Function: svgedit.Utilities.getHref
// Returns the given element's xlink:href value
svgedit.Utilities.getHref = function(elem) {
- return elem.getAttributeNS(xlinkns, "href");
+ return elem.getAttributeNS(XLINKNS, "href");
}
// Function: svgedit.Utilities.setHref
// Sets the given element's xlink:href value
svgedit.Utilities.setHref = function(elem, val) {
- elem.setAttributeNS(xlinkns, "xlink:href", val);
+ elem.setAttributeNS(XLINKNS, "xlink:href", val);
}
// Function: findDefs