diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2166a3c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+build/firefox/*
+build/opera/*
+build/svg-edit-2.6/*
+build/svg-edit-2.6-src/*
+build/svg-edit-2.6-src.tar.gz
+build/svg-edit-2.6.wgt
+build/svg-edit-2.6.xpi
+build/svg-edit-2.6.zip
\ No newline at end of file
diff --git a/Makefile b/Makefile
index d1ca4b3..7dc42f5 100644
--- a/Makefile
+++ b/Makefile
@@ -85,12 +85,6 @@ $(COMPILED_JS):
compile: $(COMPILED_JS) $(COMPILED_CSS)
release: build/$(PACKAGE)
- cd build ; $(ZIP) $(PACKAGE).zip -r $(PACKAGE) ; cd ..
- tar -z -c -f build/$(PACKAGE)-src.tar.gz \
- --exclude='\.svn' \
- --exclude='\.git' \
- --exclude='build/*' \
- .
deploy:
cp -R build/svg-edit-2.6 ../Method.ac/public
diff --git a/build/firefox/chrome.manifest b/build/firefox/chrome.manifest
deleted file mode 100644
index 3e98b2d..0000000
--- a/build/firefox/chrome.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-content svg-edit content/
-overlay chrome://browser/content/browser.xul chrome://svg-edit/content/svg-edit-overlay.xul
diff --git a/build/firefox/content/editor/browser-not-supported.html b/build/firefox/content/editor/browser-not-supported.html
deleted file mode 100644
index 3010fcf..0000000
--- a/build/firefox/content/editor/browser-not-supported.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-Browser does not support SVG | SVG-edit
-
-
-
-
-
-
-
diff --git a/build/firefox/content/editor/browser.js b/build/firefox/content/editor/browser.js
deleted file mode 100644
index edfba7b..0000000
--- a/build/firefox/content/editor/browser.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * Package: svgedit.browser
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Jeff Schiller
- * Copyright(c) 2010 Alexis Deveria
- */
-
-// Dependencies:
-// 1) jQuery (for $.alert())
-
-var svgedit = svgedit || {};
-
-(function() {
-
-if (!svgedit.browser) {
- svgedit.browser = {};
-}
-var supportsSvg_ = (function() {
- return !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;
-})();
-svgedit.browser.supportsSvg = function() { return supportsSvg_; }
-if(!svgedit.browser.supportsSvg()) {
- window.location = "browser-not-supported.html";
-}
-else{
-
-var svgns = 'http://www.w3.org/2000/svg';
-var userAgent = navigator.userAgent;
-var svg = document.createElementNS(svgns, 'svg');
-
-// Note: Browser sniffing should only be used if no other detection method is possible
-var isOpera_ = !!window.opera;
-var isWebkit_ = userAgent.indexOf("AppleWebKit") >= 0;
-var isGecko_ = userAgent.indexOf('Gecko/') >= 0;
-var isIE_ = userAgent.indexOf('MSIE') >= 0;
-var isChrome_ = userAgent.indexOf('Chrome/') >= 0;
-var isWindows_ = userAgent.indexOf('Windows') >= 0;
-var isMac_ = userAgent.indexOf('Macintosh') >= 0;
-var isTouch_ = 'ontouchstart' in window;
-
-var supportsSelectors_ = (function() {
- return !!svg.querySelector;
-})();
-
-var supportsXpath_ = (function() {
- return !!document.evaluate;
-})();
-
-// segList functions (for FF1.5 and 2.0)
-var supportsPathReplaceItem_ = (function() {
- var path = document.createElementNS(svgns, 'path');
- path.setAttribute('d','M0,0 10,10');
- var seglist = path.pathSegList;
- var seg = path.createSVGPathSegLinetoAbs(5,5);
- try {
- seglist.replaceItem(seg, 0);
- return true;
- } catch(err) {}
- return false;
-})();
-
-var supportsPathInsertItemBefore_ = (function() {
- var path = document.createElementNS(svgns,'path');
- path.setAttribute('d','M0,0 10,10');
- var seglist = path.pathSegList;
- var seg = path.createSVGPathSegLinetoAbs(5,5);
- try {
- seglist.insertItemBefore(seg, 0);
- return true;
- } catch(err) {}
- return false;
-})();
-
-// text character positioning (for IE9)
-var supportsGoodTextCharPos_ = (function() {
- var retValue = false;
- var svgroot = document.createElementNS(svgns, 'svg');
- var svgcontent = document.createElementNS(svgns, 'svg');
- document.documentElement.appendChild(svgroot);
- svgcontent.setAttribute('x', 5);
- svgroot.appendChild(svgcontent);
- var text = document.createElementNS(svgns,'text');
- text.textContent = 'a';
- svgcontent.appendChild(text);
- var pos = text.getStartPositionOfChar(0).x;
- document.documentElement.removeChild(svgroot);
- return (pos === 0);
-})();
-
-var supportsPathBBox_ = (function() {
- var svgcontent = document.createElementNS(svgns, 'svg');
- document.documentElement.appendChild(svgcontent);
- var path = document.createElementNS(svgns, 'path');
- path.setAttribute('d','M0,0 C0,0 10,10 10,0');
- svgcontent.appendChild(path);
- var bbox = path.getBBox();
- document.documentElement.removeChild(svgcontent);
- return (bbox.height > 4 && bbox.height < 5);
-})();
-
-// Support for correct bbox sizing on groups with horizontal/vertical lines
-var supportsHVLineContainerBBox_ = (function() {
- var svgcontent = document.createElementNS(svgns, 'svg');
- document.documentElement.appendChild(svgcontent);
- var path = document.createElementNS(svgns, 'path');
- path.setAttribute('d','M0,0 10,0');
- var path2 = document.createElementNS(svgns, 'path');
- path2.setAttribute('d','M5,0 15,0');
- var g = document.createElementNS(svgns, 'g');
- g.appendChild(path);
- g.appendChild(path2);
- svgcontent.appendChild(g);
- var bbox = g.getBBox();
- document.documentElement.removeChild(svgcontent);
- // Webkit gives 0, FF gives 10, Opera (correctly) gives 15
- return (bbox.width == 15);
-})();
-
-var supportsEditableText_ = (function() {
- // TODO: Find better way to check support for this
- return isOpera_;
-})();
-
-var supportsGoodDecimals_ = (function() {
- // Correct decimals on clone attributes (Opera < 10.5/win/non-en)
- var rect = document.createElementNS(svgns, 'rect');
- rect.setAttribute('x',.1);
- var crect = rect.cloneNode(false);
- var retValue = (crect.getAttribute('x').indexOf(',') == -1);
- if(!retValue) {
- $.alert("NOTE: This version of Opera is known to contain bugs in SVG-edit.\n\
- Please upgrade to the latest version in which the problems have been fixed.");
- }
- return retValue;
-})();
-
-var supportsNonScalingStroke_ = (function() {
- var rect = document.createElementNS(svgns, 'rect');
- rect.setAttribute('style','vector-effect:non-scaling-stroke');
- return rect.style.vectorEffect === 'non-scaling-stroke';
-})();
-
-var supportsNativeSVGTransformLists_ = (function() {
- var rect = document.createElementNS(svgns, 'rect');
- var rxform = rect.transform.baseVal;
-
- var t1 = svg.createSVGTransform();
- rxform.appendItem(t1);
- return rxform.getItem(0) == t1;
-})();
-
-// Public API
-
-svgedit.browser.isOpera = function() { return isOpera_; }
-svgedit.browser.isWebkit = function() { return isWebkit_; }
-svgedit.browser.isGecko = function() { return isGecko_; }
-svgedit.browser.isIE = function() { return isIE_; }
-svgedit.browser.isChrome = function() { return isChrome_; }
-svgedit.browser.isWindows = function() { return isWindows_; }
-svgedit.browser.isMac = function() { return isMac_; }
-svgedit.browser.isTouch = function() { return isTouch_; }
-
-svgedit.browser.supportsSelectors = function() { return supportsSelectors_; }
-svgedit.browser.supportsXpath = function() { return supportsXpath_; }
-
-svgedit.browser.supportsPathReplaceItem = function() { return supportsPathReplaceItem_; }
-svgedit.browser.supportsPathInsertItemBefore = function() { return supportsPathInsertItemBefore_; }
-svgedit.browser.supportsPathBBox = function() { return supportsPathBBox_; }
-svgedit.browser.supportsHVLineContainerBBox = function() { return supportsHVLineContainerBBox_; }
-svgedit.browser.supportsGoodTextCharPos = function() { return supportsGoodTextCharPos_; }
-svgedit.browser.supportsEditableText = function() { return supportsEditableText_; }
-svgedit.browser.supportsGoodDecimals = function() { return supportsGoodDecimals_; }
-svgedit.browser.supportsNonScalingStroke = function() { return supportsNonScalingStroke_; }
-svgedit.browser.supportsNativeTransformLists = function() { return supportsNativeSVGTransformLists_; }
-
-}
-
-})();
diff --git a/build/firefox/content/editor/canvg/canvg.js b/build/firefox/content/editor/canvg/canvg.js
deleted file mode 100644
index 7b24a38..0000000
--- a/build/firefox/content/editor/canvg/canvg.js
+++ /dev/null
@@ -1,2620 +0,0 @@
-/*
- * canvg.js - Javascript SVG parser and renderer on Canvas
- * MIT Licensed
- * Gabe Lerner (gabelerner@gmail.com)
- * http://code.google.com/p/canvg/
- *
- * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/
- */
-if(!window.console) {
- window.console = {};
- window.console.log = function(str) {};
- window.console.dir = function(str) {};
-}
-
-if(!Array.prototype.indexOf){
- Array.prototype.indexOf = function(obj){
- for(var i=0; i ignore mouse events
- // ignoreAnimation: true => ignore animations
- // ignoreDimensions: true => does not try to resize canvas
- // ignoreClear: true => does not clear canvas
- // offsetX: int => draws at a x offset
- // offsetY: int => draws at a y offset
- // scaleWidth: int => scales horizontally to width
- // scaleHeight: int => scales vertically to height
- // renderCallback: function => will call the function after the first render is completed
- // forceRedraw: function => will call the function on every frame, if it returns true, will redraw
- this.canvg = function (target, s, opts) {
- // no parameters
- if (target == null && s == null && opts == null) {
- var svgTags = document.getElementsByTagName('svg');
- for (var i=0; i]*>/, '');
- var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
- xmlDoc.async = 'false';
- xmlDoc.loadXML(xml);
- return xmlDoc;
- }
- }
-
- svg.Property = function(name, value) {
- this.name = name;
- this.value = value;
-
- this.hasValue = function() {
- return (this.value != null && this.value !== '');
- }
-
- // return the numerical value of the property
- this.numValue = function() {
- if (!this.hasValue()) return 0;
-
- var n = parseFloat(this.value);
- if ((this.value + '').match(/%$/)) {
- n = n / 100.0;
- }
- return n;
- }
-
- this.valueOrDefault = function(def) {
- if (this.hasValue()) return this.value;
- return def;
- }
-
- this.numValueOrDefault = function(def) {
- if (this.hasValue()) return this.numValue();
- return def;
- }
-
- /* EXTENSIONS */
- var that = this;
-
- // color extensions
- this.Color = {
- // augment the current color value with the opacity
- addOpacity: function(opacity) {
- var newValue = that.value;
- if (opacity != null && opacity != '') {
- var color = new RGBColor(that.value);
- if (color.ok) {
- newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')';
- }
- }
- return new svg.Property(that.name, newValue);
- }
- }
-
- // definition extensions
- this.Definition = {
- // get the definition from the definitions table
- getDefinition: function() {
- var name = that.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2');
- return svg.Definitions[name];
- },
-
- isUrl: function() {
- return that.value.indexOf('url(') == 0
- },
-
- getFillStyle: function(e) {
- var def = this.getDefinition();
-
- // gradient
- if (def != null && def.createGradient) {
- return def.createGradient(svg.ctx, e);
- }
-
- // pattern
- if (def != null && def.createPattern) {
- return def.createPattern(svg.ctx, e);
- }
-
- return null;
- }
- }
-
- // length extensions
- this.Length = {
- DPI: function(viewPort) {
- return 96.0; // TODO: compute?
- },
-
- EM: function(viewPort) {
- var em = 12;
-
- var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);
- if (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort);
-
- return em;
- },
-
- // get the length as pixels
- toPixels: function(viewPort) {
- if (!that.hasValue()) return 0;
- var s = that.value+'';
- if (s.match(/em$/)) return that.numValue() * this.EM(viewPort);
- if (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0;
- if (s.match(/px$/)) return that.numValue();
- if (s.match(/pt$/)) return that.numValue() * 1.25;
- if (s.match(/pc$/)) return that.numValue() * 15;
- if (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54;
- if (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4;
- if (s.match(/in$/)) return that.numValue() * this.DPI(viewPort);
- if (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort);
- return that.numValue();
- }
- }
-
- // time extensions
- this.Time = {
- // get the time as milliseconds
- toMilliseconds: function() {
- if (!that.hasValue()) return 0;
- var s = that.value+'';
- if (s.match(/s$/)) return that.numValue() * 1000;
- if (s.match(/ms$/)) return that.numValue();
- return that.numValue();
- }
- }
-
- // angle extensions
- this.Angle = {
- // get the angle as radians
- toRadians: function() {
- if (!that.hasValue()) return 0;
- var s = that.value+'';
- if (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0);
- if (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0);
- if (s.match(/rad$/)) return that.numValue();
- return that.numValue() * (Math.PI / 180.0);
- }
- }
- }
-
- // fonts
- svg.Font = new (function() {
- this.Styles = ['normal','italic','oblique','inherit'];
- this.Variants = ['normal','small-caps','inherit'];
- this.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit'];
-
- this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) {
- var f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font);
- return {
- fontFamily: fontFamily || f.fontFamily,
- fontSize: fontSize || f.fontSize,
- fontStyle: fontStyle || f.fontStyle,
- fontWeight: fontWeight || f.fontWeight,
- fontVariant: fontVariant || f.fontVariant,
- toString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') }
- }
- }
-
- var that = this;
- this.Parse = function(s) {
- var f = {};
- var d = svg.trim(svg.compressSpaces(s || '')).split(' ');
- var set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false }
- var ff = '';
- for (var i=0; i this.x2) this.x2 = x;
- }
-
- if (y != null) {
- if (isNaN(this.y1) || isNaN(this.y2)) {
- this.y1 = y;
- this.y2 = y;
- }
- if (y < this.y1) this.y1 = y;
- if (y > this.y2) this.y2 = y;
- }
- }
- this.addX = function(x) { this.addPoint(x, null); }
- this.addY = function(y) { this.addPoint(null, y); }
-
- this.addBoundingBox = function(bb) {
- this.addPoint(bb.x1, bb.y1);
- this.addPoint(bb.x2, bb.y2);
- }
-
- this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) {
- var cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)
- var cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)
- var cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)
- var cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)
- this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y);
- }
-
- this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {
- // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
- var p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y];
- this.addPoint(p0[0], p0[1]);
- this.addPoint(p3[0], p3[1]);
-
- for (i=0; i<=1; i++) {
- var f = function(t) {
- return Math.pow(1-t, 3) * p0[i]
- + 3 * Math.pow(1-t, 2) * t * p1[i]
- + 3 * (1-t) * Math.pow(t, 2) * p2[i]
- + Math.pow(t, 3) * p3[i];
- }
-
- var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
- var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
- var c = 3 * p1[i] - 3 * p0[i];
-
- if (a == 0) {
- if (b == 0) continue;
- var t = -c / b;
- if (0 < t && t < 1) {
- if (i == 0) this.addX(f(t));
- if (i == 1) this.addY(f(t));
- }
- continue;
- }
-
- var b2ac = Math.pow(b, 2) - 4 * c * a;
- if (b2ac < 0) continue;
- var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);
- if (0 < t1 && t1 < 1) {
- if (i == 0) this.addX(f(t1));
- if (i == 1) this.addY(f(t1));
- }
- var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);
- if (0 < t2 && t2 < 1) {
- if (i == 0) this.addX(f(t2));
- if (i == 1) this.addY(f(t2));
- }
- }
- }
-
- this.isPointInBox = function(x, y) {
- return (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2);
- }
-
- this.addPoint(x1, y1);
- this.addPoint(x2, y2);
- }
-
- // transforms
- svg.Transform = function(v) {
- var that = this;
- this.Type = {}
-
- // translate
- this.Type.translate = function(s) {
- this.p = svg.CreatePoint(s);
- this.apply = function(ctx) {
- ctx.translate(this.p.x || 0.0, this.p.y || 0.0);
- }
- this.applyToPoint = function(p) {
- p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);
- }
- }
-
- // rotate
- this.Type.rotate = function(s) {
- var a = svg.ToNumberArray(s);
- this.angle = new svg.Property('angle', a[0]);
- this.cx = a[1] || 0;
- this.cy = a[2] || 0;
- this.apply = function(ctx) {
- ctx.translate(this.cx, this.cy);
- ctx.rotate(this.angle.Angle.toRadians());
- ctx.translate(-this.cx, -this.cy);
- }
- this.applyToPoint = function(p) {
- var a = this.angle.Angle.toRadians();
- p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);
- p.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);
- p.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]);
- }
- }
-
- this.Type.scale = function(s) {
- this.p = svg.CreatePoint(s);
- this.apply = function(ctx) {
- ctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0);
- }
- this.applyToPoint = function(p) {
- p.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]);
- }
- }
-
- this.Type.matrix = function(s) {
- this.m = svg.ToNumberArray(s);
- this.apply = function(ctx) {
- ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]);
- }
- this.applyToPoint = function(p) {
- p.applyTransform(this.m);
- }
- }
-
- this.Type.SkewBase = function(s) {
- this.base = that.Type.matrix;
- this.base(s);
- this.angle = new svg.Property('angle', s);
- }
- this.Type.SkewBase.prototype = new this.Type.matrix;
-
- this.Type.skewX = function(s) {
- this.base = that.Type.SkewBase;
- this.base(s);
- this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0];
- }
- this.Type.skewX.prototype = new this.Type.SkewBase;
-
- this.Type.skewY = function(s) {
- this.base = that.Type.SkewBase;
- this.base(s);
- this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0];
- }
- this.Type.skewY.prototype = new this.Type.SkewBase;
-
- this.transforms = [];
-
- this.apply = function(ctx) {
- for (var i=0; i= this.tokens.length - 1;
- }
-
- this.isCommandOrEnd = function() {
- if (this.isEnd()) return true;
- return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null;
- }
-
- this.isRelativeCommand = function() {
- return this.command == this.command.toLowerCase();
- }
-
- this.getToken = function() {
- this.i = this.i + 1;
- return this.tokens[this.i];
- }
-
- this.getScalar = function() {
- return parseFloat(this.getToken());
- }
-
- this.nextCommand = function() {
- this.previousCommand = this.command;
- this.command = this.getToken();
- }
-
- this.getPoint = function() {
- var p = new svg.Point(this.getScalar(), this.getScalar());
- return this.makeAbsolute(p);
- }
-
- this.getAsControlPoint = function() {
- var p = this.getPoint();
- this.control = p;
- return p;
- }
-
- this.getAsCurrentPoint = function() {
- var p = this.getPoint();
- this.current = p;
- return p;
- }
-
- this.getReflectedControlPoint = function() {
- if (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') {
- return this.current;
- }
-
- // reflect point
- var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y);
- return p;
- }
-
- this.makeAbsolute = function(p) {
- if (this.isRelativeCommand()) {
- p.x = this.current.x + p.x;
- p.y = this.current.y + p.y;
- }
- return p;
- }
-
- this.addMarker = function(p, from, priorTo) {
- // if the last angle isn't filled in because we didn't have this point yet ...
- if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) {
- this.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo);
- }
- this.addMarkerAngle(p, from == null ? null : from.angleTo(p));
- }
-
- this.addMarkerAngle = function(p, a) {
- this.points.push(p);
- this.angles.push(a);
- }
-
- this.getMarkerPoints = function() { return this.points; }
- this.getMarkerAngles = function() {
- for (var i=0; i 1) {
- rx *= Math.sqrt(l);
- ry *= Math.sqrt(l);
- }
- // cx', cy'
- var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt(
- ((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) /
- (Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2))
- );
- if (isNaN(s)) s = 0;
- var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx);
- // cx, cy
- var centp = new svg.Point(
- (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,
- (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y
- );
- // vector magnitude
- var m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); }
- // ratio between two vectors
- var r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) }
- // angle between two vectors
- var a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); }
- // initial angle
- var a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]);
- // angle delta
- var u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry];
- var v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry];
- var ad = a(u, v);
- if (r(u,v) <= -1) ad = Math.PI;
- if (r(u,v) >= 1) ad = 0;
-
- if (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI;
- if (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI;
-
- // for markers
- var halfWay = new svg.Point(
- centp.x - rx * Math.cos((a1 + ad) / 2),
- centp.y - ry * Math.sin((a1 + ad) / 2)
- );
- pp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);
- pp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);
-
- bb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better
- if (ctx != null) {
- var r = rx > ry ? rx : ry;
- var sx = rx > ry ? 1 : rx / ry;
- var sy = rx > ry ? ry / rx : 1;
-
- ctx.translate(centp.x, centp.y);
- ctx.rotate(xAxisRotation);
- ctx.scale(sx, sy);
- ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag);
- ctx.scale(1/sx, 1/sy);
- ctx.rotate(-xAxisRotation);
- ctx.translate(-centp.x, -centp.y);
- }
- }
- break;
- case 'Z':
- if (ctx != null) ctx.closePath();
- pp.current = pp.start;
- }
- }
-
- return bb;
- }
-
- this.getMarkers = function() {
- var points = this.PathParser.getMarkerPoints();
- var angles = this.PathParser.getMarkerAngles();
-
- var markers = [];
- for (var i=0; i this.maxDuration) {
- // loop for indefinitely repeating animations
- if (this.attribute('repeatCount').value == 'indefinite') {
- this.duration = 0.0
- }
- else if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) {
- this.removed = true;
- this.getProperty().value = this.initialValue;
- return true;
- }
- else {
- return false; // no updates made
- }
- }
- this.duration = this.duration + delta;
-
- // if we're past the begin time
- var updated = false;
- if (this.begin < this.duration) {
- var newValue = this.calcValue(); // tween
-
- if (this.attribute('type').hasValue()) {
- // for transform, etc.
- var type = this.attribute('type').value;
- newValue = type + '(' + newValue + ')';
- }
-
- this.getProperty().value = newValue;
- updated = true;
- }
-
- return updated;
- }
-
- // fraction of duration we've covered
- this.progress = function() {
- return ((this.duration - this.begin) / (this.maxDuration - this.begin));
- }
- }
- svg.Element.AnimateBase.prototype = new svg.Element.ElementBase;
-
- // animate element
- svg.Element.animate = function(node) {
- this.base = svg.Element.AnimateBase;
- this.base(node);
-
- this.calcValue = function() {
- var from = this.attribute('from').numValue();
- var to = this.attribute('to').numValue();
-
- // tween value linearly
- return from + (to - from) * this.progress();
- };
- }
- svg.Element.animate.prototype = new svg.Element.AnimateBase;
-
- // animate color element
- svg.Element.animateColor = function(node) {
- this.base = svg.Element.AnimateBase;
- this.base(node);
-
- this.calcValue = function() {
- var from = new RGBColor(this.attribute('from').value);
- var to = new RGBColor(this.attribute('to').value);
-
- if (from.ok && to.ok) {
- // tween color linearly
- var r = from.r + (to.r - from.r) * this.progress();
- var g = from.g + (to.g - from.g) * this.progress();
- var b = from.b + (to.b - from.b) * this.progress();
- return 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')';
- }
- return this.attribute('from').value;
- };
- }
- svg.Element.animateColor.prototype = new svg.Element.AnimateBase;
-
- // animate transform element
- svg.Element.animateTransform = function(node) {
- this.base = svg.Element.animate;
- this.base(node);
- }
- svg.Element.animateTransform.prototype = new svg.Element.animate;
-
- // font element
- svg.Element.font = function(node) {
- this.base = svg.Element.ElementBase;
- this.base(node);
-
- this.horizAdvX = this.attribute('horiz-adv-x').numValue();
-
- this.isRTL = false;
- this.isArabic = false;
- this.fontFace = null;
- this.missingGlyph = null;
- this.glyphs = [];
- for (var i=0; i0 && text[i-1]!=' ' && i0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial';
- if (typeof(font.glyphs[c]) != 'undefined') {
- glyph = font.glyphs[c][arabicForm];
- if (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c];
- }
- }
- else {
- glyph = font.glyphs[c];
- }
- if (glyph == null) glyph = font.missingGlyph;
- return glyph;
- }
-
- this.renderChildren = function(ctx) {
- var customFont = this.parent.style('font-family').Definition.getDefinition();
- if (customFont != null) {
- var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);
- var fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle);
- var text = this.getText();
- if (customFont.isRTL) text = text.split("").reverse().join("");
-
- var dx = svg.ToNumberArray(this.parent.attribute('dx').value);
- for (var i=0; i 0 ? node.childNodes[0].nodeValue : // element
- node.text;
- this.getText = function() {
- return this.text;
- }
- }
- svg.Element.tspan.prototype = new svg.Element.TextElementBase;
-
- // tref
- svg.Element.tref = function(node) {
- this.base = svg.Element.TextElementBase;
- this.base(node);
-
- this.getText = function() {
- var element = this.attribute('xlink:href').Definition.getDefinition();
- if (element != null) return element.children[0].getText();
- }
- }
- svg.Element.tref.prototype = new svg.Element.TextElementBase;
-
- // a element
- svg.Element.a = function(node) {
- this.base = svg.Element.TextElementBase;
- this.base(node);
-
- this.hasText = true;
- for (var i=0; i 1 ? node.childNodes[1].nodeValue : '');
- css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''); // remove comments
- css = svg.compressSpaces(css); // replace whitespace
- var cssDefs = css.split('}');
- for (var i=0; i 0) {
- var urlStart = srcs[s].indexOf('url');
- var urlEnd = srcs[s].indexOf(')', urlStart);
- var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6);
- var doc = svg.parseXml(svg.ajax(url));
- var fonts = doc.getElementsByTagName('font');
- for (var f=0; f
- * @link http://www.phpied.com/rgb-color-parser-in-javascript/
- * @license Use it if you like it
- */
-function RGBColor(color_string)
-{
- this.ok = false;
-
- // strip any leading #
- if (color_string.charAt(0) == '#') { // remove # if any
- color_string = color_string.substr(1,6);
- }
-
- color_string = color_string.replace(/ /g,'');
- color_string = color_string.toLowerCase();
-
- // before getting into regexps, try simple matches
- // and overwrite the input
- var simple_colors = {
- aliceblue: 'f0f8ff',
- antiquewhite: 'faebd7',
- aqua: '00ffff',
- aquamarine: '7fffd4',
- azure: 'f0ffff',
- beige: 'f5f5dc',
- bisque: 'ffe4c4',
- black: '000000',
- blanchedalmond: 'ffebcd',
- blue: '0000ff',
- blueviolet: '8a2be2',
- brown: 'a52a2a',
- burlywood: 'deb887',
- cadetblue: '5f9ea0',
- chartreuse: '7fff00',
- chocolate: 'd2691e',
- coral: 'ff7f50',
- cornflowerblue: '6495ed',
- cornsilk: 'fff8dc',
- crimson: 'dc143c',
- cyan: '00ffff',
- darkblue: '00008b',
- darkcyan: '008b8b',
- darkgoldenrod: 'b8860b',
- darkgray: 'a9a9a9',
- darkgreen: '006400',
- darkkhaki: 'bdb76b',
- darkmagenta: '8b008b',
- darkolivegreen: '556b2f',
- darkorange: 'ff8c00',
- darkorchid: '9932cc',
- darkred: '8b0000',
- darksalmon: 'e9967a',
- darkseagreen: '8fbc8f',
- darkslateblue: '483d8b',
- darkslategray: '2f4f4f',
- darkturquoise: '00ced1',
- darkviolet: '9400d3',
- deeppink: 'ff1493',
- deepskyblue: '00bfff',
- dimgray: '696969',
- dodgerblue: '1e90ff',
- feldspar: 'd19275',
- firebrick: 'b22222',
- floralwhite: 'fffaf0',
- forestgreen: '228b22',
- fuchsia: 'ff00ff',
- gainsboro: 'dcdcdc',
- ghostwhite: 'f8f8ff',
- gold: 'ffd700',
- goldenrod: 'daa520',
- gray: '808080',
- green: '008000',
- greenyellow: 'adff2f',
- honeydew: 'f0fff0',
- hotpink: 'ff69b4',
- indianred : 'cd5c5c',
- indigo : '4b0082',
- ivory: 'fffff0',
- khaki: 'f0e68c',
- lavender: 'e6e6fa',
- lavenderblush: 'fff0f5',
- lawngreen: '7cfc00',
- lemonchiffon: 'fffacd',
- lightblue: 'add8e6',
- lightcoral: 'f08080',
- lightcyan: 'e0ffff',
- lightgoldenrodyellow: 'fafad2',
- lightgrey: 'd3d3d3',
- lightgreen: '90ee90',
- lightpink: 'ffb6c1',
- lightsalmon: 'ffa07a',
- lightseagreen: '20b2aa',
- lightskyblue: '87cefa',
- lightslateblue: '8470ff',
- lightslategray: '778899',
- lightsteelblue: 'b0c4de',
- lightyellow: 'ffffe0',
- lime: '00ff00',
- limegreen: '32cd32',
- linen: 'faf0e6',
- magenta: 'ff00ff',
- maroon: '800000',
- mediumaquamarine: '66cdaa',
- mediumblue: '0000cd',
- mediumorchid: 'ba55d3',
- mediumpurple: '9370d8',
- mediumseagreen: '3cb371',
- mediumslateblue: '7b68ee',
- mediumspringgreen: '00fa9a',
- mediumturquoise: '48d1cc',
- mediumvioletred: 'c71585',
- midnightblue: '191970',
- mintcream: 'f5fffa',
- mistyrose: 'ffe4e1',
- moccasin: 'ffe4b5',
- navajowhite: 'ffdead',
- navy: '000080',
- oldlace: 'fdf5e6',
- olive: '808000',
- olivedrab: '6b8e23',
- orange: 'ffa500',
- orangered: 'ff4500',
- orchid: 'da70d6',
- palegoldenrod: 'eee8aa',
- palegreen: '98fb98',
- paleturquoise: 'afeeee',
- palevioletred: 'd87093',
- papayawhip: 'ffefd5',
- peachpuff: 'ffdab9',
- peru: 'cd853f',
- pink: 'ffc0cb',
- plum: 'dda0dd',
- powderblue: 'b0e0e6',
- purple: '800080',
- red: 'ff0000',
- rosybrown: 'bc8f8f',
- royalblue: '4169e1',
- saddlebrown: '8b4513',
- salmon: 'fa8072',
- sandybrown: 'f4a460',
- seagreen: '2e8b57',
- seashell: 'fff5ee',
- sienna: 'a0522d',
- silver: 'c0c0c0',
- skyblue: '87ceeb',
- slateblue: '6a5acd',
- slategray: '708090',
- snow: 'fffafa',
- springgreen: '00ff7f',
- steelblue: '4682b4',
- tan: 'd2b48c',
- teal: '008080',
- thistle: 'd8bfd8',
- tomato: 'ff6347',
- turquoise: '40e0d0',
- violet: 'ee82ee',
- violetred: 'd02090',
- wheat: 'f5deb3',
- white: 'ffffff',
- whitesmoke: 'f5f5f5',
- yellow: 'ffff00',
- yellowgreen: '9acd32'
- };
- for (var key in simple_colors) {
- if (color_string == key) {
- color_string = simple_colors[key];
- }
- }
- // emd of simple type-in colors
-
- // array of color definition objects
- var color_defs = [
- {
- re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
- example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],
- process: function (bits){
- return [
- parseInt(bits[1]),
- parseInt(bits[2]),
- parseInt(bits[3])
- ];
- }
- },
- {
- re: /^(\w{2})(\w{2})(\w{2})$/,
- example: ['#00ff00', '336699'],
- process: function (bits){
- return [
- parseInt(bits[1], 16),
- parseInt(bits[2], 16),
- parseInt(bits[3], 16)
- ];
- }
- },
- {
- re: /^(\w{1})(\w{1})(\w{1})$/,
- example: ['#fb0', 'f0f'],
- process: function (bits){
- return [
- parseInt(bits[1] + bits[1], 16),
- parseInt(bits[2] + bits[2], 16),
- parseInt(bits[3] + bits[3], 16)
- ];
- }
- }
- ];
-
- // search through the definitions to find a match
- for (var i = 0; i < color_defs.length; i++) {
- var re = color_defs[i].re;
- var processor = color_defs[i].process;
- var bits = re.exec(color_string);
- if (bits) {
- channels = processor(bits);
- this.r = channels[0];
- this.g = channels[1];
- this.b = channels[2];
- this.ok = true;
- }
-
- }
-
- // validate/cleanup values
- this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);
- this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);
- this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);
-
- // some getters
- this.toRGB = function () {
- return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';
- }
- this.toHex = function () {
- var r = this.r.toString(16);
- var g = this.g.toString(16);
- var b = this.b.toString(16);
- if (r.length == 1) r = '0' + r;
- if (g.length == 1) g = '0' + g;
- if (b.length == 1) b = '0' + b;
- return '#' + r + g + b;
- }
-
- // help
- this.getHelpXML = function () {
-
- var examples = new Array();
- // add regexps
- for (var i = 0; i < color_defs.length; i++) {
- var example = color_defs[i].example;
- for (var j = 0; j < example.length; j++) {
- examples[examples.length] = example[j];
- }
- }
- // add type-in colors
- for (var sc in simple_colors) {
- examples[examples.length] = sc;
- }
-
- var xml = document.createElement('ul');
- xml.setAttribute('id', 'rgbcolor-examples');
- for (var i = 0; i < examples.length; i++) {
- try {
- var list_item = document.createElement('li');
- var list_color = new RGBColor(examples[i]);
- var example_div = document.createElement('div');
- example_div.style.cssText =
- 'margin: 3px; '
- + 'border: 1px solid black; '
- + 'background:' + list_color.toHex() + '; '
- + 'color:' + list_color.toHex()
- ;
- example_div.appendChild(document.createTextNode('test'));
- var list_item_value = document.createTextNode(
- ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()
- );
- list_item.appendChild(example_div);
- list_item.appendChild(list_item_value);
- xml.appendChild(list_item);
-
- } catch(e){}
- }
- return xml;
-
- }
-
-}
diff --git a/build/firefox/content/editor/contextmenu.js b/build/firefox/content/editor/contextmenu.js
deleted file mode 100644
index afa4318..0000000
--- a/build/firefox/content/editor/contextmenu.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Package: svgedit.contextmenu
- *
- * Licensed under the Apache License, Version 2
- *
- * Author: Adam Bender
- */
-// Dependencies:
-// 1) jQuery (for dom injection of context menus)\
-
-var svgedit = svgedit || {};
-(function() {
- var self = this;
- if (!svgedit.contextmenu) {
- svgedit.contextmenu = {};
- }
- self.contextMenuExtensions = {}
- var addContextMenuItem = function(menuItem) {
- // menuItem: {id, label, shortcut, action}
- if (!menuItemIsValid(menuItem)) {
- console
- .error("Menu items must be defined and have at least properties: id, label, action, where action must be a function");
- return;
- }
- if (menuItem.id in self.contextMenuExtensions) {
- console.error('Cannot add extension "' + menuItem.id
- + '", an extension by that name already exists"');
- return;
- }
- // Register menuItem action, see below for deferred menu dom injection
- console.log("Registed contextmenu item: {id:"+ menuItem.id+", label:"+menuItem.label+"}");
- self.contextMenuExtensions[menuItem.id] = menuItem;
- //TODO: Need to consider how to handle custom enable/disable behavior
- }
- var hasCustomHandler = function(handlerKey) {
- return self.contextMenuExtensions[handlerKey] && true;
- }
- var getCustomHandler = function(handlerKey) {
- return self.contextMenuExtensions[handlerKey].action;
- }
- var injectExtendedContextMenuItemIntoDom = function(menuItem) {
- if (Object.keys(self.contextMenuExtensions).length == 0) {
- // all menuItems appear at the bottom of the menu in their own container.
- // if this is the first extension menu we need to add the separator.
- $("#cmenu_canvas").append("");
- }
- var shortcut = menuItem.shortcut || "";
- $("#cmenu_canvas").append(""
- + menuItem.label + ""
- + shortcut + "");
- }
-
- var menuItemIsValid = function(menuItem) {
- return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action == 'function';
- }
-
- // Defer injection to wait out initial menu processing. This probably goes away once all context
- // menu behavior is brought here.
- svgEditor.ready(function() {
- for (menuItem in contextMenuExtensions) {
- injectExtendedContextMenuItemIntoDom(contextMenuExtensions[menuItem]);
- }
- });
- svgedit.contextmenu.resetCustomMenus = function(){self.contextMenuExtensions = {}}
- svgedit.contextmenu.add = addContextMenuItem;
- svgedit.contextmenu.hasCustomHandler = hasCustomHandler;
- svgedit.contextmenu.getCustomHandler = getCustomHandler;
-})();
diff --git a/build/firefox/content/editor/contextmenu/jquery.contextMenu.js b/build/firefox/content/editor/contextmenu/jquery.contextMenu.js
deleted file mode 100755
index 009d6cd..0000000
--- a/build/firefox/content/editor/contextmenu/jquery.contextMenu.js
+++ /dev/null
@@ -1,203 +0,0 @@
-// jQuery Context Menu Plugin
-//
-// Version 1.01
-//
-// Cory S.N. LaViska
-// A Beautiful Site (http://abeautifulsite.net/)
-// Modified by Alexis Deveria
-//
-// More info: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/
-//
-// Terms of Use
-//
-// This plugin is dual-licensed under the GNU General Public License
-// and the MIT License and is copyright A Beautiful Site, LLC.
-//
-if(jQuery)( function() {
- var win = $(window);
- var doc = $(document);
-
- $.extend($.fn, {
-
- contextMenu: function(o, callback) {
- // Defaults
- if( o.menu == undefined ) return false;
- if( o.inSpeed == undefined ) o.inSpeed = 150;
- if( o.outSpeed == undefined ) o.outSpeed = 75;
- // 0 needs to be -1 for expected results (no fade)
- if( o.inSpeed == 0 ) o.inSpeed = -1;
- if( o.outSpeed == 0 ) o.outSpeed = -1;
- // Loop each context menu
- $(this).each( function() {
- var el = $(this);
- var offset = $(el).offset();
-
- var menu = $('#' + o.menu);
-
- // Add contextMenu class
- menu.addClass('contextMenu');
- // Simulate a true right click
- $(this).bind( "mousedown", function(e) {
- var evt = e;
- $(this).mouseup( function(e) {
- var srcElement = $(this);
- srcElement.unbind('mouseup');
- $(".contextMenu").hide();
- if( evt.button === 2 || o.allowLeft || (evt.ctrlKey && svgedit.browser.isMac()) ) {
- e.stopPropagation();
-
- // Get this context menu
-
- if( el.hasClass('disabled') ) return false;
-
- // Detect mouse position
- var d = {}, x = e.pageX, y = e.pageY;
-
- var x_off = win.width() - menu.width(),
- y_off = win.height() - menu.height();
-
- if(x > x_off - 15) x = x_off-15;
- if(y > y_off - 30) y = y_off-30; // 30 is needed to prevent scrollbars in FF
-
- // Show the menu
- doc.unbind('click');
- menu.css({ top: y, left: x }).fadeIn(o.inSpeed);
- // Hover events
- menu.find('A').mouseover( function() {
- menu.find('LI.hover').removeClass('hover');
- $(this).parent().addClass('hover');
- }).mouseout( function() {
- menu.find('LI.hover').removeClass('hover');
- });
-
- // Keyboard
- doc.keypress( function(e) {
- switch( e.keyCode ) {
- case 38: // up
- if( !menu.find('LI.hover').length ) {
- menu.find('LI:last').addClass('hover');
- } else {
- menu.find('LI.hover').removeClass('hover').prevAll('LI:not(.disabled)').eq(0).addClass('hover');
- if( !menu.find('LI.hover').length ) menu.find('LI:last').addClass('hover');
- }
- break;
- case 40: // down
- if( menu.find('LI.hover').length == 0 ) {
- menu.find('LI:first').addClass('hover');
- } else {
- menu.find('LI.hover').removeClass('hover').nextAll('LI:not(.disabled)').eq(0).addClass('hover');
- if( !menu.find('LI.hover').length ) menu.find('LI:first').addClass('hover');
- }
- break;
- case 13: // enter
- menu.find('LI.hover A').trigger('click');
- break;
- case 27: // esc
- doc.trigger('click');
- break
- }
- });
-
- // When items are selected
- menu.find('A').unbind('mouseup');
- menu.find('LI:not(.disabled) A').mouseup( function() {
- doc.unbind('click').unbind('keypress');
- $(".contextMenu").hide();
- // Callback
- if( callback ) callback( $(this).attr('href').substr(1), $(srcElement), {x: x - offset.left, y: y - offset.top, docX: x, docY: y} );
- return false;
- });
-
- // Hide bindings
- setTimeout( function() { // Delay for Mozilla
- doc.click( function() {
- doc.unbind('click').unbind('keypress');
- menu.fadeOut(o.outSpeed);
- return false;
- });
- }, 0);
- }
- });
- });
-
- // Disable text selection
- if( $.browser.mozilla ) {
- $('#' + o.menu).each( function() { $(this).css({ 'MozUserSelect' : 'none' }); });
- } else if( $.browser.msie ) {
- $('#' + o.menu).each( function() { $(this).bind('selectstart.disableTextSelect', function() { return false; }); });
- } else {
- $('#' + o.menu).each(function() { $(this).bind('mousedown.disableTextSelect', function() { return false; }); });
- }
- // Disable browser context menu (requires both selectors to work in IE/Safari + FF/Chrome)
- $(el).add($('UL.contextMenu')).bind('contextmenu', function() { return false; });
-
- });
- return $(this);
- },
-
- // Disable context menu items on the fly
- disableContextMenuItems: function(o) {
- if( o == undefined ) {
- // Disable all
- $(this).find('LI').addClass('disabled');
- return( $(this) );
- }
- $(this).each( function() {
- if( o != undefined ) {
- var d = o.split(',');
- for( var i = 0; i < d.length; i++ ) {
- $(this).find('A[href="' + d[i] + '"]').parent().addClass('disabled');
-
- }
- }
- });
- return( $(this) );
- },
-
- // Enable context menu items on the fly
- enableContextMenuItems: function(o) {
- if( o == undefined ) {
- // Enable all
- $(this).find('LI.disabled').removeClass('disabled');
- return( $(this) );
- }
- $(this).each( function() {
- if( o != undefined ) {
- var d = o.split(',');
- for( var i = 0; i < d.length; i++ ) {
- $(this).find('A[href="' + d[i] + '"]').parent().removeClass('disabled');
-
- }
- }
- });
- return( $(this) );
- },
-
- // Disable context menu(s)
- disableContextMenu: function() {
- $(this).each( function() {
- $(this).addClass('disabled');
- });
- return( $(this) );
- },
-
- // Enable context menu(s)
- enableContextMenu: function() {
- $(this).each( function() {
- $(this).removeClass('disabled');
- });
- return( $(this) );
- },
-
- // Destroy context menu(s)
- destroyContextMenu: function() {
- // Destroy specified context menus
- $(this).each( function() {
- // Disable action
- $(this).unbind('mousedown').unbind('mouseup');
- });
- return( $(this) );
- }
-
- });
-})(jQuery);
\ No newline at end of file
diff --git a/build/firefox/content/editor/draginput.js b/build/firefox/content/editor/draginput.js
deleted file mode 100644
index 0c172b1..0000000
--- a/build/firefox/content/editor/draginput.js
+++ /dev/null
@@ -1,47 +0,0 @@
-;(function($) {
-
- var methods = {
-
- init : function(options) {
-
- return this.each(function() {
-
- var settings = {
- };
-
- if(options) {
- $.extend(settings, options);
- }
-
- var plugin = this;
- var $plugin = $(this);
-
- $plugin.settings = settings;
-
- this.privateMethod = function() {
- }
-
- $plugin.data("example", {});
-
- // Plug-in code here...
- });
-
- },
-
- publicFunction : function() {
- }
- };
-
- $.fn.example = function(method) {
- if(methods[method]) {
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
- }
- else if(typeof method === 'object' || !method) {
- return methods.init.apply(this, arguments);
- }
- else {
- $.error("Method " + method + " does not exist on jQuery.example");
- }
- };
-
-})(jQuery);
\ No newline at end of file
diff --git a/build/firefox/content/editor/draw.js b/build/firefox/content/editor/draw.js
deleted file mode 100644
index 8db3138..0000000
--- a/build/firefox/content/editor/draw.js
+++ /dev/null
@@ -1,528 +0,0 @@
-/**
- * Package: svgedit.draw
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2011 Jeff Schiller
- */
-
-// Dependencies:
-// 1) jQuery
-// 2) browser.js
-// 3) svgutils.js
-
-var svgedit = svgedit || {};
-
-(function() {
-
-if (!svgedit.draw) {
- svgedit.draw = {};
-}
-
-var svg_ns = "http://www.w3.org/2000/svg";
-var se_ns = "http://svg-edit.googlecode.com";
-var xmlns_ns = "http://www.w3.org/2000/xmlns/";
-
-var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use';
-var visElems_arr = visElems.split(',');
-
-var RandomizeModes = {
- LET_DOCUMENT_DECIDE: 0,
- ALWAYS_RANDOMIZE: 1,
- NEVER_RANDOMIZE: 2
-};
-var randomize_ids = RandomizeModes.LET_DOCUMENT_DECIDE;
-
-/**
- * This class encapsulates the concept of a layer in the drawing
- * @param name {String} Layer name
- * @param child {SVGGElement} Layer SVG group.
- */
-svgedit.draw.Layer = function(name, group) {
- this.name_ = name;
- this.group_ = group;
-};
-
-svgedit.draw.Layer.prototype.getName = function() {
- return this.name_;
-};
-
-svgedit.draw.Layer.prototype.getGroup = function() {
- return this.group_;
-};
-
-
-// Called to ensure that drawings will or will not have randomized ids.
-// The current_drawing will have its nonce set if it doesn't already.
-//
-// Params:
-// enableRandomization - flag indicating if documents should have randomized ids
-svgedit.draw.randomizeIds = function(enableRandomization, current_drawing) {
- randomize_ids = enableRandomization == false ?
- RandomizeModes.NEVER_RANDOMIZE :
- RandomizeModes.ALWAYS_RANDOMIZE;
-
- if (randomize_ids == RandomizeModes.ALWAYS_RANDOMIZE && !current_drawing.getNonce()) {
- current_drawing.setNonce(Math.floor(Math.random() * 100001));
- } else if (randomize_ids == RandomizeModes.NEVER_RANDOMIZE && current_drawing.getNonce()) {
- current_drawing.clearNonce();
- }
-};
-
-/**
- * This class encapsulates the concept of a SVG-edit drawing
- *
- * @param svgElem {SVGSVGElement} The SVG DOM Element that this JS object
- * encapsulates. If the svgElem has a se:nonce attribute on it, then
- * IDs will use the nonce as they are generated.
- * @param opt_idPrefix {String} The ID prefix to use. Defaults to "svg_"
- * if not specified.
- */
-svgedit.draw.Drawing = function(svgElem, opt_idPrefix) {
- if (!svgElem || !svgElem.tagName || !svgElem.namespaceURI ||
- svgElem.tagName != 'svg' || svgElem.namespaceURI != svg_ns) {
- throw "Error: svgedit.draw.Drawing instance initialized without a